将战争部署到Tomcat时的数据库生成

问题描述:

我有一个war文件与我的webapp,并且我需要在将战争复制到来自Tomcat的webapps文件夹(假设Tomcat正在运行)的瞬间在MySQL中生成数据库表。将战争部署到Tomcat时的数据库生成

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

PS。这是一个非常简单的web应用程序,只使用JDBC,我不使用任何ORM框架。用JDBC可以吗?

在定制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. 
    } 

    // ... 
} 

也就是说,使用ORM框架,像JPA /休眠真的把你从的JDBC样板代码和头痛很多

听起来就像是一个例子:http://www.hibernate.org/

+0

我刚刚编辑帖子,我没有使用任何ORM框架。 – DaJackal 2012-01-27 16:56:41

如果你只是想更新架构,但不希望引入一些重量级的休眠,有一些很好的替代品:

  • 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更精美,但功能更少。
+0

我刚刚编辑帖子,我没有使用任何ORM框架。 – DaJackal 2012-01-27 16:56:28

+0

对于我不打算分发的专有应用程序,我会使用Flyway。如果我正在编写一个开源应用程序并希望支持很多数据库,我可能会倾向于Liquibase。 – 2012-01-27 16:59:38