Spring boot 版本2.1.1
依赖:
org.springframework.cloud
spring-cloud-dependencies
Greenwich.RELEASE
pom
import
org.springframework.cloud
spring-cloud-starter-consul-all
org.springframework.boot
spring-boot-configuration-processor
true
bootstrap.yml配置:
spring:
cloud:
consul:
host: ip
port: 8500
discovery:
hostname: ${spring.cloud.client.ip-address}
healthCheckPath: /actuator/health
healthCheckInterval: 15s #默认是10s 可设置ps:15s or 1m
ip-address: true
instanceId: ${spring.application.name}:${spring.cloud.client.ipaddress}:${server.port}
tags: ${spring.profiles.active}
config:
prefix: config
enabled: true #默认是true --
format: YAML # 表示consul上面文件的格式 有四种 YAML PROPERTIES KEY-VALUE FILES
defaultContext: demo-server # 表示配置文件对应的应用名称
data-key: data #表示consul上面的KEY值(或者说文件的名字) 默认是data
profileSeparator: '-'
不需要注册或发现服务 discovery 相关配置可以不需要
consul 数据中心配置
config/demo-server-dev/data
data文件内容
company:
name: kaiyuanzhongguo
java 代码
@Component
@ConfigurationProperties(prefix = "company")
public class Config {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@RestController
@RequestMapping("consul")
public class Test {
@Value("${company.name}")
private String companyName;
@Autowired
private Config Config;
@GetMapping("getConfig")
public String getConfig(){
return companyName;
}
@GetMapping("getConfig1")
public String getConfig1(){
return Config.getName();
}
}
访问url: consul/getConfig result: kaiyuanzhongguo
访问url: consul/getConfig1 result: kaiyuanzhongguo
注意:如果使用@Value 获取值 在consul 数据中心 数据变更后 项目不重启的情况下 @Value 值不会变
data文件修改
company:
name: kaiyuanzhongguo123456
此时在项目不重启的情况下
访问url: consul/getConfig result: kaiyuanzhongguo
访问url: consul/getConfig1 result: kaiyuanzhongguo123456
这样也太不友好了,我就要使用@value,难道没有办法解决?
在使用@Value 的class 上增加注解 @RefreshScope
@RestController
@RefreshScope
public class Test{
}
再次修改consul 配置中心 ,我们就看到
@Value("${company.name}") 的值也刷新了。
有人说还是 无法刷新
请检查 Applacation 启动类 是否加了注解 @EnableScheduling