我正在将kubernetes configmap与我的springboot应用程序集成。我创建了config-map,在我的bootstrap.yml文件中给出了它的名字,并有一个简单的RestController来读取属性。但是,pod不会获取configmap的名称。在pod的日志中,我将configmap的名称视为“default”。我不知道出了什么问题。感谢任何帮助!
Located property source: ConfigMapPropertySource [name='configmap.application.default']
这是我的configmap
apiVersion: v1
kind: ConfigMap
metadata:
name: echo-configmap
data:
application.yml: |-
bean:
message: Hello from Kubernetes Configmap
的pom.xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-kubernetes-config</artifactId>
<version>0.2.0.RELEASE</version>
</dependency>
bootstrap.yml
spring:
application:
name: echo-configmap
cloud:
kubernetes:
reload:
enabled: true
控制器类
@RestController
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "bean")
public class EchoConfigController {
@Value("${message}")
private String message;
@RequestMapping(value="/echo", method=GET)
public String printKubeConfig() {
System.out.println("EchoController is invoked ");
System.out.println("message = "+message);
return message;
}
}
Kubernetes pod日志:
[kubernetes1@se-docker-int-2 ~]$ kubectl logs echo-deployment-2968296553-h8m1q
04:53:33.873 [main] DEBUG io.fabric8.kubernetes.client.Config - Trying to configure client from Kubernetes config...
2018-01-14 04:53:42.122 INFO 7 --- [ main] b.c.PropertySourceBootstrapConfiguration : Located property source: ConfigMapPropertySource [name='configmap.application.default']
2018-01-14 04:53:42.125 INFO 7 --- [ main] b.c.PropertySourceBootstrapConfiguration : Located property source: SecretsPropertySource [name='secrets.application.default']
2018-01-14 04:53:42.181 INFO 7 --- [ main] c.o.a.c.EchoServiceApplication : The following profiles are active: kubernetes
答案 0 :(得分:0)
这不是ConfigMap的名称,它是运行它的kubernetes命名空间的名称as seen here,在您的示例中显示&#34 ;名称&#34;是application
。
你实际上并没有说过你是否测试过RestController,说出它返回的内容(和/或发送到stdout);您的GET
是否产生了任何输出,或者您是仅根据该日志消息提出此问题?
bootstrap.yml
spring:
application:
name: echo-configmap
我无法判断您是否只是错误复制粘贴,但如果您确实在spring:
中缩进bootstrap.yml
密钥,则该文件将被错误解析通过Spring,导致spring.application.name不符合您的想法。
data:
application.yml: |-
bean:
message: Hello from Kubernetes Configmap
...
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "bean")
最重要的是,您通过将ConfigurationProperties
前缀命名为bean
等非常通用的词语来踩踏薄冰。其次,您通过使RestController
充当ConfigurationProperties
实例来使事情变得更难,因为它们在Spring中具有非常非常不同的生命周期。第三,我需要测试它以肯定地说,但@Value
传统上用于将SPeL值注入其他bean,而不是ConfigurationProperties
中的随机字段 - 你是只需通过message
访问器/ mutator模式将getMessage()/setMessage()
转换为普通的JavaBean属性,即可获得更多。另外,以这种方式执行操作具有非常非常实际的好处,您可以在get
或set
方法中设置断点,并亲眼看看Spring是否使用您期望的值调用它们。
答案 1 :(得分:0)
问题是我没有将我的application.properties打包到JAR文件中。因此,未读取应用程序名称。固定包装后,它工作