javaspring-cronExpression,使用@Configuration&@豆子
我正在开发web.xml应用程序。我在javaspring-cronExpression,使用@Configuration&@豆子,java,xml,spring,javabeans,cronexpression,Java,Xml,Spring,Javabeans,Cronexpression,我正在开发web.xml应用程序。我在SchedulerConfig.java文件中创建了各种bean,而不是在applicationContext.xml中编写 web.xml: <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation=
SchedulerConfig.java
文件中创建了各种bean,而不是在applicationContext.xml
中编写
web.xml:
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>Honorius Batch Application</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
<!--SchedulerFactoryBean glues together jobDetails and triggers to Configure Quartz Scheduler-->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="applicationContextSchedulerContextKey" value="applicationContext"/>
<property name="overwriteExistingJobs" value="true"/>
<property name="jobDetails">
<list>
<ref bean="jobDetailFactoryId"/>
</list>
</property>
<property name="triggers">
<list>
<ref bean="triggerConfigId"/>
</list>
</property>
</bean>
这些bean是在这里创建的<代码>SchedulerConfig.java:
@Configuration
public class SchedulerConfig extends CronTriggerFactoryBean {
public Scheduler scheduler;
@Bean (name = "triggerConfigId")
public CronTriggerFactoryBean triggerConfig(){
CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerScheduler();
try {
scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
} catch (SchedulerException e) {
e.printStackTrace();
}
cronTriggerFactoryBean.setCronExpression("0/1 * * * * ?");
cronTriggerFactoryBean.setGroup("DailyJobsTriggers");
cronTriggerFactoryBean.setJobDetail(jobConfig().getObject());
try {
scheduler.scheduleJob(jobConfig().getObject(),triggerConfig().getObject());
} catch (SchedulerException e) {
e.printStackTrace();
}
return cronTriggerFactoryBean;
}
@Bean (name = "jobDetailFactoryId")
public JobDetailFactoryBean jobConfig(){
JobDetailFactoryBean jobDetailFactoryBean = new JobDetailFactoryBean();
jobDetailFactoryBean.setJobClass(com.honorius.job.CurrencyAddJob.class);
jobDetailFactoryBean.setGroup("dailyJobs");
jobDetailFactoryBean.setDurability(true);
jobDetailFactoryBean.setRequestsRecovery(true);
return jobDetailFactoryBean;
}
}
通过web.xml运行应用程序并运行Tomcat服务器后,出现以下错误:
org.springframework.beans.factory.BeanCreationException: Error
creating bean with name
'org.springframework.scheduling.quartz.SchedulerFactoryBean#0' defined
in class path resource [applicationContext.xml]: Cannot resolve
reference to bean 'jobDetailFactoryId' while setting bean property
'jobDetails' with key [0]; nested exception is
org.springframework.beans.factory.NoSuchBeanDefinitionException: No
bean named 'jobDetailFactoryId' is defined at
org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:359)
at ... ... at java.lang.Thread.run(Thread.java:745) Caused by:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No
bean named 'jobDetailFactoryId' is defined at ...
有办法解决吗?如何加载bean并正确运行应用程序?xml中的bean配置似乎失败了,因为它无法通过@configuration创建bean。可能有多种原因,@配置不工作。注释配置打开了吗?由于@Configuration与xml-config解耦,因此它是独立调用的,在此之前会调用xml-config,并且找不到所需的bean。@RahulKumar处于启用状态,同时@Configuration的依赖项也添加到pom.xml中。但错误依然存在