consul作为数据配置中心
基于spring boot 2.0.5.RELEASE
依赖
dependencies {
// 服务注册和发现功能
compile('org.springframework.cloud:spring-cloud-starter-consul-discovery')
// consul的配置中心功能
compile('org.springframework.cloud:spring-cloud-starter-consul-config')
//这个要引入
compile('org.springframework.boot:spring-boot-starter-web')
compile('org.springframework.boot:spring-boot-configuration-processor')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
配置文件
分别创建三个配置文件application.yml
,application-dev.yml
,bootstrap.yml
:
application.yml
配置文件:
spring:
profiles:
active: dev
application-dev.yml
配置文件:
server:
port: 8080
spring:
application:
name: demo-consul
bootstrap.yml
配置文件:
spring:
cloud:
consul:
port: 8500
host: localhost
config:
enabled: true
format: YAML
data-key: data //kv中k的后缀(suffix)
discovery:
health-check-path: /health
health-check-interval: 10s
enabled: true
instance-id: ${spring.application.name}
tags: dev, dev1
service-name: ${spring.application.name}
在consul中配置
在consul中配置配置kv,默认是config
文件夹, 现在配置的是config/application,dev/data
,也可以配置config/demo-consul/data
,application
是指所有的项目,dev
是指dev配置文件,而demo-consul
仅仅是取demo-consul项目下的配置文件
测试
RedisConfig.java
:
@ConfigurationProperties(prefix = "redis.config")
public class RedisConfig {
private String url;
private int port;
private int timeOut;
//omit...
}
ResourceController.java
:
@RestController
public class ResourceController {
@Value("${memo}")
private String memo;
@Autowired
private RedisConfig redisConfig;
@RequestMapping(value = "/ping", method = RequestMethod.GET)
private String ping(){
System.out.println("name: "+ memo);
return "name: " + memo+ " redis config: "+ redisConfig;
}
}
DemoConsulApplication.java
:
@SpringBootApplication
@EnableDiscoveryClient
@EnableConfigurationProperties({RedisConfig.class})
public class DemoConsulApplication {
public static void main(String[] args) {
SpringApplication.run(DemoConsulApplication.class, args);
}
}
结果
name: srping redis config: RedisConfig{url='localhost', port=6380, timeOut=5000}
结论
以@Value形式获取配置中心数据,修改配置中心文件后不能立即生效,需要重启应用程序服务器;而使用ConfigurationProperties形式,则能立即生效