我有一个Sping Boot 项目,其中包含了大约500个flyway迁移文件,这些文件都是针对oracle sql数据库(19 c)运行的。在Intellij Idea中,我可以使用mvn flyway:migrate
成功运行迁移脚本。但是,当在应用程序启动时执行相同的操作时,它运行了大约70%的迁移文件,然后崩溃并出现以下错误:
Migration V6_2021.06__XXXXXXXXXXXXXXXXX.sql failed
--------------------------------------------------------------------------------
SQL State : 42000
Error Code : 4098
Message : ORA-04098: trigger 'XXXXXXXXXXX' is invalid and failed re-validation
Location : db/migration/V6_2021.06__XXXXXXXXXXXXXXXXX.sql
Line : 7
Statement : INSERT INTO....
我不想粘贴错误消息的其余部分,因为我认为它是不相关的,因为当从IDE迁移时,完全相同的脚本被成功执行。至于我的application.properties文件,它看起来像这样:
spring.datasource.url=jdbc:oracle:thin:@//XXXX:1521/XXXX
spring.datasource.username=XXXX
spring.datasource.password=XXXX
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.flyway.driver-class-name=oracle.jdbc.OracleDriver
spring.flyway.url=jdbc:oracle:thin:@//XXXX:1521/XXXX
spring.flyway.user=XXXX
spring.flyway.password=XXXX
spring.flyway.table=schema_version
......但是,我想这是可以的,因为它执行了大约300个文件,然后崩溃了。问题是--为什么同样的脚本在IDE内部迁移时工作,而在应用程序启动时自动运行时失败?要寻找什么?要检查什么?我实在是没有主意了。
编辑:也添加我的flyway-maven-plugin配置:
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>4.2.0</version>
<configuration>
<driver>oracle.jdbc.OracleDriver</driver>
<url>jdbc:oracle:thin:@//XXXX:1521/XXXX</url>
<user>XXXX</user>
<password>XXXX</password>
<baselineOnMigrate>true</baselineOnMigrate>
<baselineVersion>1</baselineVersion>
</configuration>
</plugin>
1条答案
按热度按时间a6b3iqyw1#
修复了。问题是一些迁移脚本缺少“/”符号来分隔包含在单个文件中的多个触发器定义。添加缺少的斜杠解决了在应用程序启动时应用迁移的问题。为什么直接从IDE运行时它们能正确工作对我来说仍然是个谜。值得一提的是,一个脚本在触发器定义之间有“/”,但它前面有两个空格,显然,这也是不正确的,因为当我删除空间,它开始像一个魅力的工作。