2017-04-19 6 views
7

私はMavenとSpring Bootを使用しています。私はmvn spring-boot:runを使ってアプリケーションを実行します。FlywayがSpring Bootで動作しない場合のデバッグ方法は?

https://flywaydb.org/documentation/plugins/springbootは、フライウェイはスプリングブートの起動時に呼び出されるべきだと言います。

私のpom.xmlには、Flywayへの依存関係が含まれています。

<dependency> 
    <groupId>org.flywaydb</groupId> 
    <artifactId>flyway-core</artifactId> 
    <version>4.1.2</version> 
</dependency> 

私が最初にMavenコマンドを実行したとき、それはFlywayのものをダウンロードしたので、依存関係は機能していると思います。

私は、次のファイルています

./src/main/resources/db/migration/V123__foo.sql 
./src/main/resources/application.properties 

は、上記の記事は、それが「ただ働き」すべき暗示が、それはデータベースにJDBC URLを見つけるだろう場所を私は理解していません。春ブーツが起動(および負荷と私のWebアプリケーション利用できるようにする)場合にはフライウェイからのログが存在しない

flyway.url=jdbc:postgresql://localhost:5432/services?user=postgres&password=postgres 
flyway.enabled=true 

:だから私はapplication.propertiesファイルに次を追加しました。私はフライウェイは無視されると思う。

どうすればよいですか?あるいは、より一般的には、この問題を自分自身でどうやってデバッグするのですか?

+0

flywayはデフォルトで 'spring.datasource'プロパティで指定された通常のデータソースを使用しますが、通常は追加のデータソースは必要ありません。あなたが本当に別のURLとユーザーをflywayに使用したい場合は、 'flyway.username'と' flyway.password'で 'flyway.url'が必要でURLに埋め込まれていません。その次に、データベースドライバがあることを確認してください。JDBCが検出されず、何も実行されません(JDBCを使用しないと動作しません)。 –

+0

アドバイスをいただきありがとうございます。しかし、データソースが間違っていれば(例えば、JDBCドライバがない)エラーが表示されたり、間違っていると思われます(希望ですか?)その前提? –

+0

既にデータソースを使用している場合は、デフォルトで使用されます。また、あなたは何を見たいですか?ロギングはレベルが高い場合(警告など)、あなたのログレベルに依存します。ロギングに頼る代わりに、代わりにデータベースの内容を確認することができます。 –

答えて

8

誰も回答を投稿していないので、私が見つけたものを投稿します。

M.デイナムは実際には、質問に対するコメントで正しいです、問題はデータソースの欠如でした。

私の元の質問は、この種の問題をデバッグするアプローチでなければなりませんでした。明らかに1つのオプションは、stackoverflowに投稿することです:)しかし、私はそれを自分で行う方法を知りたがっていました。

スプリングブートには、コードとクラスパスを見て、適切に動作するいくつかのクラスがあります。たとえば、「Flywayがパス上にあり、データソースがあり、Flywayを実行する」などのルールに実装を提供するクラスがあります。データソースがないため、このルールは私のケースでは発生しませんでした。

あなたが書いたコードがSpring Bootを呼び出すのではなく、それは逆です。あなたのコードを調べるSpring Bootは、あなたのコードを検査し、ルールに基づいて何をすべきかを決定します。このアーキテクチャはaction at a distanceとして知られています。離れた場所での行動の主な問題は、デバッグすることが非常に難しいことです。

解決策を見つける唯一の唯一の方法は、私がM. Deinumの診断を確認する方法でしたが、Springブートソースコードを読み、Springブートコードを作成するために使用される注釈を理解することでした。 Spring Boot's Flyway integrationにソースコードから

我々はこれはフライウェイは、クラスパス上にある場合、利用可能なデータソースBeanが存在する場合、このコードが実行されます」という意味

@ConditionalOnClass(Flyway.class) 
@ConditionalOnBean(DataSource.class) 

を参照してください、それ以外の場合は黙って得ることはありません実行された "。

「この問題をデバッグする方法」という質問に対する答えは、Spring Bootのソースコードを読んで、それがどのように動作するか以外のメカニズムがないということです。

この種の問題を回避したい場合は、「離れた場所での行動」を介して動作するフレームワークを避けなければなりません。これにはSpring Bootが含まれます。

関連する問題