定时器报 Scheduler注入错,求大神指导

weixin_46668875 2020-10-01 09:58:48
一、程序如下:
package com.runyi.dataprocessing.service.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.impl.matchers.GroupMatcher;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Service;
import com.runyi.common.pojo.RunyiResult;
import com.runyi.dataprocessing.common.TaskInfo;
import com.runyi.dataprocessing.service.DataprocessingService;
@Service
public class DataprocessingServiceImpl implements DataprocessingService{

@Autowired
private Scheduler scheduler;
@Override
public RunyiResult workJob(String dataprocessingchoice) {
//任务调度器
/**
* 开始处理
*/
if(dataprocessingchoice.equals("01.客户申请数据处理启动")) {
//判断系统是否已经有任务启动
//1.先获取任务信息
try {
List<TaskInfo> List_message=getAllJobsInfo();
//假如记录不为空,执行以下操作
TaskInfo set_data=new TaskInfo();
set_data.setJobName("");
if(List_message!=null&&List_message.size()>0) {
//(1)从获取数组中查找是否有jobName为"job1",jobGroup为"group1"的记录
for(int i=0;i<List_message.size();i++) {
TaskInfo data_list=List_message.get(i);//遍历记录
if(data_list.getJobName().equals("job1")&&data_list.getJobGroup().equals("group1")) {
set_data=List_message.get(i); //(2)假如找到job1和group1,则不重复启动客户申请数据处理
System.out.print("已经进入假设条件,查看set_data.getJobName:"+((TaskInfo) set_data).getJobGroup()+"\n");
}
}
}
//set_data初始赋值未变,则执行启动
if(!(set_data.getJobName().equals("job1"))) {
//假如记录为空,则启动客户申请数据处理
try {
openJob(scheduler);
//启动任务
scheduler.start();
} catch (SchedulerException e) {
e.printStackTrace();
}
}

//抛异常
} catch (Exception e) {
e.printStackTrace();
}//获取任务信息结束
}else if(dataprocessingchoice.equals("02.客户申请数据处理关闭")){
try {
String name="job1";
String group="group1";
deleteJob(name,group);
} catch (Exception e) {
e.printStackTrace();
}
}else if(dataprocessingchoice.equals("03.调整处理间融时间为1秒")) {
try {
String name="trigger1";
String group="triggergroup1";
String newTime="0/1 * * * * ?";
modifyJob(name, group, newTime);
} catch (Exception e) {
e.printStackTrace();
}
}else if(dataprocessingchoice.equals("04.调整处理间融时间为2秒")) {
try {
String name="trigger1";
String group="triggergroup1";
String newTime="0/2 * * * * ?";
modifyJob(name, group, newTime);
} catch (Exception e) {
e.printStackTrace();
}
}else if(dataprocessingchoice.equals("05.调整处理间融时间为3秒")) {
try {
String name="trigger1";
String group="triggergroup1";
String newTime="0/3 * * * * ?";
modifyJob(name, group, newTime);
} catch (Exception e) {
e.printStackTrace();
}
}else if(dataprocessingchoice.equals("06.调整处理间融时间为5秒")) {
try {
String name="trigger1";
String group="triggergroup1";
String newTime="0/5 * * * * ?";
modifyJob(name, group, newTime);
} catch (Exception e) {
e.printStackTrace();
}
}else if(dataprocessingchoice.equals("07.调整处理间融时间为7秒")) {
try {
String name="trigger1";
String group="triggergroup1";
String newTime="0/7 * * * * ?";
modifyJob(name, group, newTime);
} catch (Exception e) {
e.printStackTrace();
}
}else if(dataprocessingchoice.equals("08.调整处理间融时间为9秒")) {
try {
String name="trigger1";
String group="triggergroup1";
String newTime="0/9 * * * * ?";
modifyJob(name, group, newTime);
} catch (Exception e) {
e.printStackTrace();
}
}//客户申请数据处理关闭结束

return RunyiResult.ok();
}

/**
* 01.开启一个任务
* @param scheduler
*/
private void openJob(Scheduler scheduler){
try {
//1.创建一个JobDetail
JobDetail jobDetail = JobBuilder.newJob(Autoworkaplication.class).withIdentity("job1", "group1").build();
//2.触发器表达式对象
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0/3 * * * * ?");
//3.准备一个触发器对象
CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "triggergroup1")
.withSchedule(cronScheduleBuilder).build();
//4.开始调度
scheduler.scheduleJob(jobDetail,cronTrigger);
} catch (SchedulerException e) {
e.printStackTrace();
} finally {

}
}


/**
*一般容易忽略,向Spring容器中初始注入scheduler
*/
@Bean
public Scheduler scheduler() throws SchedulerException {
SchedulerFactory schedulerFactoryBean = new StdSchedulerFactory();
return schedulerFactoryBean.getScheduler();
}
}
二、报错:

严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataprocessingServiceImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.quartz.Scheduler com.runyi.dataprocessing.service.impl.DataprocessingServiceImpl.scheduler; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'scheduler' defined in com.runyi.dataprocessing.service.impl.DataprocessingServiceImpl: No matching factory method found: factory bean 'dataprocessingServiceImpl'; factory method 'scheduler()'. Check that a method with the specified name exists and that it is non-static.
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:446)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:328)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939)
at org.apache.catalina.c
...全文
708 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_46668875 2020-10-01
  • 打赏
  • 举报
回复
已经解决。在applicationContext-service.xml中添加<bean id ="scheduler" class ="org.springframework.scheduling.quartz.SchedulerFactoryBean"/>,并将 @Bean public Scheduler scheduler() throws SchedulerException { SchedulerFactory schedulerFactoryBean = new StdSchedulerFactory(); return schedulerFactoryBean.getScheduler(); }删除,启动正常,问题解决。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