将war部署到Tomcat时生成数据库

时间:2012-01-27 16:38:24

标签: java mysql tomcat deployment war

我有一个带有我的webapp的war文件,我需要在我将Tom从Tomcat复制到webapps文件夹的时候在MySQL中生成数据库表(假设Tomcat正在运行)。

有没有办法做到这一点,你能帮我提一下这方面的信息吗?

PS。这是一个非常简单的webapp,只使用JDBC,我不使用任何ORM框架。是否可以使用JDBC?

3 个答案:

答案 0 :(得分:4)

如果你只想更新架构,但又不想像Hibernate那样引入重量级的东西,那么有一些很好的选择:

  • Flyway - 为您的应用程序提供迁移脚本,以便在部署时更新它。
  • Liquibase - 提供架构的XML描述,并允许Liquibase更新架构。

Flyway要求您编写SQL以在应用程序的不同版本之间进行迁移。它根本不生成任何DDL(用于修改模式的SQL)。它只运行你提供的SQL。如果您对SQL很满意,并希望能够使用数据库提供的所有功能,我强烈建议您这样做。

可以将开始迁移的代码放入ServletContextListener中。 Flyway Application Integration页面上给出了可以在那里使用的示例代码。

Liquibase通过读取XML文件来工作,该文件描述了将数据库升级到最新模式所需的模式更改。这些更改按顺序应用。这意味着您的架构和更改更有可能移植到其他数据库,但可以说利用特定于您的数据库的功能更难。

Liquibase提供了您自己可以使用的ServletContextListener。请参阅文档中的ServletListener页面。

如果您想引入ORM,可以查看:

  • Hibernate - 具有许多功能(以及相当多的依赖项)的ORM
  • EclipseLink - 之前的Oracle TopLink。这看起来比Hibernate更精致,但功能更少。

答案 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)

听起来像是http://www.hibernate.org/

的情况
相关问题