0

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

数据库属性:

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 上。然后我带着本地信息回来继续编码。

4

2 回答 2

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

于 2017-11-24T15:59:54.203 回答
0

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

在任何情况下,虽然您可以尝试某种基于分支的 hack 来保留同一文件的本地和远程版本,但并没有真正的好方法来确保它们在必要的合并期间“保持独立”以跨分支进行其他更改.

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

于 2017-11-24T14:44:48.937 回答