我已经编写了一个简单的springboot应用程序(版本springboot2.0),它使用mysql(版本5.7)。
application.properties代码段
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
当我在本地运行它时,它工作正常。如果我想在docker中运行这个spring boot应用程序,那么我可以更改
spring.datasource.url = jdbc:mysql://mysql-container:3306/test?useSSL=false
mysql容器使用mysql:5.7 image 从dockerhub。
不过,我想改变一些占位符属性文件的主机值。所以这看起来像:
spring.datasource.url = jdbc:mysql://${MYSQL_HOST}:3306/test?useSSL=false
注意:我不确定占位符格式。是${mysql\u host}还是@mysql\u host@?
您可以将此占位符文件命名为placeholder.properties或placeholder.conf或.env或任何名称。该文件的内容应类似于:
MYSQL_HOST=localhost
或
MYSQL_HOST=some ip address
我可以创建.env或.env.test或.env.prod,并且可以根据运行应用程序的位置引用该env文件。
更新-
我有两个问题:
placeholder.properties应该放在哪里?它是在/config/下还是在某个特定目录下?
如何在application.properties中调用占位符?
有人能建议吗?
3条答案
按热度按时间kyvafyod1#
建议:如果您有一个相对较小的#/属性,为什么不为每个不同的环境创建一个不同的application.properties文件呢?
您可以在运行时使用
-Dspring.profiles.active=myenv
.看看这里和这里。
附言:
回答您的具体问题:语法是
${MYSQL_HOST}
dz6r00yl2#
多亏了@raheela aslam和@paulsm4的回答,还有更多的研究发现了这个问题。
我想达到的目标是:
在docker中部署springboot应用程序,然后部署到kubernetes。
我使用minikube进行本地测试,并希望将minikube ip传递给数据源url。
如何修复:
我为mysql\u user、mysql\u password和mysql\u host分别创建了configmap,并使用相应的值。
并在application.properties中使用了以下内容
然后在deployment.yaml中为kubernetes使用configmap值。然后启动了部署服务。
1tuwyuhd3#
如果项目为maven,则可以使用maven过滤器:
这就产生了
/target/classes/application.properties
它已被过滤以包含属性值(替换占位符)http://www.avajava.com/tutorials/lessons/how-do-i-filter-resources-based-on-values-from-a-properties-file.html?page=1