记录一次Spring 多个定时任务[@Schedule]所踩的坑

最开始项目中只有一个定时任务,用来处理数据库中的一些数据,后面由于项目需要,需要增加两个定时任务,问题就出现了。。

最开始的配置文件中的配置是这样的



这种情况在单个任务时候不会出现任何问题,因为Spring定时任务本就是单线程的,采用注解方式实现的

/**
	 * 三分钟解析一次数据
	 */
	@Scheduled(initialDelay = 25000, fixedDelay = 1000 * 60 * 3)
	public void parseDataFromDB() {

		// 线程1
		Thread t1 = new Thread(new Runnable() {
			public void run() {
				try {
					timerParseData(0);
				} catch (Exception e) {
					log.info("线程1--异常: " + e);
					e.printStackTrace();
				}
			}
		});
		t1.start();

		// 线程2
		Thread t2 = new Thread(new Runnable() {
			public void run() {
				try {
					timerParseData(1);

				} catch (Exception e) {
					log.info("线程2--异常: " + e);
					e.printStackTrace();
				}
			}
		});
		t2.start();

		// 线程3
		Thread t3 = new Thread(new Runnable() {
			public void run() {
				try {
					timerParseData(2);
				} catch (Exception e) {
					log.info("线程3--异常: " + e);
					e.printStackTrace();
				}
			}
		});
		t3.start();

	}

 注意类上要加@Component,但是当我在加上两个定时任务的时候,问题出现了:

1、先初始化的任务会执行,后面初始化的(即

initialDelay = 25000

值比较小的)根本没有执行;

2、即使前面的任务执行了,但是也只是执行了一次,没有达到周期性执行的目的。

整了几个小时也没有找到方法,后面在网上偶然看到任务线程池的方法,终于。。得到了解决,只需要改下配置文件即可



	




        
        
        
        
        
        
        
        
         
        
            
        



当配置成线程池的任务执行方式后,类上不需要改动任何地方,整个流程就正常了。

特此记录此坑!!让我球赛都没用心看

你可能感兴趣的:(框架)