springcloud_service 服务提供者

2024-08-22 16:18

本文主要是介绍springcloud_service 服务提供者,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本项目只是服务注册和发现中心的一个模块,完整项目整合请参考:https://blog.csdn.net/u012946310/article/details/81913874

一,项目结构与代码展示:

这里写图片描述

服务提供者 springcloud_service6010 和 6011 两个代码基本一模一样,只是运行在同一台机器上面有端口的区别而已,所以只展示一个项目的代码

1,pom.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>springcloud_service6010</groupId><artifactId>springcloud_service6010</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>springcloud_service6010</name><description>Demo project for Spring Boot</description><parent><artifactId>springcloud_demo</artifactId><groupId>springcloud_demo</groupId><version>0.0.1-SNAPSHOT</version></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring-cloud.version>Finchley.SR1</spring-cloud.version></properties><dependencies><dependency><groupId>springcloud_demo</groupId><artifactId>springcloud_model</artifactId><version>0.0.1-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.2.3</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version></dependency><!-- 整合swagger,方便接口查看 --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.7.0</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.7.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><finalName>6010</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

2,ServiceApplication6010 启动类

package springcloud.service;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;@MapperScan("springcloud.service.mappers") // 扫码mapper包
@EnableDiscoveryClient  //激活eureka中的DiscoveryClient实现
@SpringBootApplication
public class ServiceApplication6010 {public static void main(String[] args) {SpringApplication.run(ServiceApplication6010.class, args);}// 设置@Value注解取值不到忽略(不报错)@Beanpublic static PropertySourcesPlaceholderConfigurer placeholderConfigurer() {PropertySourcesPlaceholderConfigurer c = new PropertySourcesPlaceholderConfigurer();c.setIgnoreUnresolvablePlaceholders(true);return c;}
}

3,MySwagger2Config 工具类

package springcloud.service.swagger;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;@Configuration
@EnableSwagger2 // 开启swagger
public class MySwagger2Config extends WebMvcConfigurerAdapter {@Beanpublic Docket createRestApi() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()// 扫描指定包中的swagger注解.apis(RequestHandlerSelectors.basePackage("springcloud.service.controller")).paths(PathSelectors.any()).build().pathMapping("/");}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("基础平台 RESTful APIs").description("基础平台 RESTful 风格的接口文档,内容详细,极大的减少了前后端的沟通成本,同时确保代码与文档保持高度一致,极大的减少维护文档的时间。").version("1.0.0").build();}@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");}}

4,UserMapper 类

package springcloud.service.mappers;import springcloud.service.model.User;public interface UserMapper {int deleteByPrimaryKey(Integer var1);int insertSelective(User var1);User selectByPrimaryKey(Integer var1);}

5,UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="springcloud.service.mappers.UserMapper"><delete id="deleteByPrimaryKey">DELETEFROM userWHERE user_id = #{userId}</delete><insert id="insertSelective">INSERT INTO user (user_name, user_phone, user_address)VALUES(#{userName}, #{userPhone}, #{userAddress})</insert><resultMap id="selectByPrimaryKeyMap" type="springcloud.service.model.User"><result column="user_id" property="userId"/><result column="user_name" property="userName"/><result column="user_phone" property="userPhone"/><result column="user_address" property="userAddress"/></resultMap><select id="selectByPrimaryKey" parameterType="int" resultMap="selectByPrimaryKeyMap">select *from userwhere user_id = #{userId}</select></mapper>

6,UserService 类

package springcloud.service.service;import springcloud.service.model.User;public interface UserService {int deleteByPrimaryKey(Integer var1);int insertSelective(User var1);User selectByPrimaryKey(Integer var1);}

7,UserServiceImpl 类

package springcloud.service.service.impl;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import springcloud.service.mappers.UserMapper;
import springcloud.service.model.User;
import springcloud.service.service.UserService;@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic int deleteByPrimaryKey(Integer var1) {return userMapper.deleteByPrimaryKey(var1);}@Overridepublic int insertSelective(User var1) {return userMapper.insertSelective(var1);}@Overridepublic User selectByPrimaryKey(Integer var1) {return userMapper.selectByPrimaryKey(var1);}
}

8,UserController 类

