应用程序属性中占位符的春季启动用法

时间:2018-11-13 04:23:34

标签: mysql docker spring-boot kubernetes

我已经编写了一个简单的使用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文件。


更新-

我有两个问题:

  1. 我应该在哪里保存placeholder.properties?是在/ config /下还是在特定目录下?

  2. 如何在application.properties中调用占位符?

有人可以建议吗?

3 个答案:

答案 0 :(得分:1)

建议:如果您的#/ properties相对较小,为什么不为每个不同的环境仅拥有一个不同的application.properties文件呢?

您将在运行时使用-Dspring.profiles.active=myenv指定环境。

查看herehere

PS:

要回答您的特定问题:语法为${MYSQL_HOST}

答案 1 :(得分:1)

感谢@Raheela Aslam和@ paulsm4的回答,还有更多研究发现了这个问题。

我想要达到的目标:

  1. 在docker中部署springboot应用程序,然后将其部署到kubernetes。
  2. 我正在使用minikube进行本地测试,并希望将minikube ip传递到数据源url。

我如何修复它:

我分别为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,它已被过滤以包含属性值(已替换占位符)

http://www.avajava.com/tutorials/lessons/how-do-i-filter-resources-based-on-values-from-a-properties-file.html?page=1

相关问题