gpt4 book ai didi

java - quartz与spring集成,空指针异常

转载 作者:行者123 更新时间:2023-12-01 04:44:26 26 4
gpt4 key购买 nike

我正在尝试将quartz与spring集成,文件位置从jsp页面传递到JobCSVfile类,但它没有获取该位置并显示空指针异常。我还想从 jsp 页面安排时间,但我不知道该怎么做,因为我在 applicationcontext.xml
中使用 trigurring 详细信息应用程序上下文.xml

<bean id="jobCSVfile"
class="com.vxl.appanalytix.dataload.quartz.JobCSVfile">

</bean>
<bean id="JobA" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="com.vxl.appanalytix.dataload.quartz.JobCSVfile" />
<property name="jobDataAsMap">
<map>
<entry key="timeout" value="5" />
</map>
</property>
</bean>
<bean id="cronTriggerJobA" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="JobA" />
<property name="cronExpression" value="0/5 * * * * ?" />
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="jobDetails">
<list>
<ref bean="JobA" />
</list>
</property>
<property name="triggers">
<list>
<ref bean="cronTriggerJobA" />

</list>
</property>
</bean>

如果不在applicationcontext.xml中进行调度,我们可以通过其他方式来做到这一点吗?

最佳答案

我可以告诉你我做了什么,我使用java而不是jsp(我不知道jsp)

首先我创建了我的工作界面:

public interface JobI {
void execute(Object[] args);
}

我需要为每个作业拥有相同的可执行方法

然后创建作业并将其 bean 化

public class SimpleJob implements JobI {
@Override
public void execute(Object[] args) {
for (Object o : args) {
// String[] array = o.toString().split("=");
System.out.println(o.toString());
}
}
}

//上下文文件

<bean id="simpleJob" class="uk.co.utel.tcds.system.schedule.jobs.SimpleJob" />

现在只需创建一个类,您将在其中添加新作业,即 JobController

   public JobController{
private final StdScheduler scheduler;

public JobController(StdScheduler scheduler){
this.scheduler=scheduler;
}

public void addJob(String cronExpr){
CronTrigger trigger = new CronTrigger("name","group");
trigger.setCronExpression(cronExpr));
scheduler.scheduleJob(getJobDetails(), trigger);
}

public JobDetails getJobDetails(){
final JobI jobBean = (JobI) applicationContext.getBean("SimpleJob");
final MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean();
jobDetail.setTargetObject(jobBean);
jobDetail.setTargetMethod("execute");
jobDetail.setName("name");
jobDetail.setGroup("group");
return (JobDetail) jobDetail.getObject();
}
}

//上下文文件

  <bean id="jobController" class="JobController">
<constructor-arg name="scheduler" ref="scheduler" />
</bean>

您所需要的只是将 id 添加到调度程序

<bean id="scheduler"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
.....
</bean>

现在,当您想将其与 jsp 一起使用时,您只需将 jobController bean 传递给脚本并调用 addJob 方法即可

对了,我差点忘了,在不同版本的quartz中创建JobDetailTrigger对象的方式可能不同

关于java - quartz与spring集成,空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16079549/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com