应用程序属性中占位符的spring引导用法

66bbxpm5  于 2021-06-18  发布在  Mysql
关注(0)|答案(3)|浏览(431)

我已经编写了一个简单的springboot应用程序(版本springboot2.0),它使用mysql(版本5.7)。
application.properties代码段

  1. spring.datasource.url = jdbc:mysql://localhost:3306/test?useSSL=false
  2. spring.datasource.username = testuser
  3. spring.datasource.password = testpassword
  4. spring.datasource.driver-class-name=com.mysql.jdbc.Driver

当我在本地运行它时,它工作正常。如果我想在docker中运行这个spring boot应用程序,那么我可以更改

  1. spring.datasource.url = jdbc:mysql://mysql-container:3306/test?useSSL=false

mysql容器使用mysql:5.7 image 从dockerhub。
不过,我想改变一些占位符属性文件的主机值。所以这看起来像:

  1. spring.datasource.url = jdbc:mysql://${MYSQL_HOST}:3306/test?useSSL=false

注意:我不确定占位符格式。是${mysql\u host}还是@mysql\u host@?
您可以将此占位符文件命名为placeholder.properties或placeholder.conf或.env或任何名称。该文件的内容应类似于:

  1. MYSQL_HOST=localhost

  1. MYSQL_HOST=some ip address

我可以创建.env或.env.test或.env.prod,并且可以根据运行应用程序的位置引用该env文件。
更新-
我有两个问题:
placeholder.properties应该放在哪里?它是在/config/下还是在某个特定目录下?
如何在application.properties中调用占位符?
有人能建议吗?

kyvafyod

kyvafyod1#

建议:如果您有一个相对较小的#/属性,为什么不为每个不同的环境创建一个不同的application.properties文件呢?
您可以在运行时使用 -Dspring.profiles.active=myenv .
看看这里和这里。
附言:
回答您的具体问题:语法是 ${MYSQL_HOST}

dz6r00yl

dz6r00yl2#

多亏了@raheela aslam和@paulsm4的回答,还有更多的研究发现了这个问题。
我想达到的目标是:
在docker中部署springboot应用程序,然后部署到kubernetes。
我使用minikube进行本地测试,并希望将minikube ip传递给数据源url。
如何修复:
我为mysql\u user、mysql\u password和mysql\u host分别创建了configmap,并使用相应的值。

  1. kubectl create configmap mysql-config \
  2. --from-literal=mysql_user=testuser \
  3. --from-literal=mysql_password=testuserpass \
  4. --from-literal=mysql_user=$(minikube ip)

并在application.properties中使用了以下内容

  1. spring.datasource.url = jdbc:mysql://${MYSQL_HOST}:3306/test?useSSL=false
  2. spring.datasource.username = ${MYSQL_USER}
  3. spring.datasource.password = ${MYSQL_PASSWORD}
  4. spring.datasource.driver-class-name=com.mysql.jdbc.Driver

然后在deployment.yaml中为kubernetes使用configmap值。然后启动了部署服务。

展开查看全部
1tuwyuhd

1tuwyuhd3#

如果项目为maven,则可以使用maven过滤器:

  1. <build>
  2. <filters>
  3. <filter>src/main/filters/myfilter.properties</filter>
  4. </filters>
  5. </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

相关问题