關於springboot如何做一個定時任務

一個IT暖男發表於2018-10-08

關於springboot如何做一個定時任務

  1. 首先我們需要用到Tomcat的監聽器ServletContextListener,我們將需要寫的一個定時任務類繼承ServletContextListener,ServletContextListener有兩個重寫方法,分別是contextInitialized和contextDestroyed,將你需要伺服器開始時要監控的定時任務寫在contextInitialized方法中,將你需要在伺服器關閉時做的一些處理寫在contextDestroyed,就可以很方便的完成你的需求,程式碼如下:

@WebListener
public class ContextListener implements ServletContextListener {
	
	@Autowired
	private CustomerService customerServiceImpl;
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
    	// 定時任務
    			Timer timer = new Timer();
    			timer.schedule(new TimerTask() {
    				@Override
    				public void run() {
    					Calendar cal = Calendar.getInstance();
    					int day_of_month = cal.get(Calendar.DAY_OF_MONTH);
    					if (day_of_month == 20) {
    						customerServiceImpl.userBonus();
    					} 
    				}
    			}, 0, 3600 * 24 * 1000);
    }
 
    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
 
    	System.out.println("Destroyed");
    }
}

2.@WebListener註解是springboot監聽器的一個註解,所有監聽器實體類都需要加上這個註解,並且在springboot的啟動類Application當中,還需要加上一個能掃描全域性的監聽器過濾器的一個註解,那就是@ServletComponentScan,程式碼如下:

@ServletComponentScan
@SpringBootApplication
@MapperScan("*.mapper")
public class MMApplication {

	public static void main(String[] args) {
		SpringMMApplication.run(MMApplication.class, args);
	}
}

相關文章