属性文件 - 远程 x 本地

Properties file - Remote x Local

我有一个属性文件来处理我的数据源。该文件由 properties 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,我有两个分支。一个(master)更新我的远程存储库,另一个(开发)进行代码和测试。

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

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

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

这会儿我把远程信息放到properties文件里,部署到Heroku上。然后带着本地信息回来继续码字

既然您已经在使用 Maven,为什么不使用它的 "filtering" 功能在构建时提供 属性 值呢?无论如何,将用户名和密码放在源代码控制库中肯定不是一个好主意。

无论如何,虽然您可以尝试某种基于分支的 hack 来保留同一文件的本地和远程版本,但并没有真正好的方法来确保他们 "stay separate" 在必要的合并期间进行跨分支的其他更改。

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

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

在你的情况下,这可能是相当典型的,我将通用配置放入 project-defaults.yml,将你的本地配置放入 project-local.yml,并将你的 Heroku/production 配置放入 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