我有一个spring-boot/spring-data-rest项目。我想能够使用内存/正常db取决于一些环境变量。这可能吗?
现在我只是用生产数据库的参数注释出我的应用程序配置,就像这样
#spring.jpa.database=POSTGRESQL
#spring.datasource.platform=postgres
...
我强烈建议阅读Spring Profiles以及Spring Boot如何利用它来加载不同的配置文件。
基本上你有两个选项
- 使用概要文件
- 在指定的位置使用不同的
application.properties
。
要使选项1起作用,在application.properties
中放置一些默认值(可能是生产版本)。然后创建一个包含内存内容的application-dev.properties
。
现在,在启动应用程序之前,创建一个名为spring.active.profiles=dev
的环境变量,或者在启动应用程序-Dspring.active.profiles=dev
时传递它。
现在当您启动应用程序时,application.properties
和application-dev.properties
都将被加载。后者覆盖默认属性的任何属性。
可以使用Spring配置文件。
您可以定义不同的配置文件,并根据您的需求激活任何配置文件。
你可以参考Spring profile的例子@Mkyong
我使用maven做这个配置。您可以使用所需的参数创建maven概要文件。例如:
<profiles>
<profile>
<id>db-local</id>
<properties>
<spring.profile.name>dbcp</spring.profile.name>
<hibernate.dialect>org.hibernate.dialect.HSQLDialect</hibernate.dialect>
<hibernate.driver>org.hsqldb.jdbcDriver</hibernate.driver>
...
</properties>
</profile>
<profile>
<id>db-central</id>
<properties>
<spring.profile.name>dbcp</spring.profile.name>
<hibernate.dialect>org.hibernate.dialect.Oracle10gDialect</hibernate.dialect>
<hibernate.driver>oracle.jdbc.driver.OracleDriver</hibernate.driver>
...
</properties>
</profile>
...
然后你可以在java代码或xml描述符中定义这些变量,如下所示:
如果您这样做,那么maven必须在编译/打包之前过滤这些文件,以便替换maven变量。这可以使用maven资源插件或maven war插件来完成。
下面是一个maven过滤的例子:
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<webResources>
<resource>
<filtering>true</filtering>
<directory>src/main/webapp</directory>
<includes>
<include>WEB-INF/web.xml</include>
<include>WEB-INF/springConfig/app-bbdd-dbcp.xml</include>
<include>WEB-INF/springConfig/app-security.xml</include>
</includes>
</resource>
</webResources>
<configuration>
</plugin>
</plugins>
您可以通过maven变量激活或停用spring插件。
在这里你可以看到一个完整的工作项目,正如我所描述的:https://github.com/malaguna/casiopea