я получаю следующее исключение при запуске моего приложения Spring:org.springframework.beans.factory.NoSuchBeanDefinitionException: Нет Уникальный боб типа [org.quartz.JobDetail] определяется
org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of
type [org.quartz.JobDetail] is defined: expected single matching bean but found 2:
[quartzSchedulerRuntime, jobDetail]
Это часть, где я настроить кварц в root-context.xml
.
корень context.xml
<bean name="quartzSchedulerRuntime" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="com.task.QuartzScheduler" />
<property name="jobDataAsMap">
<map>
<entry key="runtimeReportServiceImpl" value-ref="RuntimeReportService" />
</map>
</property>
</bean>
<bean id="cronTriggerRuntime"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="quartzSchedulerRuntime" />
<property name="cronExpression" value="0 30 12 ? * MON *" />
</bean>
<bean id="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false">
<property name="schedulerContextAsMap">
<map>
<entry key="reportSchedulerServiceImpl" value-ref="reportSchedulerServiceImpl"></entry>
</map>
</property>
<property name="jobDetails">
<list>
<ref bean="quartzSchedulerRuntime" />
<ref bean="jobDetail"/>
</list>
</property>
<property name="triggers">
<list>
<ref bean="cronTriggerRuntime" />
<ref bean="jobTrigger"/>
</list>
</property>
</bean>
<bean id="jobDetailFactory"
class="org.springframework.beans.factory.config.ObjectFactoryCreatingFactoryBean">
<property name="targetBeanName">
<idref local="jobDetail" />
</property>
</bean>
<bean id="jobDetail" class="org.springframework.scheduling.quartz.JobDetailBean"
scope="prototype">
<property name="jobClass" value="com.scheduler.SMTPMailJob " />
<property name="jobDataAsMap">
<map>
<entry key="reportSchedulerServiceImpl" value-ref="reportSchedulerServiceImpl" />
<entry key="filterUtil" value-ref="filterUtil" />
<entry key="reportService" value-ref="reportService" />
<entry key="fusionChartHtmlToImage" value-ref="fusionChartHtmlToImage"/>
<entry key="fcproperties" value-ref="fcproperties"/>
</map>
</property>
</bean>
<bean id="jobTriggerFactory"
class="org.springframework.beans.factory.config.ObjectFactoryCreatingFactoryBean">
<property name="targetBeanName">
<idref local="jobTrigger" />
</property>
</bean>
<bean id="jobTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean" scope="prototype">
<property name="jobDetail" ref="jobDetail" />
<property name="cronExpression" value="0 0 9 1/1 * ? *" />
</bean>
EDIT: я сузил проблему к этому. Я создал класс под названием RScheduler, который должен планировать задания. В этом классе я заявил:
Scheduler scheduler;
ObjectFactory<JobDetail> jobDetailFactory;
ObjectFactory<CronTrigger> jobTriggerFactory;
@Autowired
public ReportScheduler(Scheduler scheduler,ObjectFactory<JobDetail> jobDetailFactory,ObjectFactory<CronTrigger> jobTriggerFactory)
throws SchedulerException
{
Assert.notNull(scheduler, "scheduler cannot be null");
Assert.notNull(jobDetailFactory, "jobDetailFactory cannot be null");
Assert.notNull(jobTriggerFactory, "jobTriggerFactory cannot be null");
this.scheduler = scheduler;
this.jobDetailFactory=jobDetailFactory;
this.jobTriggerFactory=jobTriggerFactory;
this.scheduler.getContext().put("reportSchedulerServ", reportSchedulerServ);
}
Я называю эту работу в другом методе, как:
JobDetail jobDetail = jobDetailFactory.getObject();
Это линия дает мне ошибку.
EDIT 2: Я предполагаю, что проблема в том, что мне требуется много заданий для запуска. Таким образом, я создал
ObjectFactory<JobDetail> jobDetailFactory
для захвата объектов через jobDetailFactory
боба. Я думаю, линия
JobDetail jobDetail = jobDetailFactory.getObject()
не в состоянии выяснить, какие JobDetail фасоль, чтобы получить, так как она имеет две детали работы. Я не понимаю, как нотация @Qualifier
поможет в определении этого. Любой конкретный способ, которым я могу разрешить эту ошибку ..?
Выполняете ли вы свои бобовые по «типу» в любом месте весеннего контекста? – prabugp
где указано определение 'jobDetail'. можете ли вы добавить это также к своему вопросу. –
Это предусмотрено в корневом контексте. – user2339071