最近,我已经将我的java spring应用程序重新打包成为一个用于在tomcat中部署的WAR文件。经过一些测试后我注意到,public static void main(String[] args)
没有被执行。我的应用程序的一些必要初始化在main
中完成。 WAR文件中是否有main
方法?在WAR文件中运行某些初始化的适当位置是什么?
答案 0 :(得分:9)
您可以为web.xml
文件添加一个监听器:
<listener>
<description>Application startup and shutdown events</description>
<display-name>Test</display-name>
<listener-class>com.package.package.StartClass</listener-class>
</listener>
public class StartClass implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
//Context destroyed code here
}
@Override
public void contextInitialized(ServletContextEvent servletContextEvent)
{
//Context initialized code here
}
}
答案 1 :(得分:3)
好吧,您必须在web.xml中创建一个侦听器,该侦听器将在启动时由容器调用。
<listener>
<listener-class>com.rdv.example.WebAppContext</listener-class>
</listener>
此课程将实施ServletContextListener
public class WebAppContext implements ServletContextListener {
public void contextInitialized(ServletContextEvent servletContextEvent) {
// Do your processing that you are trying to do in main method.
}
答案 2 :(得分:1)
我找到了另一种方式,即独立于spring和tomcat:@PostConstruct
注释。在代码中:
@PostConstruct
public void init() {
// initialization code goes here
}
无论我是独立运行我的应用程序还是在tomcat中运行,都会执行此方法。
有关详细信息,请参阅How to call a method after bean initialization is complete? 或Init method in Spring Controller (annotation version)