我希望Flyway在我向服务器部署新战争时运行。
部署服务器时,飞行路线会自动运行吗?我是否必须始终自动执行脚本,然后执行飞行路线迁移命令?或者最好的方法是什么?
服务器:
该服务器是一个运行在Elastic Beanstalk (AWS)上的Java Tomcat服务器,它连接到一个MySQL数据库。
部署流程
我们在数据库上手动运行sql迁移脚本。然后我们上传一个服务器的新war到Elastic Beanstalk。
正如评论所说,可能有多种方法可以做到这一点。
一种常见的方法是使用 Java Servlet 规范定义的钩子,以便在 Web 应用程序启动和关闭时收到通知。该钩子就是 Servlet上下文查看器
接口。向项目中添加一个类,以实现此接口中的两个方法,一个用于启动,另一个用于关闭。在启动方法中,运行您的飞行路线代码。
“上下文”一词是技术术语,表示您的Web应用程序。
content初始化
内容已销毁
使用 @WebListener
对此类进行批注是获取 Servlet 容器注册实例的多种方法中最简单的方法。
很简单。
您的 Servlet 上下文查看器
保证在 Web 应用程序中首次执行任何 Servlet(或过滤器)之前被调用并运行至完成。因此,这是在 Servlet 开始工作之前完成要完成的设置工作的理想场所。飞行路线对我来说似乎是一个自然的契合。
在“堆栈溢出”中搜索“Servlet上下文查看器”以了解更多信息并查看示例,例如我自己的问题
请注意,Servlet规范中没有明确定义在出现问题时(当您的ServletContextListener遇到异常时)停止Web应用程序的部署。
例如,您的 Flyway 迁移可能由于某种原因(例如无法连接到数据库)而失败。此时,你可能想要停止 Web 应用的部署。
查看我自己的问题和答案以及我在该答案中列出的相关问题组。Tomcat 8.0.33停止部署,并取消部署web应用程序,但不幸的是没有报告令人不快的异常(或者至少在开发模式下,我在日志或IDE控制台中找不到任何这样的报告)。其他Servlet容器的行为可能会有所不同。
这可能很有用:
启动时自动迁移:https://flywaydb.org/documentation/api/
所以Java所有需要的是创建脚本(例如V1__initial_schema.sql,…),将它们放在 /src/main/resources/db/migration/下,然后:
Flyway flyway = new Flyway();
flyway.setDataSource(...);
flyway.migrate();
我们有一个生产数据库,我们使用flyway来维护它。最近我们克隆了我们的生产数据库来创建一个UAT数据库。UAT数据库具有与生产中相同的模式和数据。现在我们尝试在UAT数据库上运行“mvn flyway: iri ate”来测试新的flyway脚本。然而,我们得到了 脚本。23是一个新脚本。我们预计该州正在等待。然而,所有脚本的状态都变成了Baseln。我搜索了一天的相关主题,但找不到与我的案例相
我们使用Liquibase,现在在新项目中,我们必须使用Flyway。在liquibase中,迁移顺序在xml文件中,所以您可以指定什么是第一次迁移,什么是第二次迁移,它不依赖于名称。 所以,当一些开发人员添加新的迁移时,如果之前有人推动了新的迁移,那么他将在Git中遇到冲突,并且必须修复顺序。 这是如何在Flyway中实现的?如果并行添加迁移,如何控制顺序?
flyway可以在迁移之前对数据库进行验证检查吗? 场景1 例如:我试图在现有的数据库上执行flyway。我已经在db_users表中插入了一些用户。 但是我的sql脚本有db_users表的create语句和所有用户的插入语句,包括那些已经插入的用户。 我可以在创建表之前做IFNOT_EXISTS检查,但很难在每次插入之前做检查。 情景2 我已经在数据库中迁移了脚本V1、V2和V3。我修改了脚本
有没有办法告诉flyway在不应用迁移的情况下重新创建flyway表。例如,查看迁移文件夹中的脚本,假设它们都已应用,并简单地确保flyway表包含所有脚本。 我们的方案是,我们不允许在生产和(ISO;银行、认证)原因。规则说我们需要完全删除表。因此,当我们从生产副本重置测试环境时,我们需要重新创建飞行道表。现在,我们从现有的测试环境中复制和粘贴,但有时这与生产不同步,并且会发生各种问题。 因此,
在类路径中:/db。迁移有迁移但flyway没有看到这一点,而是爱上了msg 2022-05-02 17:28:07.993INFO 45296 --- [ restartedMain]c. c. c. ConfigServiceProperty tySourceLocator:从服务器获取配置,地址为:http://localhost:8888/story2022-05-02 17:28:08.
我为命令行java迁移执行了以下步骤: < li >创建java文件 当我执行迁移逗号时,它会像 警告:无法解析位置类路径:db/迁移 请查看下面的附件图片,它实际上是罐子。我已经提取了更多信息。