나는 다음과 같은 예외가 정의된다 org.quartz.JobDetail] 유형의 없음 고유의 콩 :org.springframework.beans.factory.NoSuchBeanDefinitionException : 내 봄 응용 프로그램을 실행할 때
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>
편집 : 나는이에 문제를 좁혀왔다. 나는 작업을 스케쥴하기로되어있는 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 : 나는 많은 문제가 발생해야한다는 것을 짐작하고있다. 그래서 jobDetailFactory
빈을 통해 개체를 캡처
ObjectFactory<JobDetail> jobDetailFactory
을 만들었습니다. 나는이 개 작업의 세부 사항을 가지고 있기 때문에
JobDetail jobDetail = jobDetailFactory.getObject()
이 얻을 수있는 JobDetail에 콩 알아낼 수없는 선을, 생각한다. 나는 그 결정에 @Qualifier
표기법이 어떻게 도움이 될지 이해하지 못한다. 이 오류를 해결할 수있는 모든 특정 방법 ..?
전체 스프링 컨텍스트의 아무 곳에서나 '입력'하여 콩을 autowiring하고 있습니까? – prabugp
여기서'jobDetail' 빈 정의가 있습니다. 질문에 추가 할 수 있습니까? –
루트 컨텍스트에서 제공됩니다. – user2339071