SpringBoot:配置生产环境与开发环境

7
我有一个关于SpringBoot 1.5.1的问题。我已经创建了application.propertiesapplication-dev.properties文件来配置我的开发环境。
主要区别在于持久化:在生产环境(application.properties)中,使用的是Tomcat配置的JNDI,而在开发环境中则使用本地数据库(H2)。
以下是我的application.properties配置:
spring.datasource.jndi-name=jdbc/db

这是 application-dev.properties 文件的内容:

spring.datasource.url=jdbc:h2:file:~/db
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driverClassName=org.h2.Driver

但是当我开始使用开发配置文件时

2017-02-24 15:25:39.948  INFO 7912 --- [           main] it.geny.MmqApplication                   : The following profiles are active: dev

我的应用程序停止了,因为它找不到JNDI jdbc/db!!!我正在尝试更改我的application-dev.properties上的日志配置,并且它起作用了!但是持久性配置没有变化。
提前致谢。
1个回答

11

application-dev.properties中的所有属性会覆盖 application.properties 中的属性。但是,如果在 application.properties 中有未在 application-dev.properties 中设置的属性,则也将包括在上下文中。 如果启用属性 spring.datasource.jndi-name,则所有的 spring.datasource 属性都将被忽略。

解决方法是创建另一个属性文件,如application-prod.properties,并在那里设置 spring.datasource.jndi-name。数据源信息可以保留在 application-dev.properties 中。

在您的application.properties文件中,应启用您想要使用的配置文件:spring.profiles.active=prodspring.profiles.active=dev


我们经常做类似的事情 - 通常有几个部署层次(dev,dev2,qa,qa2,uat,prod等)。我们不使用不同的属性文件名称,而是在/src/main/resources下提供了用于特定层次的属性文件的不同文件夹。在启动时,我们提供一个环境变量来标识部署层次(比如qa2),并使用它来定位任何特定层次的配置数据。 - Michael Peacock

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接