2016-01-27 2 views
0

Как добавить Spring DAO класс в QuartzJobBean, я использую JobDetailFactoryBean, созданный на уровне класса Config. Я использую Spring4 Quartz 2.2.1 аннотации способовКак добавить весенний класс DAO в QuartzJobBean, используя JobDetailFactoryBean Аннотированный способ

  @Configuration 
      public class SchedulerConfig { 
      @Bean 
      public JobDetailFactoryBean jobDetailFactoryBean(){ 
      JobDetailFactoryBean factory = new JobDetailFactoryBean(); 
      factory.setJobClass(SchedulerService.class); 

      //Should I inject DAO here?? 

      factory.setGroup("mygroup"); 
      factory.setName("myjob"); 
      return factory; 
      } 
      } 

QuartzJobBean был расширен для выполнения

  @PersistJobDataAfterExecution 
      @DisallowConcurrentExecution 
      @Service 
      public class SchedulerService extends QuartzJobBean { 

      @Autowire 
      public SchedulerDAO schDAO; 

      protected void executeInternal(JobExecutionContext ctx) throws JobExecutionException { 

      System.out.println("---SchedulerService .executeInternal ----"); 

      try { 
      init(ctx.getJobDetail().getJobDataMap(), 
      ctx.getScheduler().getContext()); 
      } catch (SchedulerException e) { 
      e.printStackTrace(); 
      } 

      // I want to do DAO methods used here - how to do that??> 
      //Can get access to DAO 
      schDAO.getSomeMethods(); 
      } 

ответ

0

Вашей проблема заключается в том, что кварц, ничего не говорит о классе конфигурации знает, поэтому он не может autowired неизвестный боб. Перейдите в SchedulerConfig.java и объявите свою службу или DAO как autwired, затем используйте данные о заданиях и сопоставьте этот объект, чтобы он был передан в Quartz. Затем вы можете использовать его внутри метода executeInternal Quartz. Например

@Configuration 
public class mplampla{ 
@Autowired 
private YourDAO dao; 
@Bean 
public JobDetailFactoryBean jobDetailFactoryBean(){ 
    JobDetailFactoryBean factory = new JobDetailFactoryBean(); 
    Map<String,Object> map = new HashMap<String,Object>(); 
    map.put("YourDAO", dao); 
    factory.setJobDataAsMap(map); 
    return factory; 
} 
} 

Затем в YourJob.java

public class YourJob extends QuartzJobBean { 
@Override 
protected void executeInternal(JobExecutionContext ctx) throws JobExecutionException { 
    JobDataMap dataMap = ctx.getJobDetail().getJobDataMap(); 
    YourDAO dao = (YourDAO) dataMap.get("YourDAO"); 
    dao.getMethods(); 
} 
} 

Будьте осторожны, если вы используете класс @Service и класс YourDAO, как @Transational, вы получите ошибку о необъявленной Bean. В этом случае вам необходимо передать информацию о вашем DAO.

 Смежные вопросы

  • Нет связанных вопросов^_^