如何在春季开发中使用内存db和在生产中使用普通db



我有一个spring-boot/spring-data-rest项目。我想能够使用内存/正常db取决于一些环境变量。这可能吗?

现在我只是用生产数据库的参数注释出我的应用程序配置,就像这样

#spring.jpa.database=POSTGRESQL
#spring.datasource.platform=postgres
...

我强烈建议阅读Spring Profiles以及Spring Boot如何利用它来加载不同的配置文件。

基本上你有两个选项

  1. 使用概要文件
  2. 在指定的位置使用不同的application.properties

要使选项1起作用,在application.properties中放置一些默认值(可能是生产版本)。然后创建一个包含内存内容的application-dev.properties

现在,在启动应用程序之前,创建一个名为spring.active.profiles=dev的环境变量,或者在启动应用程序-Dspring.active.profiles=dev时传递它。

现在当您启动应用程序时,application.propertiesapplication-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

最新更新