为微服务提供集中化的外部配置支持 包括服务端和客户端两部分
服务端
依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> <version>2.2.4.RELEASE</version> </dependency> <!--actuator完善监控信息--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
配置
server: port: 3344 spring: application: name: springcloud-config-server # 连接远程仓库 cloud: config: server: git: uri: https://github.com/ChenCurry/springcloud-config.git
开启注解
@SpringBootApplication @EnableConfigServer public class ConfigServer3344 { public static void main(String[] args) { SpringApplication.run(ConfigServer3344.class, args); } }
远程application.yml
spring: profiles: active: dev --- spring: profiles: dev application: name: springcloud-config-dev --- spring: profiles: test application: name: springcloud-config-test
访问远程配置
http://localhost:3344/application-dev.yml
访问资源的方式
/{application}/{profile}[/{label}] /{application}-{profile}.yml /{label}/{application}-{profile}.yml /{application}-{profile}.properties /{label}/{application}-{profile}.properties
客户端
先准备远程配置
spring: profiles: active: dev --- server: port: 8201 #spring配置 spring: profiles: dev application: name: springcloud-provider-dept #eureka eureka: client: service-url: defaultZone: http://eureka7001.com:7001/eureka/ --- server: port: 8202 #spring配置 spring: profiles: test application: name: springcloud-provider-dept #eureka eureka: client: service-url: defaultZone: http://eureka7001.com:7001/eureka/
依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--actuator完善监控信息--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> <version>2.2.4.RELEASE</version> </dependency>
系统配置(访问“读远程配置的服务端”)
#系统级别的配置,区别于用户级别的配置(application.yml) spring: cloud: config: name: config-client #需要从git上读取的资源名称,不需要后缀 profile: test label: master uri: http://localhost:3344
用户配置(标识当前服务)
# 用户级别的配置 spring: application: name: springcloud-config-client-3355
访问远程配置
@RestController public class ConfigClientController { @Value("${spring.application.name}") private String applicationName; @Value("${eureka.client.service-url.defaultZone}") private String eurekaServer; @Value("${server.port}") private String port; @RequestMapping("/config") public String getConfig(){ return "applicationName:"+applicationName +"eurekaServer:"+eurekaServer +"port:"+port; } }
http://localhost:8202/config
实战测试
解决集群的配置问题
对应远程配置文件
spring: profiles: active: dev --- server: port: 7001 #spring配置 spring: profiles: dev application: name: springcloud-config-eureka #Eureka eureka: instance: hostname: eureka7001.com #服务端的实例名称 client: register-with-eureka: false #表示是否向eureka注册中心注册自己 fetch-registry: false #false表示自己为注册中心 service-url: #监控页面 #单机 defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #集群(关联) defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ --- server: port: 7001 #spring配置 spring: profiles: test application: name: springcloud-config-eureka #Eureka eureka: instance: hostname: eureka7001.com #服务端的实例名称 client: register-with-eureka: false #表示是否向eureka注册中心注册自己 fetch-registry: false #false表示自己为注册中心 service-url: #监控页面 #单机 defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #集群(关联) defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
spring: profiles: active: dev --- server: port: 8001 #mybatis配置 mybatis: type-aliases-package: com.gfpz.springcloud.pojo config-location: classpath:mybatis/mybatis-config.xml mapper-locations: classpath:mybatis/mapper/*.xml #spring配置 spring: profiles: dev application: name: springcloud-config-dept datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/db01?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8 username: root password: root #eureka eureka: client: service-url: #往Eureka单机发布 defaultZone: http://localhost:7001/eureka/ #往Eureka集群发布 defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ instance: instance-id: Springcloud-provider-dept8001 #info 配置 info: app.name: gfpz-springcloud company.name: possible2dream.cn --- server: port: 8001 #mybatis配置 mybatis: type-aliases-package: com.gfpz.springcloud.pojo config-location: classpath:mybatis/mybatis-config.xml mapper-locations: classpath:mybatis/mapper/*.xml #spring配置 spring: profiles: test application: name: springcloud-config-dept datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/db02?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8 username: root password: root #eureka eureka: client: service-url: #往Eureka单机发布 defaultZone: http://localhost:7001/eureka/ #往Eureka集群发布 defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ instance: instance-id: Springcloud-provider-dept8001 #info 配置 info: app.name: gfpz-springcloud company.name: possible2dream.cn
http://localhost:3344/master/config-eureka-dev.yml(先保证服务端能够读取到) http://localhost:7001/(7001端口是在远程文件里配置的,能访问成功,说明已经读到了) http://localhost:8001/dept/get/1(服务端集群对应配置文件搞定)
https://github.com/ChenCurry/springcloud.git