首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在部署war之前或在tomcat服务器重新启动后清除数据库中的表

如何在部署war之前或在tomcat服务器重新启动后清除数据库中的表
EN

Stack Overflow用户
提问于 2016-02-25 20:21:30
回答 5查看 194关注 0票数 0

我有一个使用spring xml配置的java spring MVC web应用程序构建,部署在tomcat服务器上。

我的要求是,每当tomcat服务器启动或在关机后重新启动时,我希望在部署war之前从数据库中清除一个表。使用的数据库是mysql。

我现在有两种方法,一种是将需要清理的表保存在内存中,使用内存数据库中的一些。第二种方法是让tomcat服务器在部署war之前执行脚本(它将负责清除表中的数据)。但我正在寻找一种解决方案,使我的应用程序能够在war部署之前自行清理表。有没有使用spring的解决方案?或任何其他解决方案?

谢谢!

EN

回答 5

Stack Overflow用户

发布于 2016-02-25 20:38:29

按照Spring Docs使用WebApplicationInitializer

或参考以下答案:

  1. Spring Web Application: Post-DispatcherServlet initialization
  2. spring mvc servlet initialization

使用ServletContextListener的示例代码(来自第二个答案)

将侦听器添加到应用程序的web.xml中

例如:

代码语言:javascript
复制
<listener>
   <listener-class>InitListener</listener-class>
</listener>

示例代码:

代码语言:javascript
复制
public class InitListener implements javax.servlet.ServletContextListener {

   public void contextInitialized(ServletContext context) {
      Database.clearTable();
   }
}
票数 0
EN

Stack Overflow用户

发布于 2016-02-25 20:40:00

注意:-此解决方案是一种变通方法:-我建议从系统管理级别进行部署,您可以触发一个cron作业/windows任务来检查tomcat服务是否正在运行(手动启动)或检查tomcat日志上一次重新启动的日期/时间(自动启动)这可能需要一些配置,然后将其与最近的日期/时间进行比较,因此您可以启动您自己的作业/任务来截断您的mysql表。

票数 0
EN

Stack Overflow用户

发布于 2016-02-25 20:55:12

我有一个非常简单的方法,那就是使用一个非惰性的Spring单例bean和一个用来清理表的init方法。您可以很容易地使其依赖于Spring,并且Datasource确保在web应用程序能够响应其第一个请求之前调用该初始化方法。

代码语言:javascript
复制
class Cleaner {

    Datasource datasource;
    void init() {
       // clean the table
    }
    void setDatasource(Datasource datasource) {
        this.datasource = datasource;
    }
}

在根上下文中使用以下声明:

代码语言:javascript
复制
<bean id="cleaner" class="...Cleaner" p:datasource="datasource" init-method="init"/>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35627160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档