当前位置: 首页 > 知识库问答 >
问题:

在springboot应用程序中使用kubernetes configmap

堵彬彬
2023-03-14

我是kubernetes的新手,需要在openshift平台上使用k8s confimap将springboot应用程序的属性文件外部化。我已将属性文件保存在git repo中,作为“greeter.message=Spring Bootmyapplication.properties已在库伯内特斯上挂载为卷!”并使用“oc create confimap myconfig--from-file=myapplication.properties”命令创建了confimap。我也可以使用“oc get confimap myconfig-o yaml”命令看到同样的情况:

data:
  myapplication.properties: greeter.message=Spring Boot myapplication.properties has been mounted as volume on Kubernetes!
    on Kubernetes!
kind: ConfigMap
metadata:
  creationTimestamp: 2021-08-24T04:45:27Z
  name: myconfig 
  namespace: mynamespace
  resourceVersion: "53471"
  selfLink: /api/v1/namespaces/default/configmaps/myconfig
  uid: 73ca674c-8afc-71e1-9a8a-7da609902085

现在我有一个springboot rest控制器

 @RestController
@Slf4j
public class GreeterController {

    @Value("${greeter.message}")
    private String greeterMessageFormat; 

    @GetMapping("/greet/{user}")
    public String greet(@PathVariable("user") String user) {
        return String.format(greeterMessageFormat);
    }
}

最后,我对部署文件进行了更改,以创建和装载卷

spec:
      containers:
          volumeMounts:
          - name: application-config 
            mountPath: "/etc/config" 
            readOnly: true
      volumes:
      - name: application-config
        configMap:
          name: myconfig

现在,当我尝试启动pod时,问题出现了,springboot应用程序无法启动,表明它在@value(“${greeter.message}”)中找不到${greeter.message}的任何值,因为我在应用程序src/main/resources/app中没有任何这样的属性。属性,如果我提供了一个,那么我的springboot应用程序将从src/main/resources/app中选择该属性。属性而不是configmap。

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'greeter.message' in value "${greeter.message}"

该值应该取自我创建的configmap。请帮帮我,我在哪里遗漏了什么。

我已经提到了这个https://developers.redhat.com/blog/2017/10/03/configuring-spring-boot-kubernetes-configmap#cm-作为相同的文件,并做了准确的。

提前谢谢。

共有1个答案

姬歌者
2023-03-14

试试吧

   envFrom:                ##Reference all key-value pairs of the sepcial-config ConfigMap. 
   - configMapRef:
       name: myconfig

参考文献:

https://www.exoscale.com/syslog/configuration-management-kubernetes-spring-boot/https://www.alibabacloud.com/help/doc-detail/86556.htm

 类似资料:
  • 我有Kafka Streams java应用程序启动并运行。我试图使用KSQL创建简单的查询,并使用Kafka流来实现复杂的解决方案。我希望将KSQL和Kafka流作为Java应用程序运行。 我打算通过https://github.com/confluentinc/ksql/blob/master/ksqldb-examples/src/main/java/io/confluent/ksql/em

  • 我已经为Postgresql启用了复制,并且正在使用PGPool进行负载平衡。 我在使用HikariCP甚至Apache DBCP连接到Postgres时遇到了问题。 在SpringBoot应用程序中有没有使用PGPool的方法? 请查找堆栈跟踪: 2018-08-10 10:20:19.124信息37879----[main]com.zaxxer.hikari.hikaridatasource:

  • 我试图在SpringMVC中运行SpringBoot应用程序,在SpringMVCPOM中添加SpringBoot应用程序依赖项,并扫描SpringBoot包,但我面临以下问题

  • 我在src/main/resources下创建了2个文件: 应用程序。属性 第一个具有从env变量中获取值的属性,而后者具有固定值。 根据这里的具体情况,我以这样的方式推出了Spring靴: 然而,不会产生任何影响,并且应用程序是局部的。属性似乎被忽略。 有什么提示吗?

  • 我有以下用例: 我的应用程序无法处理的消息,可能是由于与网络等相关的一些间歇性问题,正在写入kafka主题。 我希望使用cron/scheduled任务定期读取这些消息,然后处理它们。 到目前为止,我已经在我的弹跳靴中使用了KafkaListener来满足我与kafka相关的需求,并且运行良好。 但是,我无法找到一种方法来间歇性地使用KafkaListener阅读消息。 Spring有没有办法做到

  • 这是我使用SpringBoot的第一天,我试图理解体系结构,因此我开始构建一个hello world应用程序: 在我的pom.xml中,在maven-shade-plugin下,我将mainClass声明如下: 文件目标是src/main/java/com/demo/helloworld.java,该文件中的代码是: 我错过了什么?