50

単体テストを実行するときに H2/HSQL などのメモリ内データベースを使用するが、Spring Boot アプリケーションを実行するときに本番データベース [Postgre/MySQL] を使用するように、Spring Boot アプリケーションを構成するにはどうすればよいですか?

4

8 に答える 8

58

これには、スプリング プロファイルを使用できます。これは具体的な方法です:

環境固有のプロパティ ファイルを用意します。

application.properties :

spring.profiles.active: dev

application-dev.properties

spring.jpa.database: MYSQL
spring.jpa.hibernate.ddl-auto: update

spring.datasource.url: jdbc:mysql://localhost:3306/dbname
spring.datasource.username: username
spring.datasource.password: password

application-test.properties

spring.jpa.database: HSQL

次のように、MySQLH2ドライバの両方をに配置します。pom.xml

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

<dependency>
    <groupId>org.hsqldb</groupId>
    <artifactId>hsqldb</artifactId>
    <scope>test</scope>
</dependency>

大事なことを言い忘れましたが、Test クラスに で注釈を付け@ActiveProfiles("test")ます。

于 2015-08-14T02:45:16.793 に答える
6

@Sanjayには1つの方法がありますが、わかりにくいと思います。次のような、本番環境で有効にするプロファイルのみを使用することもできproductionます。

spring.jpa.hibernate.ddl-auto: update
spring.datasource.url: jdbc:mysql://localhost:3306/dbname
spring.datasource.username: username
spring.datasource.password: password

そして、それ以外は指定しないでください。組み込みデータベースをtestスコープに追加すると、テストで使用できるようになります。デフォルトのプロファイル (カスタマイズなし) でテストを実行すると、データベース情報は見つかりません (これらはproductionプロファイルに保存されているため)。その場合、組み込みデータベースを見つけて起動しようとします。なんらかの理由でさらにカスタマイズが必要な場合は、application-test.propertiesそれらのために を用意できます (テストに追加ActiveProfiles("test")する必要があります)。

于 2015-08-14T06:37:19.077 に答える