springcloud依赖跟配置

    技术2022-07-27  75

    Eureka注册中心(注册中心服务端)

    <properties> <!-- 项目设置:编码格式UTF-8 --> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <mybatis-spring-boot>1.2.0</mybatis-spring-boot> <mysql-connector>5.1.39</mysql-connector> <druid>1.0.18</druid> </properties> <!-- springboot父依赖 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.14.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <dependencies> <!-- 启动依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 热部署 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <!-- 测试依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- Eureka 注册中心--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies> <!-- SpringCloud版本依赖管理 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Greenwich.SR5</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>

    注册中心配置文件 application.yml

    #注册中心配置 # server: port: 8000 #项目端口号 eureka: instance: hostname: localhost #eureka服务端的实例名称 client: register-with-eureka: false #false表示不向注册中心注册自己。 fetch-registry: false #false表示自己端就是注册中心,我的职责就是维护服务实

    启动类

    @SpringBootApplication @EnableEurekaServer public class Config_App { public static void main(String[] args) { SpringApplication.run(Config_App.class, args); } }

    服务提供者(消费者) 两者一致

    依赖

    <properties> <!-- 项目设置:编码格式UTF-8 --> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <mybatis-spring-boot>1.2.0</mybatis-spring-boot> <mysql-connector>5.1.39</mysql-connector> <druid>1.0.18</druid> </properties> <!-- springboot父依赖 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.14.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <dependencies> <!-- 启动依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 热部署 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <!-- 测试依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- Eureka 注册中心--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies> <!-- SpringCloud版本依赖管理 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Greenwich.SR5</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>

    配置文件

    ##服务端 eureka: client: serviceUrl: #eureka 注册中心地址 defaultZone: http://localhost:8000/eureka instance: instance-id: spring-consumer8002 #ip名称 prefer-ip-address: true server: #项目端口号 port: 8001 spring: application: #服务名称,随便写 name: spring-consumer

    启动类

    @SpringBootApplication @EnableEurekaClient public class Client_App { public static void main(String[] args) { SpringApplication.run(Client_App.class, args); } }

    服务端配置文件

    ##服务端 eureka: client: serviceUrl: #eureka 注册中心地址 defaultZone: http://localhost:8000/eureka instance: instance-id: spring-consumer8002 #ip名称 prefer-ip-address: true server: #项目端口号 port: 8001 spring: application: #服务名称,随便写 name: spring-consumer

    启动类

    @SpringBootApplication @EnableEurekaClient public class Client_App { public static void main(String[] args) { SpringApplication.run(Client_App.class, args); } }

    restTemplate调用

    再消费者中添加config类 也表示使用负载均衡ribbon

    @Configuration public class SpringConfig { @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } }

    方法调用

    @RestController public class ConsumerController { @Autowired private RestTemplate rest; @RequestMapping("/findAll") public List<String> findAll(){ return rest.getForObject("http://spring-provider-restTem/findAll",List.class); } }

    启动类不变

    开启Hystrix容错保护 加入依赖

    <!-- hystrix断路器 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> <version>1.3.1.RELEASE</version> </dependency>

    启动类加入

    @EnableHystrix

    Feign调用 (包含ribbon跟Hystrix) Feign默认的就有ribbon负载均衡 依赖

    <!-- feign远程调用 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>

    配置

    #开启feign调用 跟断路器 feign: hystrix: enabled: true

    接口调用 Value表示你要调用项目的application.name名称 fallbackFactory表示断路器访问的类 ,@requestMapping()表示你要调用的方法赋值给findAll 也表示Hystrix容错保护

    @FeignClient(value="spring-feign-provider",fallbackFactory= ConsumerFallBack.class) public interface ConsumerService { @RequestMapping("/getAll") public String findAll(); }

    启动类

    @SpringBootApplication @EnableEurekaClient @EnableFeignClients

    分布式配置中心 server 添加依赖

    <!-- SpringCloud config-server 分布式配置中心 服务端 依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency>

    配置文件application.properties

    #项目注册名称 spring.application.name=config-server #项目发布版本号 server.port=9999 #远程 Git 项目仓库地址 spring.cloud.config.server.git.uri=https://gitee.com/li_quan_you/springcloudconfigce.git #Gitee : https://gitee.com/longtanmashuai/springcloud-config-server.git #Github : https://github.com/CoddingMa/-springcloud-config-server.git #远程 Git 私有项目的账号密码 spring.cloud.config.server.git.username= #远程 Git 私有项目的密码 spring.cloud.config.server.git.password= eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/

    启动类

    @EnableConfigServer @SpringBootApplication @EnableEurekaClient public class ConfigServer_App { public static void main(String[] args) { SpringApplication.run(ConfigServer_App.class, args); } }

    Client 添加依赖

    <!-- SpringCloud config-server 分布式配置中心 消费端 依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency>

    配置文件

    #项目名称 spring.application.name=config-client #端口号 server.port=9001 #分支 spring.cloud.config.label=master #多环境配置,默认 default(MS:Git 仓库配置文件中 profile 与此处对应) spring.cloud.config.profile=dev # 注册中心配置路径 eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/ # 开启分布式配置 spring.cloud.config.discovery.enabled=true # 要获取的分布式配置名称 spring.cloud.config.discovery.serviceId=config-server

    启动类

    @SpringBootApplication @EnableEurekaClient public class Client_App { public static void main(String[] args) { SpringApplication.run(Client_App.class, args); } }

    Zuul路由网关 依赖

    <!-- SpringCloud Zuul 网关路由 依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency>

    配置文件

    eureka: client: serviceUrl: #eureka 注册中心地址 defaultZone: http://localhost:8000/eureka/ instance: instance-id: spring-zuul5555 #ip名称 prefer-ip-address: true server: #项目端口号 port: 5555 spring: application: #服务名称,随便写 name: spring-zuul zuul: ignored-services: "*" #拦截请求*包含所有 routes: #白名单 student.serviceId: crm-consumer #服务名称 student.path: /student/** #访问student会转发到crm-consumer中

    启动类

    @SpringBootApplication @EnableZuulProxy @EnableEurekaClient public class Zuul_App { public static void main(String[] args) { SpringApplication.run(Zuul_App.class, args); } }

    继承zuulfilter

    @Component public class ZuulDemoFilter extends ZuulFilter{ private static Logger log = LoggerFactory.getLogger(ZuulDemoFilter.class); public boolean shouldFilter() { //判断该过滤器是否需要被执行。这里我们直接返回了 true,因此该过滤器对所有请求都会生效。实际运用中我们可以利用该函数来指定过滤器的有效范围。 return true; } /** * 过滤器的具体逻辑。 * 这里我们通过 ctx.setSendZuulResponse(false)令 zuul 过滤该请求,不对其进行路由, * 然后通过 ctx.setResponseStatusCode(401)设置了其返回的错误码, * 当然我们也可以进一步优化我们的返回,比如,通过 ctx.getResponse()对响应内容进 行编辑等。 */ public Object run() throws ZuulException { RequestContext ctx = RequestContext.getCurrentContext(); HttpServletRequest request = ctx.getRequest(); log.info(String.format("%s >>> %s", request.getMethod(),request.getRequestURL().toString())); Object accessToken = request.getParameter("token"); String refer=request.getHeader("refer"); if (accessToken != null) { return null;//网关路由放行 } log.warn("token is empty"); ctx.setSendZuulResponse(false);//网关路由过滤不路由 ctx.setResponseStatusCode(401); try { ctx.getResponse().getWriter().write("token is empty"); } catch (Exception e) { } return null;//网关路由放行 } @Override public String filterType() { //过滤器的类型,它决定过滤器在请求的哪个生命周期中执行。这里定义为 pre,代表会在请求被路由之前执行。 return "pre"; } @Override public int filterOrder() { //过滤器的执行顺序。当请求在一个阶段中存在多个过滤器时,需要根据该方法返回的值来依次执行。 return 0; } }

    全部依赖

    <!-- springboot父依赖 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.14.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <!-- SpringCloud版本依赖管理 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Greenwich.SR5</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> //子项目依赖 <dependencies> <!-- 启动依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 测试依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- Eureka 注册中心--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies> <!-- feign远程调用 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <!-- SpringCloud Zuul 网关路由 依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> <!-- SpringCloud config-server 分布式配置中心 服务端 依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> <!-- SpringCloud config-server 分布式配置中心 消费端 依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <!-- hystrix断路器 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> <version>1.3.1.RELEASE</version> </dependency>

    全部配置 注册中心配置

    #注册中心配置 server: port: 8000 #项目端口号 eureka: instance: hostname: localhost #eureka服务端的实例名称 client: register-with-eureka: false #false表示不向注册中心注册自己。 fetch-registry: false #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务 service-url: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址。

    服务端配置

    ##服务端 eureka: client: serviceUrl: #eureka 注册中心地址 defaultZone: http://localhost:8000/eureka instance: instance-id: spring-feign-provider8001 #ip名称 prefer-ip-address: true server: #项目端口号 port: 8001 spring: application: #服务名称,随便写 name: spring-feign-provider #开启feign调用 跟断路器 feign: hystrix: enabled: true

    路由配置

    eureka: client: serviceUrl: #eureka 注册中心地址 defaultZone: http://localhost:8000/eureka/ instance: instance-id: spring-zuul5555 #ip名称 prefer-ip-address: true server: #项目端口号 port: 5555 spring: application: #服务名称,随便写 name: spring-zuul zuul: ignored-services: "*" #拦截请求*包含所有 routes: #白名单 student.serviceId: crm-consumer #服务名称 student.path: /student/** #访问student会转发到crm-consumer中

    启动类注解

    @SpringBootApplication //springboot自动装配启动依赖 @EnableZuulProxy //开启路由网关 @EnableEurekaClient //开启注册中心,把当前服务注册到注册中心 @EnableFeignClients //开启feign远程调用 包含ribbon负载均衡跟Hystrix容错保护 @EnableEurekaServer //注册中心 服务端,把当前服务为注册中心 @EnableHystrix //开启容错保护,当用feign远程调用则不需要当前注解

    整合Swagger 依赖

    <!-- swagger api 的依赖 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.6.1</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.6.1</version> </dependency>

    配置

    eureka: client: #eureka 注册中心地址 serviceUrl: defaultZone: http://localhost:8000/eureka/ #eureka 注册中心展示的微服务信息页面,默认为 http://localhost:${server.port}/info instance: status-page-url: http://localhost:${server.port}/swagger-ui.html #swagger启动页面访问路径 server: #项目端口号 port: 8010 spring: application: #服务名称,随便写 name: service-swagger

    注解

    @EnableSwagger2 //开启swagger @SpringBootApplication //启动springboot自动配置 @EnableEurekaClient //启动注册中心 @Api:修饰整个类,描述 Controller 的作用 @ApiOperation:描述一个类的一个方法,或者说一个接口 @ApiParam:单个参数描述 @ApiModel:用对象来接收参数 @ApiProperty:用对象接收参数时,描述对象的一个字段 @ApiResponse:HTTP 响应其中 1 个描述 @ApiResponses:HTTP 响应整体描述 @ApiIgnore:使用该注解忽略这个 API @ApiError :发生错误返回的信息 @ApiImplicitParam:一个请求参数 @ApiImplicitParams:多个请求参数

    引入自己定义的通用项目

    <dependency><!-- 引入自己定义的api通用包,可以使用clock部门Entity --> <groupId>com.ysd</groupId> <artifactId>crm-api-clock</artifactId> <version>${project.version}</version> </dependency>
    Processed: 0.009, SQL: 9