我有一个spring-boot / spring-data-rest项目。我希望能够根据一些env变量使用内存/普通数据库。这可能吗?
现在我只是用我的生产数据库参数评论我的应用程序配置
#spring.jpa.database=POSTGRESQL
#spring.datasource.platform=postgres
...
答案 0 :(得分:3)
我强烈建议您阅读Spring Profiles以及Spring Boot如何将其用于load different config files。
所以基本上你有两个选择
application.properties
。对于工作选项1,在application.properties
(可能是生产的)中添加了一些默认值。并创建一个application-dev.properties
,其中包含您的内存内容。
现在,在启动应用程序之前,要么创建一个名为spring.active.profiles=dev
的环境变量,要么将其传递给应用程序-Dspring.active.profiles=dev
。
现在,当您启动应用程序时,将加载application.properties
和application-dev.properties
。后者覆盖默认属性中的任何属性。
答案 1 :(得分:1)
答案 2 :(得分:0)
我使用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描述符中定义这些变量,如下所示:$ {hibernate.dialect}。
如果你这样做,那么maven必须在编译/打包之前过滤这些文件以替换maven变量。这可以使用maven resources插件或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变量激活或停用弹簧插件。
在这里,您可以看到我所描述的完整工作项目:https://github.com/malaguna/casiopea