JavaWeb项目启动时,自动执行指定方法
根据需求文档做了一个在给定参数时间内持续增加积分的功能,自动置顶加分项目,超出时间不再继续加分并取消置顶。
就用了timer定时器task任务,在持续时间结束之后执行取消置顶的操作,考虑到web项目停止后timer定时器任务关闭,重新启动项目后不会自动执行,就打算在项目启动时执行执行方法继续执行定时器任务。
public static void main(String[] args) {
try{
System.out.println("等待取消置顶。");
Calendar calendar = Calendar.getInstance();
calendar.set(2019,0,15,16,30,00);
System.out.println(calendar.getTime());
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
//TODO 需要做的操作
System.out.println("取消置顶");
}
},calendar.getTime());
timer.cancel();
timer.purge();
timer = null;
}catch(Exception e){
e.printStackTrace();
}
}
以上是背景。
本人使用框架是ssm
在网上搜集了一些方案,有监听,有注解。
最后选定了两种可行办法
1.使用@PostConstruct注解
在service中定义了一个void方法
@Service
public class TestService{
@PostConstruct
public void start(){
System.out.println("项目启动打印123.");
}
}
效果如下
2.监听(Listener)
创建一个监听的类,实现ServletContextListener
public class MyListener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("项目一开始就打印了!");
}
}
然后在web.xml中增加配置
<listener>
<listener-class>xxx.xxx.xxx.MyListener</listener-class>
</listener>
然后项目启动可以看到控制台打印:
还有一种继承HttpServlet的个人感觉比较麻烦就先写这两种了。
后续可能会补充。有问题欢迎留言