package springcloud.service.controller;import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import springcloud.service.model.User;
import springcloud.service.service.UserService;/*** 服务接口6012:像 eureka 注册所提供的服务*/
@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {@Value("${source}")private String source;@Value("${name}")private String name;@Autowiredprivate UserService userService;@ResponseBody@PostMapping("/addUser")public int addUser(@RequestBody User user){ // 对象参数,参数前面需要加上 @RequestBody 注解,不然赋值失败log.info("===============${name}=" + name);log.info("===============${source}=" + source);log.debug("===============addUser");return userService.insertSelective(user);}@ResponseBody@GetMapping("/getUserById/{userId}")public User getUserById(@PathVariable("userId") Integer userId){log.info("===============${name}=" + name);log.info("===============${source}=" + source);log.debug("===============getUserById");return userService.selectByPrimaryKey(userId);}
}

9,application.properties 配置文件


server.port=6010
logging.level.root=debug#应用(服务)名称,如果多个服务集群,该名称应该一样
#spring.application.name=springcloud_service // 不可以使用下划线,改为中划线
spring.application.name=springcloud-service
#注册中心地址
eureka.client.serviceUrl.defaultZone=http://192.168.2.126:6110/eureka/,http://192.168.2.131:6111/eureka/
#自定义服务名称信息
eureka.instance.instance-id=springcloud-service6010
#访问路径可以显示IP地址
eureka.instance.prefer-ip-address=true
#点击status状态栏时,跳转的路径
eureka.instance.status-page-url=http://192.168.2.126:6010/swagger-ui.html#mysql
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.2.126:3306/springcloud_demo?characterEncoding=utf-8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456#mapper文件目录
mybatis.mapper-locations=classpath*:mappers/*.xml

10,bootstrap.properties 配置文件


#获取远程配置
spring.cloud.config.uri=http://192.168.2.126:6310
spring.cloud.config.profile=test

注意:bootstrap.properties ,它和application.properties 文件一样,会被spring boot加载,但是bootstrap.properties 会优先加载。
这里 bootstrap.properties 文件中配置了分布式配置中心的 ip 地址和运行环境 profile,可以直接获取到分布式配置中心配置的内容,上面 UserController 里面的代码

    @Value("${source}")private String source;@Value("${name}")private String name;

就是获取的分布式配置中心的配置信息,仔细查看 application.properties 配置文件里面是没有配置这两个参数的。

二,启动项目并运行展示

上面的服务提供者环境搭建好后就可以运行我们的服务提供者了,服务提供者运行之前还需要先运行我们之前搭建的126:6110 与 131:6111 两个 eureka 注册中心,需要将我们提供者服务注册到注册中心,供消费者来调用。

运行完服务提供者后,再次刷新 eureka 界面展示控制台
这里写图片描述
会发现我们的两个服务提供者已经注册到了 126:6110 与 131:6111 两个 eureka 注册中心,服务名称 Application 就是我们代码中 spring.application.name 所配置的服务名称(将来消费者需要通过此名称调用服务提供者)

#应用(服务)名称,如果多个服务集群,该名称应该一样
#spring.application.name=springcloud_service // 不可以使用下划线,改为中划线
spring.application.name=springcloud-service

,并且鼠标移动至 Status 栏,左下角会显示 swagger 控制台地址,点击进去即可通过 swagger 查看提供者所提供的接口。

swagger 展示界面:
这里写图片描述

到这里,我们的服务提供者就算配置完成了。

这篇关于springcloud_service 服务提供者的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1096772

相关文章

SpringBoot整合AOP及使用案例实战

《SpringBoot整合AOP及使用案例实战》本文详细介绍了SpringAOP中的切入点表达式,重点讲解了execution表达式的语法和用法,通过案例实战,展示了AOP的基本使用、结合自定义注解以... 目录一、 引入依赖二、切入点表达式详解三、案例实战1. AOP基本使用2. AOP结合自定义注解3.

Java实现字符串大小写转换的常用方法

《Java实现字符串大小写转换的常用方法》在Java中,字符串大小写转换是文本处理的核心操作之一,Java提供了多种灵活的方式来实现大小写转换,适用于不同场景和需求,本文将全面解析大小写转换的各种方法... 目录前言核心转换方法1.String类的基础方法2. 考虑区域设置的转换3. 字符级别的转换高级转换

SpringBoot简单整合ElasticSearch实践

《SpringBoot简单整合ElasticSearch实践》Elasticsearch支持结构化和非结构化数据检索,通过索引创建和倒排索引文档,提高搜索效率,它基于Lucene封装,分为索引库、类型... 目录一:ElasticSearch支持对结构化和非结构化的数据进行检索二:ES的核心概念Index:

Java方法重载与重写之同名方法的双面魔法(最新整理)

《Java方法重载与重写之同名方法的双面魔法(最新整理)》文章介绍了Java中的方法重载Overloading和方法重写Overriding的区别联系,方法重载是指在同一个类中,允许存在多个方法名相同... 目录Java方法重载与重写:同名方法的双面魔法方法重载(Overloading):同门师兄弟的不同绝

Spring配置扩展之JavaConfig的使用小结

《Spring配置扩展之JavaConfig的使用小结》JavaConfig是Spring框架中基于纯Java代码的配置方式,用于替代传统的XML配置,通过注解(如@Bean)定义Spring容器的组... 目录JavaConfig 的概念什么是JavaConfig?为什么使用 JavaConfig?Jav

Java数组动态扩容的实现示例

《Java数组动态扩容的实现示例》本文主要介绍了Java数组动态扩容的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1 问题2 方法3 结语1 问题实现动态的给数组添加元素效果,实现对数组扩容,原始数组使用静态分配

Java中ArrayList与顺序表示例详解

《Java中ArrayList与顺序表示例详解》顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构,:本文主要介绍Java中ArrayList与... 目录前言一、Java集合框架核心接口与分类ArrayList二、顺序表数据结构中的顺序表三、常用代码手动

JAVA项目swing转javafx语法规则以及示例代码

《JAVA项目swing转javafx语法规则以及示例代码》:本文主要介绍JAVA项目swing转javafx语法规则以及示例代码的相关资料,文中详细讲解了主类继承、窗口创建、布局管理、控件替换、... 目录最常用的“一行换一行”速查表(直接全局替换)实际转换示例(JFramejs → JavaFX)迁移建

Spring Boot Interceptor的原理、配置、顺序控制及与Filter的关键区别对比分析

《SpringBootInterceptor的原理、配置、顺序控制及与Filter的关键区别对比分析》本文主要介绍了SpringBoot中的拦截器(Interceptor)及其与过滤器(Filt... 目录前言一、核心功能二、拦截器的实现2.1 定义自定义拦截器2.2 注册拦截器三、多拦截器的执行顺序四、过

JAVA线程的周期及调度机制详解

《JAVA线程的周期及调度机制详解》Java线程的生命周期包括NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING和TERMINATED,线程调度依赖操作系统,采用抢占... 目录Java线程的生命周期线程状态转换示例代码JAVA线程调度机制优先级设置示例注意事项JAVA线程