環境
- Jboss 6
- フライウェイ1.5
- スプリングコア2.5.6
戦争の構造
ei-web-1.0.1-SNAPSHOT.war
|WEB-INF
|classes
|db
|migrations
|ei
|V5.7.0.sql
|V5.7.1.sql
|V5.7.2.sql
問題
JBossの起動時にロードされたMBean内でFlyway移行を実行しようとすると、次のスタックトレースが取得されます。
java.io.FileNotFoundException:URL [vfs:/C:/jboss-6.1.0.Final/server/ei/deploy/ei-web-1.0.1-SNAPSHOT.war/WEB-INF/classes/db/migrations/ ei /]はファイルシステムに存在しないため、絶対ファイルパスに解決できません:vfs:/C:/jboss-6.1.0.Final/server/ei/deploy/ei-web-1.0.1-SNAPSHOT。 war / WEB-INF / classes / db / migrations / ei /
手がかり
- フライウェイのベースディレクトリはdb/migrations/eiです
- フライウェイの初期バージョンは5.7.0です。
- スタンドアロンで起動した場合、移行は問題ありません
- 私見ですが、問題はクラスパスディレクトリのスキャンに失敗した結果です。
com.googlecode.flyway.core.migration.sql.SqlMigrationResolver(L.99)を参照してください
final String searchPattern = "**/" + sqlMigrationPrefix + "?*" + sqlMigrationSuffix;
Resource[] resources = new PathMatchingResourcePatternResolver(classLoader)
.getResources("classpath:" + searchRoot + searchPattern);
私の場合、resourcesは空の配列を返します。