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

Servlets 如何在tomcat启动时设置数据库,servlets,deployment,Servlets,Deployment,我正在使用纯Servlet API编写一个简单的应用程序,没有框架。该应用程序在用户文件夹中的预定义位置使用HSQLDB。我需要在第一次启动或部署期间从应用程序内部创建表结构 我该怎么做呢?经过一点研究,我找到了使用ServletContextListener的解决方案。我将跳过解释并向您显示代码 @WebListener public class DatabaseCreator implements ServletContextListener { protected final L

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


我该怎么做呢?

经过一点研究,我找到了使用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) {

    }
}

,这些链接会帮助你吗?@YeWin不,实际上我已经有了功能齐全的应用程序。我只想自动化部署过程。基本上,我需要一种在部署或第一次启动时执行SQL脚本的方法。哦,我明白了,您不想也使用Spring??因为应用程序已经准备好了,现在使用Spring已经太晚了:-)