Nano Hash - криптовалюты, майнинг, программирование

Получение выраженного исключения неудовлетворенной зависимости в планировщике кварца + Spring

Я пытаюсь создать bean-компоненты во время выполнения, используя аннотации @Configuration и @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;
        }
    }

Есть идеи?


Ответы:


1

Проблема в том, что вы не можете сделать это:

        @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;
        }

Если вы сделаете это, Spring попытается автоматически связать triggerName и myGroup из контекста приложения, поэтому вы просто удалите аннотацию @Bean, все должно быть в порядке.

ОБНОВЛЕНИЕ

Попробуй это:

    @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;
        }
20.06.2016
  • если я это сделаю, то я получаю следующее исключение org.springframework.beans.factory.BeanCreationException: Ошибка создания bean-компонента с именем «schedulerFactoryBean», определенным в ресурсе пути к классу [com/hello/QuartzConfiguration.class]: не удалось вызвать метод инициализации; вложенным исключением является org.quartz.SchedulerException: регистрация заданий и триггеров не удалась: null [см. вложенное исключение: java.lang.NullPointerException] в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578) ~ [весенние бобы-4.2.6.RELEASE.jar:4.2.6. 21.06.2016
  • Спасибо за обновление. Я уже делаю планировщик таким образом. Проблема возникает, когда мне нужно установить параметры triggerName, groupName и schulerTime. 21.06.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..