你可以找到一个有效的例子 这里 。
您需要从Consul UI或命令行将您的属性存储在Consul KV商店中。 的 Consul Agent不会从文件系统加载您的属性 强> 。要从命令行加载属性,可以在Consul Agent启动并运行后使用以下命令。通过在文件名前加上@符号,可以从文件中读取YAML数据。
./consul kv put config/application/data @spring-boot-consul.yml
哪里 config/application/data 是关键的名字。
config/application/data
如果数据在KV中成功写入,您应该得到以下响应,
Success! Data written to: config/application/data
您还可以使用以下命令从KV获取属性,
$ ./consul kv get config/application/data cassandra: host: 127.0.0.1:9042,127.0.0.2:9042 user: my_user password: my_pass
您还可以从Consul Web UI查看属性,
你需要修改你的 bootstrap.yml 略。以下是更改:
bootstrap.yml
prefix
config
defaultContext
application
format
yaml
添加 data-key 以...的名义 data 获取YAML blob。
data-key
data
spring: profiles: default cloud: consul: host: localhost port: 8500 config: enabled: true prefix: config defaultContext: application data-key: data profileSeparator: '::' format: yaml application: name: spring-boot-consul
@Configuration @RefreshScope public class ConsulConfiguration { @Value("${cassandra.host}") private String cassandraHost; @Value("${cassandra.user}") private String userName; @Value("${cassandra.password}") private String password; @PostConstruct public void postConstruct() { // to validate if properties are loaded System.out.println("** cassandra.host: " + cassandraHost); System.out.println("** cassandra.user: " + userName); System.out.println("** cassandra.password: " + password); } }
@EnableRetry @RefreshScope @EnableDiscoveryClient @EnableAutoConfiguration @EnableConfigurationProperties @SpringBootApplication @ComponentScan("com.test.*") public class SpringBootConsulApplication { public static void main(String[] args) { ... } }