0

完全なコードベースの構成のSpringアプリケーションがあります。そして、maven プロファイルを組み合わせて、db 接続をセットアップしようとしています。ローカル、ライブ、およびステージングの問題のいくつかのプロパティを定義しました。今、私はmavenプロファイルを制御しようとしています。すべてのプロファイルは、私の MySql db 接続パラメーターを定義します。ここに私の現在の設定:

local.properties ファイル:

mysql.username=test
mysql.password=test
mysql.databaseUrl=jdbc:mysql://localhost:3306/test
mysql.databaseDriver=com.mysql.jdbc.Driver

pom.xml

...
<profiles>
        <profile>
            <id>live</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <properties>
                <filterFile>src/main/config/live.properties</filterFile>
            </properties>
        </profile>
        <profile>
            <id>local</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <properties>
                <filterFile>src/main/config/local.properties</filterFile>
            </properties>
        </profile>
        <profile>
            <id>staging</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <filterFile>src/main/config/staging.properties</filterFile>
            </properties>
        </profile>
    </profiles>
...

アプリケーション構成

...
@Value("${mysql.username}")
    private String username;

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setUsername(username);
        ..

        return dataSource;
    }
...

ここでの問題は、プロパティが読み込まれていないことです!

4

1 に答える 1

2

Mavenのビルド中に呼び出されるプロパティを設定してfilterFileいますが、実際にはアプリケーションに値を取得する必要があり、それを使用してロードするファイルを検索する必要があります。

これを行うためのより良い方法は、pom で変数値をプロパティとして定義することです。

<profiles>
    <profile>
        <id>live</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <properties>
            <mysql.username>test</mysql.username>
            <mysql.password>test</mysql.password>
            <mysql.databaseUrl>jdbc:mysql://localhost:3306/test</mysql.databaseUrl>
        </properties>
    </profile>
    <!-- ... -->
</profiles>

次に、リソース フィルタリングを有効にします。

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

ファイルで、例えばpersistence.properties

mysql.username=${mysql.username}
mysql.password=${mysql.password}
mysql.databaseUrl=${mysql.databaseUrl}
mysql.databaseDriver=com.mysql.jdbc.Driver

最後に、プロパティ ファイルを読み込み、データソースを作成します。

@PropertySource({"classpath:persistence.properties"})
public class DatabaseConfig {
    @Autowired
    private Environment env;

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setUsername(env.getProperty("mysql.username"));
        // ...
        return dataSource;
    }
}
于 2015-05-08T07:59:45.203 に答える