我已经编写了一个简单的使用mysql(5.7版)的spring boot应用程序(springboot 2.0版)。
application.properties 代码段
category {{$category->title}} has 45 posts and etc.
当我在本地运行它时,它工作正常。 如果我想在docker中运行此春季启动应用程序,则可以更改
spring.datasource.url = jdbc:mysql://localhost:3306/test?useSSL=false
spring.datasource.username = testuser
spring.datasource.password = testpassword
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
mysql-container使用dockerhub中的mysql:5.7镜像运行。
但是我想从某些占位符属性文件更改主机的值。这样看起来像:
spring.datasource.url = jdbc:mysql://mysql-container:3306/test?useSSL=false
注意:我不确定占位符格式。是$ {MYSQL_HOST}还是@ MYSQL_HOST @吗?
您可以将此占位符文件命名为 placeholder.properties 或 placeholder.conf 或 .env 或其他任何名称。该文件的内容应类似于:
spring.datasource.url = jdbc:mysql://${MYSQL_HOST}:3306/test?useSSL=false
或
MYSQL_HOST=localhost
我可以创建.env或.env.test或.env.prod,并且可以根据要在其中运行应用程序的位置来引用该env文件。
更新-
我有两个问题:
我应该在哪里保存placeholder.properties?是在/ config /下还是在特定目录下?
如何在application.properties中调用占位符?
有人可以建议吗?
答案 0 :(得分:1)
建议:如果您的#/ properties相对较小,为什么不为每个不同的环境仅拥有一个不同的application.properties文件呢?
您将在运行时使用-Dspring.profiles.active=myenv
指定环境。
PS:
要回答您的特定问题:语法为${MYSQL_HOST}
答案 1 :(得分:1)
感谢@Raheela Aslam和@ paulsm4的回答,还有更多研究发现了这个问题。
我想要达到的目标:
我如何修复它:
我分别为mysql_user,mysql_password和mysql_host创建了configmap。
kubectl create configmap mysql-config \
--from-literal=mysql_user=testuser \
--from-literal=mysql_password=testuserpass \
--from-literal=mysql_user=$(minikube ip)
并在application.properties中使用了以下内容
spring.datasource.url = jdbc:mysql://${MYSQL_HOST}:3306/test?useSSL=false
spring.datasource.username = ${MYSQL_USER}
spring.datasource.password = ${MYSQL_PASSWORD}
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
,然后在Deployment.yaml中将configmap值用于kubernetes。 然后开始部署服务。
答案 2 :(得分:0)
如果您的项目是Maven,则可以使用maven过滤器:
<build>
<filters>
<filter>src/main/filters/myfilter.properties</filter>
</filters>
</build>
这将生成/target/classes/application.properties
,它已被过滤以包含属性值(已替换占位符)