我们的应用程序在flyway 3.0和tomcat 7上运行良好。我们在类路径中使用基于sql的迁移。
最近我们正在尝试升级我们的应用程序以使用tomcat 8.在这样做之后,flyway无法在我们的类路径中找到sql迁移。我们一直在使用WAR部署和unpackWAR = false。仅供参考,使用unpackWAR = true,问题不再可重现。
我已尝试调试到flyway代码库中的一些内容并且一直在尝试找出升级到tomcat 8之前和升级到tomcat 8之后的差异。我发现的一个关键区别是ClassPathScanner.getLocationUrlsForPath() ,之前我们曾经找到以file:protocol为前缀的WAR文件的位置,但是现在使用tomcat 8,我们找到了以jar:protocol为前缀的WAR文件的位置。这似乎不是很成问题。但是,这会导致执行JarFileClassPathLocationScanner.findResourceNamesFromJarFile()中的代码。在此方法中,jar元素条目名称类似于“WEB-INF / classes / our_path / schema / V1.0.sql”等,但指定的位置仅为our_path / schema / V1.0.sql。既然有条件,
if(entryName.startsWith(location)){
我们的架构迁移未被提取。
有什么想法?这听起来像个臭虫吗?
答案 0 :(得分:1)
这应该是开箱即用的。请在问题跟踪器中提交一个问题,包括重现步骤(或者甚至更好的小型repro回购)。