当前位置: 首页 > 面试题库 >

在Jersey webapp启动时初始化数据库

姬经义
2023-03-14
问题内容

我想在Web应用程序启动时加载属性文件并设置连接池。显然,我只想在一个地方进行一次,因此可以根据需要进行更改。对于常规的servlet,我只需将初始化代码放在servlet的init()方法中,但是您无法使用Jersey
servlet对其进行访问。那么我在哪里做呢?上面链接中的侦听器如何工作?


问题答案:

您需要做的就是编写一个实现ServletContextListener接口的Java类。此类必须实现两个方法contextInitialized方法,该方法在首次创建Web应用程序时被调用,而contextDestroyed在被销毁时将被调用。您要初始化的资源将在contextInitialized方法中实例化,并在contextDestroyed类中释放资源。必须将应用程序配置为在部署时调用此类,这在web.xml描述符文件中完成。

public class ServletContextClass implements ServletContextListener
{
    public static Connection con;

    public void contextInitialized(ServletContextEvent arg0) 
    {
        con.getInstance ();     
    }//end contextInitialized method

    public void contextDestroyed(ServletContextEvent arg0) 
    {
        con.close ();       
    }//end constextDestroyed method
}

web.xml配置

<listener>
    <listener-class>com.nameofpackage.ServletContextClass</listener-class>
</listener>

现在,这将使应用程序在部署时可以调用ServletContextClass,并实例化Connection或contextInitialized方法中的任何其他资源位置,类似于Servletinit方法所执行的操作。



 类似资料:
  • 我按照步骤创建了HelloWorld示例,但它没有运行。它给出了以下错误: 初始化引导层java.lang.module.FindException时出错:读取模块:F:\Develop\Eclipse\HelloWorld\bin时出错,原因是:java.lang.module.InvalidModuleDescriptoRexception:HelloWorld.class在顶级目录中找到(模

  • 所以我最近在我的win10 PC上安装了eclipse,并创建了一个公共类。代码如下: 接下来,显示了一个错误: 然后,我删除了info.java文件,并显示以下错误: 我能做些什么来解决这个问题?

  • 我有以下docker compose文件(): 以及下面的: 然后执行以下命令: 它会导致错误: 在日志中,我看到以下内容: 看起来flyway在数据库初始化之前启动,因此无法连接到数据库,我看到下面的错误。 我怎样才能解决这个问题? 我谷歌了类似的问题,我找到了以下建议:https://github.com/vishnubob/wait-for-it但我是docker的新手,我不明白如何将其放入

  • 初始化数据 打开MainSetup类,在Daos语句后面插入新建根用户的代码 // 初始化默认根用户 if (dao.count(User.class) == 0) { User user = new User(); user.setName("admin"); user.setPassword

  • 数据sql是在创建JPA实体之前执行的,它会导致找不到表的错误。有人能帮我吗?我在Spring Boot加载初始数据的链接中看到了相同的问题,但这个问题没有得到回答。

  • 本文向大家介绍docker mysql启动时执行初始化sql,包括了docker mysql启动时执行初始化sql的使用技巧和注意事项,需要的朋友参考一下 1.拉取Mysql镜像 docker pull mysql:5.7 2.检查mysql镜像 3.本地创建mysql外挂的目录 4.启动mysql 5.进入容器,登录mysql,检查发现已创建库 test_database 总结 以上所述是小编给