属性文件 - 远程x本地

时间:2017-11-24 13:39:17

标签: java git maven heroku wildfly-swarm

我有一个属性文件来处理我的数据源。此文件由属性maven插件加载。加载时我在wildfly Swarm插件上使用。

database.properties:

database.server=localhost
database.server.port=3306
database.name=XXXXXXX
database.options=
database.user=XXXXXXX
database.password=XXXXXXXX
database.pool.min=1
database.pool.max=10
database.pool.preFill=true

属性maven插件:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>properties-maven-plugin</artifactId>
    <version>${properties-maven.version}</version>
        <executions>
            <execution>
                <phase>initialize</phase>
                    <goals>
                        <goal>read-project-properties</goal>
                    </goals>
            </execution>
        </executions>
        <configuration>
            <files>
                <file>src/main/resources/database.properties</file>
            </files>
        </configuration>
</plugin>

Wildfly Swarm插件:

<plugin>
    <groupId>org.wildfly.swarm</groupId>
    <artifactId>wildfly-swarm-plugin</artifactId>
    <version>${version.wildfly.swarm}</version>
        <configuration>
            <properties>
                <swarm.datasources.data-sources.CondominioDs.driver-name>mysql</swarm.datasources.data-sources.CondominioDs.driver-name>
                <swarm.datasources.data-sources.CondominioDs.connection-url>jdbc:mysql://${database.server}:${database.server.port}/${database.name}${database.options}</swarm.datasources.data-sources.CondominioDs.connection-url>
                <swarm.datasources.data-sources.CondominioDs.initial-pool-size>${database.pool.min}</swarm.datasources.data-sources.CondominioDs.initial-pool-size>
                <swarm.datasources.data-sources.CondominioDs.max-pool-size>${database.pool.max}</swarm.datasources.data-sources.CondominioDs.max-pool-size>
                <swarm.datasources.data-sources.CondominioDs.pool-prefill>${database.pool.preFill}</swarm.datasources.data-sources.CondominioDs.pool-prefill>
                <swarm.datasources.data-sources.CondominioDs.user-name>${database.user}</swarm.datasources.data-sources.CondominioDs.user-name>
                <swarm.datasources.data-sources.CondominioDs.password>${database.password}</swarm.datasources.data-sources.CondominioDs.password>
                <swarm.datasources.data-sources.CondominioDs.check-valid-connection-sql>SELECT 1</swarm.datasources.data-sources.CondominioDs.check-valid-connection-sql>
            </properties>
        </configuration>
        <executions>
            <execution>
                <goals>
                    <goal>package</goal>
                </goals>
            </execution>
        </executions>
</plugin>

一切都运作良好。远程和本地。

我也使用Git,我有两个分支。一个(主)用于更新我的远程存储库和其他(开发)代码和测试。

最后,我使用Heroku来部署我的应用程序,我使用maven插件(不是git)。

我的问题是关于数据源属性文件。我不知道如何拥有两个版本的文件。当我需要在Heroku上部署应用程序时,我在编码(本地)和其他时使用。

当然,本地数据库的地址,用户和密码与远程数据库不同。

这一刻,我将远程信息放在属性文件中并部署在Heroku上。然后我带回本地信息继续编码。

2 个答案:

答案 0 :(得分:2)

我看到您正在使用属性格式进行配置;我建议转到YAML格式。使用它,WildFly Swarm支持配置文件。

在您的情况下,这可能是相当典型的,我将常见配置放入project-defaults.yml,将您的本地配置放入project-local.yml,将您的Heroku /生产配置放入project-prod.yml(或project-heroku.yml,您的选择)。然后,您在运行应用时选择正确的配置:java -jar myapp-swarm.jar -Slocal(或-Sprod)。

有关详细信息,请参阅http://docs.wildfly-swarm.io/2017.11.0/#_configuration_of_a_wildfly_swarm_application

答案 1 :(得分:0)

由于您已经在使用Maven,为什么不在构建时使用其“过滤”功能来提供属性值?当然,将用户名和密码放在源代码控制仓库中并不是一个好主意。

在任何情况下,当您可以尝试某种基于分支的黑客来保留同一文件的本地和远程版本时,确实没有一种好方法可以确保它们“保持独立”在必要的合并期间进行跨分支机构的其他变更。

因此,如果您坚持使用git作为特定于环境的属性值的存储位置,那么您可以做的最好的事情是使用不同的文件名存储每个环境的版本,并弥补构建过程中的差异。 (同样,我认为使用Maven做的最简单的方法就是过滤,所以你仍然会做几乎所有与完全从源代码控制中删除值的工作相同的工作......)