Spring Quartz-планировщик: класс не найден Исключение - PullRequest
0 голосов
/ 02 июля 2019

Я использую кварцевый планировщик (версия 2.3.0).Это дает следующему классу не найденное исключение при запуске задания.Класс есть в коде.В результате состояние триггера помечается как ошибочное. Тот же код развернут на другом сервере, и он работает там без каких-либо исключений. .Невозможно понять, почему это происходит.

Исключение:

Error retrieving job, setting trigger state to ERROR.
org.quartz.JobPersistenceException: Couldn't retrieve job because a required class was not found: 
@Configuration
@EnableScheduling
@DisallowConcurrentExecution
@PropertySources(value = {@PropertySource("classpath:quartz.properties")})
public class BillingInit implements Job {

  @Value("${cron.billing.init.cron.expression}")
  private String expression;

  @Autowired
  private BillingSchedulerService schedulerService;

  @Override
  public void execute(final JobExecutionContext jobExecutionContext) {
    schedulerService.scheduleBill();
  }

  @Bean(name = "billingInitCron")
  public JobDetailFactoryBean sampleJob() {
    return ConfigureQuartz.createJobDetail(this.getClass());
  }

  @Bean(name = "billingInitCronTrigger")
  public CronTriggerFactoryBean billingJobTrigger(
      @Qualifier("billingInitCron") final JobDetail jobDetail) {
    return ConfigureQuartz.createCronTrigger(jobDetail, expression);
  }
}

ConfigureQuartz.java

public static CronTriggerFactoryBean createCronTrigger(final JobDetail jobDetail,
      final String cronExpression) {
    CronTriggerFactoryBean factoryBean = new CronTriggerFactoryBean();
    factoryBean.setJobDetail(jobDetail);
    factoryBean.setCronExpression(cronExpression);
    factoryBean.setMisfireInstruction(SimpleTrigger.MISFIRE_INSTRUCTION_FIRE_NOW);
    return factoryBean;
  }

public static JobDetailFactoryBean createJobDetail(
      @SuppressWarnings("rawtypes") final Class jobClass) {
    JobDetailFactoryBean factoryBean = new JobDetailFactoryBean();
    factoryBean.setJobClass(jobClass);
    // job has to be durable to be stored in DB:
    factoryBean.setDurability(true);
    return factoryBean;
  }

quartz.properties

org.quartz.scheduler.instanceId = AUTO
org.quartz.scheduler.makeSchedulerThreadDaemon = true

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.makeThreadsDaemons = true
org.quartz.threadPool.threadCount: 20
org.quartz.threadPool.threadPriority: 5

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.isClustered = true
org.quartz.jobStore.dataSource = myDs
org.quartz.jobStore.misfireThreshold = 25000
cron.billing.init.cron.expression = 0 0 0 * * ?
...