2017-01-12 8 views
1

私はSpring Boot 1.4.3を使用しており、@DataJpaTestという注釈が付けられています。デフォルトでは、メモリ内のデータベースに対して実行されます。私は一時的にローカルのMySQLに対してこれらのすべてを実行できるようにしたいと考えています。これを簡単な方法でどうすればいいですか?Spring起動時にメモリ内ではなく実際のデータベースに対して@DataJpaTestを実行する方法

私は、私は私のローカルのMySQLを指すapplication-local.propertiesを持って@ActiveProfiles("local")を追加することによって、私はそれが1のために働くことができますことを発見したが、どこにでもいることを追加テストを実行し、再度それを削除するにはあまりにも多くの仕事です(私はこれをMySQLに対して手動でのみ実行したいので、CI環境はメモリ内のデータベースに対して実行されます)。

問題がある場合は、私はMavenを使用しています。

UPDATE:

だから私はその後、私は右クリック(私はローカルのMySQLに対する自分のアプリケーションを実行するためにすでに使用)私のローカルのMySQLデータベース

に接続するためのDBプロパティが含まれているapplication-local.propertiesを持っていますIntelliJのパッケージで "すべてのテストをパッケージで実行"を選択します。その実行コンフィギュレーションの設定では、「VMオプション」フィールドに-Dspring.profiles.active=localを追加します。

これはテスト中にlocalのプロファイルを有効にすると思っていましたが、そうではありません。ローカルのMySQLを停止すると、テストは正常に実行されます。

+1

この名前を「One-off run @ Da taJpaメモリ内ではなく実際のデータベースに対してテストするようになりました。 –

+1

システムプロパティは '@ ActiveProfiles'をオーバーライドしません。 [SPR-8982](https://jira.spring.io/browse/SPR-8982)を参照してください。カスタム回避策については、http://stackoverflow.com/questions/20551681/spring-integration-tests-with-profile/33044283#33044283をご覧ください。 –

+0

@SamBrannen '@ ActiveProfies'自体は動作しません。とにかく埋め込まれたdbが使用されます。 –

答えて

2

あなたは同じapplication.properties(または.yml)でのMySQLのデータソースのプロパティを持つプロファイルを追加することができます。

application.yml

# Existing properties 

--- 
spring: 
    profiles: h2 
# More h2-related properties 

--- 
spring: 
    profiles: postgres 
    database: 
    driverClassName: org.postgresql.Driver 
    datasource: 
    url: jdbc:postgresql://localhost:5432/db_dvdrental 
    username: user_dvdrental 
    password: changeit 
    jpa: 
    database: POSTGRESQL 
    generate-ddl: false 
# More postgres-related properties 

とのいずれかの統合で@ActiveProfiles("postgres")を使用テストクラスまたはVM引数を使用してコンテナを起動してください:

java -Dspring.profiles.active=h2 ... 
関連する問題