JavaWeb项目启动时,自动执行指定方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012998306/article/details/86494518

根据需求文档做了一个在给定参数时间内持续增加积分的功能,自动置顶加分项目,超出时间不再继续加分并取消置顶。

就用了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的个人感觉比较麻烦就先写这两种了。

后续可能会补充。有问题欢迎留言

猜你喜欢

转载自blog.csdn.net/u012998306/article/details/86494518