quartz没法启动的缘由

场景:spring集成quartz,在spring配置文件中配置quartz相关参数。spring

在以往的工做中,quartz常常没法启动,今天就根据之前经验,总结一下,供你们参考。数据库

  • 缘由一:ID冲突

quartz的两个基本单元是Job和Trigger,它们在内存中分别以jobName+groupName和triggerName+GrupName惟一标识,若是两个job的名字和群组都相同,则必然会有一个job没法启动。hibernate

  • 缘由二:default-lazy-init="true"

若在spring配置文件中配置了quartz相关参数,则不可以设置default-lazy-init="true",不然定时任务不会触发;若工程有多个spring配置文件,则只需当前配置quartz的文件不设置default-lazy-init="true"便可。内存

  • 缘由三:default-autowire="byName"

若在spring配置文件中配置了quartz相关参数,则不可以设置default-autowire="byName"属性,不然后台会报Table 'database.qrtz_locks' doesn't exist异常,这是由于若使用了autowire,spring集成quartz,会默认使用数据库存储job状态(而不是存储在内存中),spring会自动将dataSource(hibernate配置的数据库)配置为quartz存储数据库,而咱们的数据库中又没有quartz所需的数据表,所以就会报出如上异常;若工程有多个spring配置文件,则只需当前配置quartz的文件不设置default-autowire="byName"便可。it

  • 缘由四: 特别注意一点,与Spring整合必须使用Quartz1.8.x及如下版本
相关文章
相关标签/搜索