Spring Set生产/开发级别JDBC属性

时间:2014-03-05 11:34:01

标签: spring

我有一个包含数据库连接信息的JDBC.properties文件

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.dialect=org.hibernate.dialect.MySQLDialect
jdbc.databaseurl=jdbc:mysql://127.0.0.1/mydb
jdbc.username=root
jdbc.password=

现在,当我在服务器中使用它时,我的信息会发生变化

jdbc.username=root
jdbc.password=mypassword

我现在所做的是在制作war文件之前手动更改此信息并将其上传到服务器。

现在我想知道是否有任何方法可以设置此信息,以便我不必每次上传前都更改此信息

怎么做?

3 个答案:

答案 0 :(得分:4)

不要将您的属性放在war文件中。将它们外化。把它们放在一个众所周知的路径中(/etc/myapp/jdbc.properties)。

您不应该为生产,开发和测试环境创建不同的工件。应该是一样的。重新创建工件意味着一个新版本(理论上)意味着新的测试。即使你使用maven配置文件。

我倾向于使用的方法是将一些默认值放在内部属性文件中,并可选择从战争外部加载文件。这样,您就可以为用户提供覆盖默认配置的可能性。

<context:property-placeholder location="classpath:/jdbc.propertes,file:/etc/myapp/jdbc.properties" igonre-resource-not-found="true" />

这样您的默认值就在应用程序内部,用户可以通过在/etc/myapp/jdbc.properties文件中指定其他属性来覆盖它。

答案 1 :(得分:3)

您可以使用弹簧配置文件。这篇博文应该会给你一个想法:http://spring.io/blog/2011/02/11/spring-framework-3-1-m1-released/

答案 2 :(得分:2)

您应该使用像Maven这样的构建工具,并使用资源过滤和配置文件执行此操作。

通过Spring配置文件执行它可能是一种方式,但在我看来,通过构建处理它更有意义。

使用Maven考虑以下内容:

<强>的src /主/资源/ jdbc.properties:

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.dialect=org.hibernate.dialect.MySQLDialect
jdbc.databaseurl=${jdbc.databaseurl}
jdbc.username=${jdbc.username}
jdbc.password=${jdbc.password}

<强>的pom.xml:

<project ...>
    ...
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
    ...
    <profiles>
        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <properties>
                <jdbc.databaseurl>jdbc:mysql://127.0.0.1/mydb</jdbc.databaseurl>
                <jdbc.username>username</jdbc.username>
                <jdbc.password>password</jdbc.password>
            </properties>
            ...
        </profile>
        <profile>
            <id>prod</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <properties>
                <jdbc.databaseurl>jdbc:mysql://212.123.45.6/mydb</jdbc.databaseurl>
                <jdbc.username>username</jdbc.username>
                <jdbc.password>secret-password</jdbc.password>
            </properties>
            ...
        </profile>
    </profiles>
    ...
</project>

对于开发,请调用:

mvn clean package ... -Pdev

同样适用于制作:

mvn clean package ... -Pprod

Maven过滤允许您根据Maven中通过.properties定义的属性替换<properties/>资源中的属性(无论是否在配置文件中)。

参考文献: - Resource filtering - Profiles