Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring-Step调度_Java_Spring_Spring Batch_Spring Xd - Fatal编程技术网

Java Spring-Step调度

Java Spring-Step调度,java,spring,spring-batch,spring-xd,Java,Spring,Spring Batch,Spring Xd,我试图在Spring批处理作业中安排步骤。我试着用它。但当我试图在SpringXd上部署作业时,它失败了。下面是我面临的代码和错误 <batch:job id="addB" restartable="false"> <batch:step id="AddB" > <tasklet ref="addBTasklet" /> </batch:step> </batch:job> <task:scheduler id=

我试图在Spring批处理作业中安排步骤。我试着用它。但当我试图在SpringXd上部署作业时,它失败了。下面是我面临的代码和错误

<batch:job id="addB" restartable="false">
<batch:step id="AddB" >
        <tasklet ref="addBTasklet" />
</batch:step>
</batch:job>

<task:scheduler id="taskScheduler" pool-size="1"/>
        <task:scheduled-tasks scheduler="taskScheduler">        
        <task:scheduled ref="AddB" method="execute" cron="*/5 * * * * ?"/>
 </task:scheduled-tasks>

您需要添加一个实现启动作业所需逻辑的类,然后让调度器调用该类中的方法。新课程内容:

package mypackage;

import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.JobParametersBuilder;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

import java.util.UUID;

@Service
public class TriggerScheduledJob {

    @Autowired
    private JobLauncher jobLauncher;

    @Autowired
    @Qualifier("addB")
    private Job addBJob;

    @Autowired
    @Qualifier("addC")
    private Job addCJob;

    public void triggerAddB() {
        JobParameters param = new JobParametersBuilder().addString("id", UUID.randomUUID().toString()).toJobParameters();
        try {
            JobExecution execution = jobLauncher.run(addBJob, param);
            System.out.println("Job executed with exit status = " + execution.getStatus());
        } catch (Exception e) {
            System.out.println("Failed to execute job. " + e.getMessage());
        }
    }

    public void triggerAddC() {
        JobParameters param = new JobParametersBuilder().addString("id", UUID.randomUUID().toString()).toJobParameters();
        try {
            JobExecution execution = jobLauncher.run(addCJob, param);
            System.out.println("Job addC executed with exit status = " + execution.getStatus());
        } catch (Exception e) {
            System.out.println("Failed to execute job. " + e.getMessage());
        }
    }
}
然后调整Spring应用程序上下文,使其创建这个新bean,并修改调度器以调用该bean的相关方法来触发您想要启动的实际作业:

<batch:job id="addB" restartable="false">
    <batch:step id="AddB" >
        <tasklet ref="addBTasklet" />
    </batch:step>
</batch:job>

<batch:job id="addC" restartable="false">
    <batch:step id="AddC" >
        <tasklet ref="addCTasklet" />
    </batch:step>
</batch:job>

<bean id="triggerScheduledJob" class="mypackage.TriggerScheduledJob" />

<task:scheduler id="taskScheduler" pool-size="1"/>
<task:scheduled-tasks scheduler="taskScheduler">        
    <task:scheduled ref="triggerScheduledJob" method="triggerAddB" cron="*/5 * * * * ?"/>
</task:scheduled-tasks>
<task:scheduled-tasks scheduler="taskScheduler">        
    <task:scheduled ref="triggerScheduledJob" method="triggerAddC" cron="*/5 * * * * ?"/>
</task:scheduled-tasks>


希望它能给您带来帮助。

如果我们有两个步骤“addB”和“addC”,并且都必须安排使用不同的cron表达式运行。或者简单地说,我有BeanA、BeanB、BeanC、BeanD,并且每个步骤都必须安排在特定的时间。您好。我扩展了答案,以包括一种情况,即使用两个不同的cron表达式触发两个不同的作业。希望有帮助。非常感谢你,这很有帮助。我有没有办法在两个作业之间建立依赖关系。如果第一个作业完成,第二个作业应该执行,如果失败,我们将退出。此外,如果我的第一个作业计划在8执行,第二个作业在11执行。如果第一个作业在8时成功,则第二个作业应在11时运行。
<batch:job id="addB" restartable="false">
    <batch:step id="AddB" >
        <tasklet ref="addBTasklet" />
    </batch:step>
</batch:job>

<batch:job id="addC" restartable="false">
    <batch:step id="AddC" >
        <tasklet ref="addCTasklet" />
    </batch:step>
</batch:job>

<bean id="triggerScheduledJob" class="mypackage.TriggerScheduledJob" />

<task:scheduler id="taskScheduler" pool-size="1"/>
<task:scheduled-tasks scheduler="taskScheduler">        
    <task:scheduled ref="triggerScheduledJob" method="triggerAddB" cron="*/5 * * * * ?"/>
</task:scheduled-tasks>
<task:scheduled-tasks scheduler="taskScheduler">        
    <task:scheduled ref="triggerScheduledJob" method="triggerAddC" cron="*/5 * * * * ?"/>
</task:scheduled-tasks>