2016-06-20 2 views
0

実行時に@Beanの@Configurationアノテーションと@Beanアノテーションを使用してBeanを作成しようとしています。このアプローチを使用する理由は、データベースおよびスケジューラからのタスクのリストは、すべてのタスクのジョブを作成します。しかし、いくつかの理由のために、私は次の例外を取得していたときにクォーツ+スプリングスケジューラで未定義の依存関係が表示される

例外:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'cronTriggerFactoryBean' defined in class path resource [com/hello/QuartzConfiguration.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [java.lang.String]: No qualifying bean of type [java.lang.String] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [java.lang.String] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {} 
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749) ~[spring-beans-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:464) ~[spring-beans-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1123) ~[spring-beans-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1018) ~[spring-beans-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510) ~[spring-beans-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) ~[spring-beans-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:753) ~[spring-beans-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839) ~[spring-context-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538) ~[spring-context-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) ~[spring-boot-1.3.5.RELEASE.jar:1.3.5.RELEASE] 
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:766) [spring-boot-1.3.5.RELEASE.jar:1.3.5.RELEASE] 
    at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:361) [spring-boot-1.3.5.RELEASE.jar:1.3.5.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) [spring-boot-1.3.5.RELEASE.jar:1.3.5.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1191) [spring-boot-1.3.5.RELEASE.jar:1.3.5.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1180) [spring-boot-1.3.5.RELEASE.jar:1.3.5.RELEASE] 
    at com.hello.MainClass.main(MainClass.java:14) [classes/:na] 
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [java.lang.String] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {} 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1373) ~[spring-beans-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1119) ~[spring-beans-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014) ~[spring-beans-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:813) ~[spring-beans-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741) ~[spring-beans-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    ... 19 common frames omitted 

コード

@Configuration 
    @ComponentScan("com.hello") 
    public class QuartzConfiguration { 


     @Autowired 
     private ApplicationContext applicationContext; 

     @Bean 
     public SpringBeanJobFactory springBeanJobFactory() { 
      AutowiringSpringBeanJobFactory jobFactory = new AutowiringSpringBeanJobFactory(); 

      jobFactory.setApplicationContext(applicationContext); 
      return jobFactory; 
     } 


     @Bean 
     public JobDetailFactoryBean jobDetailFactoryBean(){ 
      JobDetailFactoryBean factory = new JobDetailFactoryBean(); 
      factory.setJobClass(SampleJob.class); 
      Map<String,Object> map = new HashMap<String,Object>(); 
      map.put("name", "RAM"); 
      map.put(MyJobTwo.COUNT, 1); 
      factory.setJobDataAsMap(map); 
      factory.setGroup("mygroup"); 
      factory.setName("myjob"); 
      return factory; 
     } 
     @Bean 
     public CronTriggerFactoryBean cronTriggerFactoryBean(String triggerName, String myGroup){ 
      CronTriggerFactoryBean stFactory = new CronTriggerFactoryBean(); 
      stFactory.setJobDetail(jobDetailFactoryBean().getObject()); 
      stFactory.setStartDelay(3000); 
      stFactory.setName(triggerName); 
      stFactory.setGroup(myGroup); 

      stFactory.setCronExpression("0/10 * * * * ?"); //0/10 * * * * ? 
      return stFactory; 
     } 


     @Bean 
     public SchedulerFactoryBean schedulerFactoryBean() { 
      SchedulerFactoryBean scheduler = new SchedulerFactoryBean(); 
      scheduler.setJobFactory(springBeanJobFactory()); 
      scheduler.setTriggers(cronTriggerFactoryBean("triggerName","MyGroup").getObject()); 
      return scheduler; 
     } 
    } 

任意のアイデア?

答えて

0

問題は、あなたがこれを行うことはできませんです。

 @Bean 
     public CronTriggerFactoryBean cronTriggerFactoryBean(String triggerName, String myGroup){ 
      CronTriggerFactoryBean stFactory = new CronTriggerFactoryBean(); 
      stFactory.setJobDetail(jobDetailFactoryBean().getObject()); 
      stFactory.setStartDelay(3000); 
      stFactory.setName(triggerName); 
      stFactory.setGroup(myGroup); 

      stFactory.setCronExpression("0/10 * * * * ?"); //0/10 * * * * ? 
      return stFactory; 
     } 

あなたがこれを行う場合は、すべてが正常である必要があり、春にはアプリケーションコンテキストからtriggerNamemyGroupをautowireしようとしますので、あなただけの@Bean注釈を削除します。

UPDATE

このお試しください:私は、私は次の例外 org.springframework.beans.factory.BeanCreationException取得しなければ

@Bean 
    public CronTriggerFactoryBean cronTriggerFactoryBean(){ 
     CronTriggerFactoryBean stFactory = new CronTriggerFactoryBean(); 
     stFactory.setJobDetail(jobDetailFactoryBean().getObject()); 
     stFactory.setStartDelay(3000); 
     stFactory.setName("triggerName"); 
     stFactory.setGroup("myGroup"); 

     stFactory.setCronExpression("0/10 * * * * ?"); //0/10 * * * * ? 
     return stFactory; 
    } 

     @Bean 
     public SchedulerFactoryBean schedulerFactoryBean() { 
      SchedulerFactoryBean scheduler = new SchedulerFactoryBean(); 
      scheduler.setJobFactory(springBeanJobFactory()); 
      scheduler.setTriggers(cronTriggerFactoryBean().getObject()); 
      return scheduler; 
     } 
+0

を:エラーは、名前のBeanを作成する 'をschedulerFactoryBean'クラスパスのリソースで定義されています[com/hello/QuartzConfiguration.class]:initメソッドの呼び出しに失敗しました。ネストされた例外はorg.quartz.SchedulerExceptionです:ジョブとトリガーの登録が失敗しました:null [ネストされた例外を参照:java.lang.NullPointerException] \t at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578 )〜[spring-beans-4.2.6.RELEASE.jar:4.2.6。 – user1030128

+0

@ user1030128、OK、あなたの問題を参照してください、私は答えを更新します.. – Jaiwo99

+0

ありがとうございました。私はすでにこの方法でスケジューラを作成しています。問題は、私がtriggerName、groupNameとschulerTimeのthourghパラメータを設定する必要があるときに来る。 – user1030128

関連する問題