- 实现简单的配置中心
- 实现配置中心服务端
- 一、新建springboot项目,引入依赖
- 二、相关配置
- 三、测试
- 实现配置中心客户端
- 一、引入maven依赖
- 二、初始化配置文件
- 三、启动类
- 四、相关的配置类
- 五、controller
- 六、测试
- 实现自动刷新
- 在github中配置webhook
在github中创建springcloud-config仓库
新建config-dev.yml,config-prod.yml,config-test.ym三个配置文件。
配置文件的内容大致如下:
config: info: master branch,springcloud-config/config-dev.yml version=7实现配置中心服务端 一、新建springboot项目,引入依赖
pom.xml
二、相关配置cloud2020 com.atguigu.springcloud 1.0-SNAPSHOT 4.0.0 cloud-config-center-3344org.springframework.cloud spring-cloud-config-serverorg.springframework.cloud spring-cloud-starter-netflix-eureka-clientorg.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-starter-actuatororg.projectlombok lomboktrue org.springframework.boot spring-boot-starter-testtest
- application.yml
server: port: 3344 spring: application: name: cloud-config-center #注册进Eureka服务器的微服务名 cloud: config: server: git: uri: https://github.com/github用户名/springcloud-config.git ####搜索目录 search-paths: - springcloud-config force-pull: true username: github用户名 password: 密码 default-label: master skip-ssl-validation: true ####读取分支 label: master # rabbitmq: # host: ip # port: 5672 # username: guest # password: guest # virtual-host: / #服务注册到eureka地址 eureka: client: service-url: defaultZone: http://localhost:7001/eureka
- 在启动类上增加相关注解@EnableConfigServer
@SpringBootApplication @EnableConfigServer public class ConfigCenterMain3344 { public static void main(String[] args) { SpringApplication.run(ConfigCenterMain3344.class, args); } }三、测试
启动服务3344
访问http://config-3344.com:3344/master/config-prod.yml
http://config-3344.com:3344/master/config-dev.yml
如果访问以上地址可以正常返回数据,则说明配置中心服务端正常。
二、初始化配置文件org.springframework.boot spring-boot-starter-weborg.springframework.cloud spring-cloud-starter-configorg.springframework.boot spring-boot-starter-actuator
- bootstrap.yml
spring: profiles: active: dev --- spring: profiles: prod application: name: config-single-client cloud: config: uri: http://localhost:3301 label: master profile: prod --- spring: profiles: dev application: name: config-single-client cloud: config: uri: http://localhost:3301 label: master profile: dev
配置了两个版本的配置,并通过spring.profiles.active设置当前使用的版本,例如本例使用的dev版本。
- application.yml
server: port: 3355 management: # 自动刷新配置actuator endpoint: shutdown: enabled: false endpoints: web: exposure: include: "*" data: # 当无法读取配置中心的配置时,使用此配置,以免项目无法启动 env: NaN user: username: NaN password: NaN三、启动类
@EnableEurekaClient @SpringBootApplication public class ConfigClientMain3355 { public static void main(String[] args) { SpringApplication.run(ConfigClientMain3355.class, args); } }四、相关的配置类
要读取配置中心的内容,需要增加相关的配置类,springcloud config 读取配置中心的方式和读取本地配置文件中的配置是一样的。
- 可以使用@Value的方式
@Data @Component public class GitConfig { @Value("${data.env}") private String env; @Value("${data.user.username}") private String username; @Value("${data.user.password}") private String password; }
- 可以使用@ConfigurationProperties的方式
@Component @Data @ConfigurationProperties(prefix = "data") public class GitAutoRefreshConfig { public static class UserInfo { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "UserInfo{" + "username='" + username + ''' + ", password='" + password + ''' + '}'; } } private String env; private UserInfo user; }五、controller
@RestController public class GitController { @Autowired private GitConfig gitConfig; @Autowired private GitAutoRefreshConfig gitAutoRefreshConfig; @GetMapping(value = "show") public Object show(){ return gitConfig; } @GetMapping(value = "autoShow") public Object autoShow(){ return gitAutoRefreshConfig; } }
可以用来测试项目。
六、测试启动项目,访问restful接口
http://localhost:3355/show
结果:
{ "env": "localhost-dev-edit", "username": "fengzheng-dev", "password": "password-dev" }
访问http://localhost:3355/autoShow
结果:
{ "env": "localhost-dev-edit", "user": { "username": "fengzheng-dev", "password": "password-dev" } }实现自动刷新
前言:
springcloud config 在项目启动时加载配置内容这一机制,导致它存在一个缺陷——修改配置内容后,不会自动刷新。当服务已经启动的时候,去修改github上的配置文件内容,这时,再次刷新页面,却还是旧的配置内容,新内容不会主动刷新过来。
springcloud提供了一个刷新机制,但是需要我们主动触发。即@RefreshScope注解并结合actuator,注意要引入spring-boot-starter-actuator包。
- 在config client 客户端配置中增加一个actuator配置
management: endpoint: shutdown: enabled: false endpoints: web: exposure: include: "*"
- 在需要读取配置的类上增加@RefreshScope注解
@RestController @RefreshScope public class GitController { @Autowired private GitConfig gitConfig; @Autowired private GitAutoRefreshConfig gitAutoRefreshConfig; @GetMapping(value = "show") public Object show(){ return gitConfig; } @GetMapping(value = "autoShow") public Object autoShow(){ return gitAutoRefreshConfig; } }
- 重启client客户端,修改github上的配置内容,并提交修改,再次刷新页面,没有反应。
接着,发送post请求到http://localhost:3355/actuator/refresh(用来触发加载新配置)
返回内容如下:
[ "config.client.version", "data.env" ]
之后,再次访问restful接口,http:localhost:3355/autoShow,这个接口获取的数据已经是最新的了,说明refresh机制起作用了。
而http:localhost:3355/show获取的还是旧数据,这与@Value注解的实现有关。建议在以后的项目中不要使用这种方式加载配置。
https://www.cnblogs.com/fengzheng/p/11242128.html
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)