在业务开发中需要将数据配置放在k8s configMap中,并且需要根据线上业务进行调整。需求:避免服务频繁重启、通过configMap实时更新配置。
添加依赖
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-kubernetes-config</artifactId>
<version>1.1.10.RELEASE</version>
</dependency>
启用reload
bootstrap.properties
spring.cloud.kubernetes.config.name=istio-demo-config
spring.cloud.kubernetes.config.namespace=istio-demo
management.endpoint.restart.enabled=true
# Reload Config
spring.cloud.kubernetes.reload.enabled=true
spring.cloud.kubernetes.reload.mode=polling
# 5s刷新,主动pull
spring.cloud.kubernetes.reload.period=5000
spring.cloud.kubernetes.reload.strategy=refresh
使用@RefreshScope或@ConfigurationProperties进行动态配置
controller.java
@RefreshScope
@Slf4j
@RestController
@RequestMapping("/api")
public class FileController {
@Autowired
private UserFeignClient userFeignClient;
@Value("${age:0!}")
private String age;
@Value("${attrs:#{null}}")
private Optional<String[]> attrs;
@GetMapping("/test")
public JSONObject test() {
JSONObject res = new JSONObject();
res.put("age", age);
res.put("attrs", attrs);
return res;
}
}
测试接口:http://loaclhost:8080/api/test
configMap:
kind: ConfigMap
apiVersion: v1
metadata:
name: istio-demo-config
namespace: istio-demo
annotations:
kubesphere.io/creator: wbyu3
kubesphere.io/description: springboot服务静态资源配置
data:
age: '28'
attrs: '[ "tag3","tag4" ]'
logging.level.root: DEBUG
测试:
修改configMap中的age attrs值,然后测试接口返回值是否变更。