接下来创建一个Spring Boot应用作为配置管理的客户端来读取Config Server中提供的配置,如图3-1所示。
图3-1 Client示意图
在pom.xml中添加如下依赖:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>
添加bootstrap.yml:
server: port: 7002 spring: application: name: cloudConfigDemo${server.port} cloud: config: profile: dev label: master name: configServerDemo uri: http://localhost:8888/
注意 上面这些属性必须配置在bootstrap.properties中,config部分才能被正确加载。因为config的相关配置会先于application.properties,而bootstrap.properties的加载也先于application.properties。
创建ConfigClientApplication类并添加@EnableAutoConfiguration注解,表示自动获取项目中的配置变量:
@SpringBootApplication @RestController @EnableAutoConfiguration public class ConfigClientApplication { @Value("${key1}") String foo; @RequestMapping("/say") @ResponseBody public String say(){ return foo; } public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
在ConfigClientApplication中我们创建了一个RestController提供Web服务,输出读取到的key1的值。
启动main方法,看到控制台信息中将有如下一行日志,包含了配置的相关信息:
[main]c.c.c.ConfigServicePropertySourceLocator:Located-environment:name=configServerDemo,profiles=[test],label=branch1,version=575f8f8ded872700c7abcfb6bbbecf02f9271a17, state=null
现在我们尝试访问 http://localhost:8084/say ,会得到branch1-test-value1的响应。
下面我们来一起了解Spring Cloud Config Client可能用到的常用配置。
(1)客户端快速失败
有的时候,需要在Config Server连接不上时直接启动失败。需要这个特性时可以设置bootstrap配置项spring.cloud.config.failFast=true来开启。
(2)客户端重试
可以在Config Server不可用时,让客户端重试。可以通过设置“spring.cloud.config.failFast=false;”在classpath中增加spring-retry、spring-boot-starter-aop依赖。默认情况下会重试6次,每次间隔1000ms并以1.1乘以次数方式递增。也可以通过'spring.cloud.config.retry'系列配置来修改相关配置。而且我们可以自己实现一个RetryOperations-Interceptor来详细地自定义重试策略。
(3)HTTP权限
如果要对HTTP请求进行账号密码的权限控制,可以配置服务器URI或单独的用户名和密码属性,bootstrap.yml配置文件如下:
spring: cloud: config: uri: https://user:secret@myconfig.mycompany.com
或者:
spring: cloud: config: uri: https://myconfig.mycompany.com username: user password: secret
注意 spring.cloud.config.password和spring.cloud.config.username值覆盖URI中提供的内容。