如何在tomcat启动时设置数据库

时间:2014-12-30 11:24:49

标签: servlets deployment

我正在使用纯Servlet API编写一个简单的应用程序,没有框架。该应用程序在用户文件夹内的预定义位置使用HSQLDB。我需要在第一次启动时或部署期间从应用程序内部创建表结构。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

经过一些研究后,我找到了使用ServletContextListener的解决方案。我会跳过解释并告诉你代码。

@WebListener
public class DatabaseCreator implements ServletContextListener {

    protected final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Resource(
            name = "jdbc/rssDS",
            type = javax.sql.DataSource.class,
            authenticationType = Resource.AuthenticationType.CONTAINER
    )
    private DataSource dataSource;

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        if (dataSource == null) {
            logger.error("Data source wasn't initialized");
        }
        String sql = readStreamToString(sce.getServletContext());
        if (StringUtils.isBlank(sql)) {
            logger.error("SQL script is empty");
        }
        try {
            logger.debug("Executing SQL script");
            Connection connection = dataSource.getConnection();
            Statement statement = connection.createStatement();
            statement.execute(sql);
        } catch (SQLException e) {
            logger.error("Unable to create database table structure", e);
        }
    }

    private String readStreamToString(ServletContext ctx) {
        //skipped, reads stream contents into String
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {

    }
}