単体テストを実行するときに H2/HSQL などのメモリ内データベースを使用するが、Spring Boot アプリケーションを実行するときに本番データベース [Postgre/MySQL] を使用するように、Spring Boot アプリケーションを構成するにはどうすればよいですか?
8 に答える
これには、スプリング プロファイルを使用できます。これは具体的な方法です:
環境固有のプロパティ ファイルを用意します。
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
次のように、MySQLとH2ドライバの両方をに配置します。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")
ます。
@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")
する必要があります)。