springmvc使用@Scheduled执行定时任务,过几天就不执行,然后过几个小时又回复正常

举个例子:11.16号早晨11:00开始执行到11.22号早晨0点这期间都正常,11.22号早晨1:00到11.22号早晨9:00期间没有执行,11.22号早晨9:00以后恢复正常,执行的时间分别是15秒 25秒 35秒(三个定时任务),每一个小时给数据库插入一条数据

初步怀疑,设置了定时策略,这时间都太巧合了。

1看看定时任务的设置执行时间是什么时间段.是不是设置即使如此.测试的参考网址http://www.pppet.net/
2.判断是否执行的标准是什么?数据库插入数据吗?建议在进入的时候添加日志来查看是否执行了定时任务.因为可能会因为报错等原因导致数据未插入成功.

@Component
public class AirTask {

private static final Log logger = LogFactory.getLog(AirTask.class);

@Autowired
private AirService airService;

/**
 * type 每小时平均 1 每天平均 0
 */
//@Scheduled(cron = "0 5 * * * * ?")
// @Scheduled(cron = "0 0/15 9-17 * * ?")
@Scheduled(cron = "0/15 * * * * ?")
public void countAirQualityHour() {
    // ResponseEntity<List<String>> airList = airService.sumHour();
    ResponseEntity<JSONObject> res = airService.sumHourOrDay(1, "天气网");
    // System.out.println("添加每小时数据成功");
     logger.info(JSON.toJSONString(res.getBody().get("status")));
}

这是那个定时任务

事出反常必有妖,既然你注解没错那肯定就会被spring执行到,建议你在方法的开始和结束都打一个日志,这样搜索排除错都很方便

图片说明
建议你修改一下配置文件中的这两个参数
MaxWaitMillis:获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间, 默认-1
TestOnBorrow:在获取连接的时候检查有效性, 默认false
如果你的定时在配置文件有配置,可以考虑一下我这个方法

用这个试试呢
@Scheduled(fixedRate = 1000*60)
这个策略是一分钟执行一次,根据你的需求改一下时间就行了