我有一个带有我的webapp的war文件,我需要在我将Tom从Tomcat复制到webapps文件夹的时候在MySQL中生成数据库表(假设Tomcat正在运行)。
有没有办法做到这一点,你能帮我提一下这方面的信息吗?
PS。这是一个非常简单的webapp,只使用JDBC,我不使用任何ORM框架。是否可以使用JDBC?
答案 0 :(得分:4)
如果你只想更新架构,但又不想像Hibernate那样引入重量级的东西,那么有一些很好的选择:
Flyway要求您编写SQL以在应用程序的不同版本之间进行迁移。它根本不生成任何DDL(用于修改模式的SQL)。它只运行你提供的SQL。如果您对SQL很满意,并希望能够使用数据库提供的所有功能,我强烈建议您这样做。
可以将开始迁移的代码放入ServletContextListener中。 Flyway Application Integration页面上给出了可以在那里使用的示例代码。
Liquibase通过读取XML文件来工作,该文件描述了将数据库升级到最新模式所需的模式更改。这些更改按顺序应用。这意味着您的架构和更改更有可能移植到其他数据库,但可以说利用特定于您的数据库的功能更难。
Liquibase提供了您自己可以使用的ServletContextListener。请参阅文档中的ServletListener页面。
如果您想引入ORM,可以查看:
答案 1 :(得分:2)
在自定义ServletContextListener
课程的contextInitialized()
方法中完成工作。这将在webapp启动时调用。
@WebListener
public class Config implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
// Just write/call JDBC code here the usual way to create database/tables if not exists.
}
// ...
}
也就是说,使用像JPA / Hibernate这样的ORM框架确实可以让你远离很多的JDBC样板代码和头痛。
答案 2 :(得分:1)