我的团队在部署 JBOSS ESB 包期间尝试使用 Flyway 迁移我们的数据库。我们创建了一个 Migration MBean,它调用 flyway 来初始化和迁移我们的数据库。
在部署期间,我们收到以下错误:
部署错误:
部署“vfszip:/opt/jboss-soa-p.5.2.0/jboss-as/server/default/deploy/our-package.esb/”由于以下原因而出错: java.io.FileNotFoundException:在 /opt/jboss-soa-p.5.2.0/jboss-as/server/default/deploy/our-package.esb 中找不到 JAR 条目 db/migration
环境:
JBOSS 5.2.0
Flyway Core 2.0.3
ESB 包的结构 (our-package.esb)
|lib
|db
|migration
|V1__Initial_structure.sql
|V1_1__Populate_table.sql
|jboss-service.xml
|META-INF
我们的部署将主要包括队列、主题和相关的监听器。我们有多个 ESB 包要在多个环境中部署。
更新
2013-02-18 12:33:11,700 错误 [org.jboss.kernel.plugins.dependency.AbstractKernelController] (HDScanner) 安装到开始时出错:name=our.pack.age:service=DBMigrator state=Create mode=Manual requiredState =已安装 com.googlecode.flyway.core.api.FlywayException:无法在位置扫描 SQL 迁移:com.googlecode.flyway.core.resolver.sql.SqlMigrationResolver.resolveMigrations(SqlMigrationResolver.java:97) 处的 db/migration com.googlecode.flyway.core.resolver.CompositeMigrationResolver.collectMigrations(CompositeMigrationResolver.java:219) 在 com.googlecode.flyway.core.resolver.CompositeMigrationResolver.doFindAvailableMigrations(CompositeMigrationResolver.java:157) 在 com.googlecode.flyway.core。 com.googlecode.flyway 上的 resolver.CompositeMigrationResolver.resolveMigrations(CompositeMigrationResolver.java:127)。core.info.MigrationInfoServiceImpl.refresh(MigrationInfoServiceImpl.java:86) at com.googlecode.flyway.core.info.MigrationInfoServiceImpl.(MigrationInfoServiceImpl.java:79) at com.googlecode.flyway.core.Flyway$4.execute(Flyway. java:1019) 在 com.googlecode.flyway.core.Flyway$4.execute(Flyway.java:1012) 在 com.googlecode.flyway.core.Flyway.execute(Flyway.java:1259) 在 com.googlecode.flyway。 core.Flyway.info(Flyway.java:1012) at our.pack.age.DBMigrator.migrate(DBMigrator.java:52) at our.pack.age.DBMigrator.start(DBMigrator.java:31) at sun.reflect .NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method。调用(Method.java:597)
...更多的
造成的: java.io.FileNotFoundException: JAR entry db/migration not found in /opt/jboss-soa-p.5.2.0/jboss-as/server/default/deploy/our-package.esb at sun.net.www。 com.googlecode.flyway.core.util.scanner.JarFileLocationScanner 上 sun.net.www.protocol.jar.JarURLConnection.getJarFile(JarURLConnection.java:71) 上的 protocol.jar.JarURLConnection.connect(JarURLConnection.java:122)。 getJarFromUrl(JarFileLocationScanner.java:55) 在 com.googlecode.flyway.core.util.scanner.JarFileLocationScanner.findResourceNames(JarFileLocationScanner.java:34) 在 com.googlecode.flyway.core.util.scanner.ClassPathScanner.findResourceNames(ClassPathScanner. java:156) 在 com.googlecode.flyway.core.util.scanner.ClassPathScanner.scanForResources(ClassPathScanner.java:58) 在 com.googlecode.flyway.core.resolver.sql.SqlMigrationResolver。resolveMigrations(SqlMigrationResolver.java:86) ... 68 更多
DBMigrator是我们自定义的 MBean,用于调用 Flyway 来迁移我们的数据库。
我们使用 Flyway 默认配置,但 setOutOfOrder( true ) 除外。测试 SQL 文件放在 src/main/resources/db/migration 中。