【问题标题】:Location not found on flyway migrate on websphere在 websphere 上的 flyway 迁移上找不到位置
【发布时间】: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();

任何帮助将不胜感激。

【问题讨论】:

    标签: java spring websphere flyway


    【解决方案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 版本
    猜你喜欢
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    • 2021-05-23
    • 2015-01-03
    • 2020-04-29
    • 2019-05-02
    • 2013-04-07
    相关资源
    最近更新 更多