我有一个使用spring xml配置的java spring MVC web应用程序构建,部署在tomcat服务器上。
我的要求是,每当tomcat服务器启动或在关机后重新启动时,我希望在部署war之前从数据库中清除一个表。使用的数据库是mysql。
我现在有两种方法,一种是将需要清理的表保存在内存中,使用内存数据库中的一些。第二种方法是让tomcat服务器在部署war之前执行脚本(它将负责清除表中的数据)。但我正在寻找一种解决方案,使我的应用程序能够在war部署之前自行清理表。有没有使用spring的解决方案?或任何其他解决方案?
谢谢!
发布于 2016-02-25 20:38:29
按照Spring Docs使用WebApplicationInitializer。
或参考以下答案:
使用ServletContextListener的示例代码(来自第二个答案)
将侦听器添加到应用程序的web.xml中
例如:
<listener>
<listener-class>InitListener</listener-class>
</listener>示例代码:
public class InitListener implements javax.servlet.ServletContextListener {
public void contextInitialized(ServletContext context) {
Database.clearTable();
}
}发布于 2016-02-25 20:40:00
注意:-此解决方案是一种变通方法:-我建议从系统管理级别进行部署,您可以触发一个cron作业/windows任务来检查tomcat服务是否正在运行(手动启动)或检查tomcat日志上一次重新启动的日期/时间(自动启动)这可能需要一些配置,然后将其与最近的日期/时间进行比较,因此您可以启动您自己的作业/任务来截断您的mysql表。
发布于 2016-02-25 20:55:12
我有一个非常简单的方法,那就是使用一个非惰性的Spring单例bean和一个用来清理表的init方法。您可以很容易地使其依赖于Spring,并且Datasource确保在web应用程序能够响应其第一个请求之前调用该初始化方法。
class Cleaner {
Datasource datasource;
void init() {
// clean the table
}
void setDatasource(Datasource datasource) {
this.datasource = datasource;
}
}在根上下文中使用以下声明:
<bean id="cleaner" class="...Cleaner" p:datasource="datasource" init-method="init"/>https://stackoverflow.com/questions/35627160
复制相似问题