tt_*_*ntz 7 java mysql war database-migration flyway
每当我向服务器部署新战争时,我都希望Flyway能够运行.
在部署服务器时,flyway会自动运行吗?我是否必须始终自动化一个脚本,然后是flyway migration命令?或者最好的方法是什么?
服务器:
服务器是在Elastic Beanstalk(AWS)上运行的Java Tomcat服务器,它连接到MySQL数据库.
部署过程
我们手动在数据库上运行sql迁移脚本.然后我们将服务器的新战争上传到Elastic Beanstalk.
这很有用:
启动时自动迁移:https : //flywaydb.org/documentation/api/
因此,对于 Java 而言,只需创建脚本(例如 V1__initial_schema.sql,...),将它们放在 /src/main/resources/db/migration/ 下,然后:
Flyway flyway = new Flyway();
flyway.setDataSource(...);
flyway.migrate();
Run Code Online (Sandbox Code Playgroud)
正如评论所说,可能有多种方法可以做到这一点。
ServletContextListener一种常见的方法是使用Java Servlet 规范定义的钩子,以便在您的 Web 应用程序启动和关闭时收到通知。那个钩子就是ServletContextListener接口。将一个类添加到您的项目中,实现此接口中的两种方法,一种用于启动,一种用于关闭。在启动方法中,运行您的 Flyway 代码。
“上下文”一词是技术术语,表示您的 Web 应用程序。
contextInitializedcontextDestroyed对此类进行注释@WebListener是让您的Servlet 容器注册实例的多种方法中最简单的方法。
挺容易。
ServletContextListener在您的 Web 应用程序中第一次执行任何 Servlet(或过滤器)之前,您保证被调用并运行到完成。因此,这是在您的 servlet 开始工作之前完成您想要完成的设置工作的理想场所。Flyway 对我来说似乎是天作之合。
在 Stack Overflow 上搜索“ServletContextListener”以了解更多信息并查看示例,例如我自己的问答。
请注意,在出现问题时(当您的 ServletContextListener 遇到异常时)停止 Web 应用程序的部署在 Servlet 规范中没有明确定义。
一个例子可能是您的 Flyway 迁移由于某种原因而失败,例如无法连接到数据库。此时,您可能希望停止部署 Web 应用程序。
请参阅我自己的问答以及我在该答案中列出的相关问题组。Tomcat 8.0.33 停止部署,并取消部署 Web 应用程序,但不幸的是没有报告有问题的异常(或者至少我在开发模式下在日志或 IDE 控制台中找不到任何此类报告)。其他 Servlet 容器的行为可能会有所不同。
| 归档时间: |
|
| 查看次数: |
4752 次 |
| 最近记录: |