2015-06-16 112 views
0

我使用下面的QuartzConfig配置類自動裝配彈簧數據與石英,這個配置類效果很好,一旦我運行項目沒有錯誤消防工作,但我想通過以下彈簧控制器但我與春天的數據@autowire錯誤春天的數據和石英自動裝配

石英工作

@Service 
@Transactional 
public class JobOne implements Job { 
    @Autowired 
    TestrecordRepository testrecordRepository; 
    @Autowired 
    ScoreRepository scoreRepository; 

    public void execute(JobExecutionContext context) throws JobExecutionException { 
     System.out.println("Job one!"); 
     List<Testrecord> records=testrecordRepository.findAll(); 
     for (Testrecord t : records) { 
      Testrecord testrecord = new Testrecord(); 
      testrecord.setValue_integer(t.getValue_integer()); 
      testrecord.setId(t.getId()); 
      RuleExecutor ruleExecutor = new RuleExecutor(); 
      Score score = ruleExecutor.processRules(testrecord); 
      scoreRepository.save(score);  
     } 
    } 
} 

配置類

@Configuration 
public class QuartzConfig { 
    @Autowired 
    private ApplicationContext applicationContext; 

    @Bean 
    public SchedulerFactoryBean quartzSchedulerjobOne() { 
     SchedulerFactoryBean quartzScheduler = new SchedulerFactoryBean(); 

     quartzScheduler.setOverwriteExistingJobs(true); 

     AutowiringSpringBeanJobFactory jobFactory = new AutowiringSpringBeanJobFactory(); 
     jobFactory.setApplicationContext(applicationContext); 
     quartzScheduler.setJobFactory(jobFactory); 

     Trigger[] triggers = { 
       processjobOneTrigger().getObject() 
     }; 

     quartzScheduler.setTriggers(triggers); 

     return quartzScheduler; 
    } 

    @Bean 
    public JobDetailFactoryBean processjobOne() { 
     JobDetailFactoryBean jobDetailFactory = new JobDetailFactoryBean(); 
     jobDetailFactory.setJobClass(JobOne.class); 
     jobDetailFactory.setDurability(true); 
     return jobDetailFactory; 
    } 

    @Bean 
    public CronTriggerFactoryBean processjobOneTrigger() { 
     CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerFactoryBean(); 
     cronTriggerFactoryBean.setJobDetail(processjobOne().getObject()); 
     cronTriggerFactoryBean.setCronExpression("0 0/1 * * * ?"); 
     return cronTriggerFactoryBean; 
    } 
} 

春季控制器

@RequestMapping(value = "/test", method = RequestMethod.GET) 
public void test(HttpServletRequest request) throws Exception { 
    ApplicationContext context = new AnnotationConfigApplicationContext(
      QuartzConfig.class); 
    Scheduler scheduler = (Scheduler)context.getBean("quartzSchedulerjobOne"); 

} 

從您發佈的錯誤日誌,Eclipse控制檯

[ERROR] org.quartz.core.ErrorLogger - An error occured instantiating job to be executed. job= 'DEFAULT.processJobTwo' 
org.quartz.SchedulerException: Job instantiation failed 
    at org.springframework.scheduling.quartz.AdaptableJobFactory.newJob(AdaptableJobFactory.java:45) ~[spring-context-support-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
    at org.quartz.core.JobRunShell.initialize(JobRunShell.java:134) ~[quartz-2.1.5.jar:na] 
    at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:387) [quartz-2.1.5.jar:na] 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.innvo.quartz.JobTwo': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.innvo.repository.TestrecordRepository com.innvo.quartz.JobTwo.testrecordRepository; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.innvo.repository.TestrecordRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334) ~[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1210) ~[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBean(AbstractAutowireCapableBeanFactory.java:302) ~[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
    at com.innvo.quartz.AutowiringSpringBeanJobFactory.createJobInstance(AutowiringSpringBeanJobFactory.java:22) ~[classes/:na] 
    at org.springframework.scheduling.quartz.AdaptableJobFactory.newJob(AdaptableJobFactory.java:41) ~[spring-context-support-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
    ... 2 common frames omitted 
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.innvo.repository.TestrecordRepository com.innvo.quartz.JobTwo.testrecordRepository; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.innvo.repository.TestrecordRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:561) ~[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) ~[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331) ~[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
    ... 6 common frames omitted 
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.innvo.repository.TestrecordRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1301) ~[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1047) ~[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:942) ~[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:533) ~[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
    ... 8 common frames omitted 
+1

您可以添加該類TestrecordRepository嗎?日誌清楚地表明它不能自動裝載它 –

回答

0

其明確表示,它在尋找尚未被包裹首先spring.The豆com.innvo.quartz.JobOne豆.testrecordRepository在哪裏定義?你確定它在包裝掃描?您想從應用程序上下文中獲取的bean名稱quartzSchedulerjobOne是否在任何地方定義? 此外,爲什麼您嘗試從應用程序上下文中獲取調度程序,並且您沒有將它自動裝入控制器?調度員必須是單身人士,他將負責開始一項新工作。

+0

quartzSchedulerjobOne在QuartzConfig中定義的一個bean這個bean在我部署和所有自動裝載bean工作時會自動調用,但我想通過控制器 –

+0

調用這個bean,當然,第一個認爲必須解決的是自動裝配com.innvo.quartz.JobOne.testrecordRepository類的問題。你能分享一下這個代碼嗎?或者你可以分享一下,這個類正在被使用嗎?你確定它被春天包裹了嗎? – AntJavaDev

+0

自動裝配工作與QuartzConfig類配置豆沒有probelm,我想知道爲什麼它不工作,當我嘗試通過控制器調用QuartzConfig豆 –