在 websphere 上的 flyway 迁移上找不到位置
Posted
技术标签:
【中文标题】在 websphere 上的 flyway 迁移上找不到位置【英文标题】:Location not found on flyway migrate on websphere 【发布时间】:2018-05-26 07:56:05 【问题描述】:我正在尝试在 Websphere 服务器上设置 flyway-migration。
我的项目由以下模块组成:
--projectwar.war
--projectsql.jar
--java
--MyFlywayUtil.class
-- resources
-- myscripts
--projectmodel.jar
--java
--MyRiskDataSourceConfig.class
MyRiskDataSourceConfig 包含 flyway 迁移声明:
@Bean(initMethod = "migrate")
public Flyway flyway(@Qualifier("myDataSource") DataSource dataSource)
Flyway flyway = new Flyway();
flyway.setBaselineOnMigrate(true);
flyway.setClassLoader(MyFlywayUtil.class.getClassLoader());
flyway.setLocations("classpath:"+"myscripts");
flyway.setDataSource(dataSource);
return flyway;
在 Tomcat 下使用 bootRun 命令执行时,迁移工作正常并找到位置。
但是在 Websphere 下我收到以下信息:
com.ibm.ws.classloader.CompoundClassLoader@bb6f8b91[app]
Local ClassPath
/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/installedApps/cell01/project.ear/project.war/WEB-INF/classes
/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/installedApps/cell01/project.ear/project.war/WEB-INF/lib/projectmodel.jar
/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/installedApps/cell01/project.ear/project.war/WEB-INF/lib/projectsql.jar
/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/installedApps/cell01/project.ear/project.war
Parent com.ibm.ws.classloader.ProtectionClassLoader@c26663d6 Delegation Mode PARENT_FIRST)
On WebSphere an empty file named flyway.location must be present on the classpath location for WebSphere to find it!
o.f.c.i.u.s.classpath.ClassPathScanner Unable to resolve location classpath myscripts
我已经尝试过使用和不使用 flyway.setClassLoader();
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:您是否还向包含您的迁移的文件夹中添加了一个名为 flyway.location
的(空)文件,在我的情况下,这解决了问题。
由于 IBM 类加载器的工作方式,必须将此文件添加为解决方法,另请参阅 source
当然还有给出的警告:
在 WebSphere 上,名为 flyway.location 的空文件必须存在于类路径位置,WebSphere 才能找到它!
【讨论】:
哇,这么脏的代码。感谢您的提示,稍后会检查 为我工作。我正在使用 flyway 5.2.4 我的 flyway 位置在 application.properties 中配置,如下所示: spring.flyway.locations=classpath:db/flywaymigration 。所以我只是把空的 flyway.location 文件放在那里,然后 WAS 可以找到它们。感谢您的解决方案,节省了很多时间!【参考方案2】:根据这个git issue,问题已在flyway 4.0.1中修复
【讨论】:
我使用的是 4.2.0 版本以上是关于在 websphere 上的 flyway 迁移上找不到位置的主要内容,如果未能解决你的问题,请参考以下文章
现有数据库上的 flyway 迁移导致“列中遇到错误的列类型”