当前位置: 首页 > 知识库问答 >
问题:

启动Spring批处理作业时将对象作为参数传递

赏高格
2023-03-14

我的服务是开始Spring批工作。我希望能够传递一些对象给作业,每次这个对象参数都会不同。这个对象我需要在我的任务中使用。我开始工作的JobLauncher。据我谷歌,我看到JobParameters不会帮助我在这种情况下。此外,我发现很多答案是使用JobExecttionContext或任何东西。但是我想在作业开始前注入参数对象。它是可拥有的吗?

开始工作的服务

@Service
public class MyServiceImpl implements MyService {
    @Autowired
    private JobLauncher jobLauncher;
    @Autowired
    private Job myJob;

    @Override
    public MyResponse startJob(InputParameter inputObject) {
        try {
            //Here I want to pass somehow inputObject ot JobExecution
            jobLauncher.run(myJob, new JobParameters());
        } catch (Exception e) {
            return new MyResponse("FAILED")
        }
        return new MyResponse("OK");
    }
}

我的小任务

@Component
@Scope("step")
public class MyTasklet implements Tasklet{

    @Override
    public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
        InputParameter inputObject = chunkContext.getStepContext().getJobExecutionContext().get("inputObject");
        //... the main logic
        return RepeatStatus.FINISHED;
    }
}

共有2个答案

谭志用
2023-03-14

下面是我传递参数给工作的方法:

JobParametersBuilder builder = new JobParametersBuilder();
builder.addString("fileName", fileName);
builder.addLong("time", System.currentTimeMillis());
String jobParam = request.getParameter("job");
jobLauncher.run(myJob, builder.toJobParameters());
谢典
2023-03-14

使用下面的类发送CustomObject。

public static class CustomJobParameter<T extends Serializable> extends JobParameter {
        private T customParam;
        public CustomJobParameter(T customParam){
            super("");
            this.customParam = customParam;
        }
        public T getValue(){
            return customParam;
        }
    }

===========================

用法:

发送参数:

JobParameters paramJobParameters = new JobParametersBuilder().addParameter("customparam", new CustomJobParameter(myClassReference)).toJobParameters();

正在检索参数:

MyClass myclass = (MyClass)jobExecution.getJobParameters().getParameters().get("customparam").getValue();
 类似资料:
  • 我们正在实施Spring批量作业, 我们需要将作业参数从Client/MASTER传递给SLAVE。CLIENT/MASTER是我们的作业和分区代码所在的位置。我们使用传递JOB参数的J Unit调用JOB。 SLAVE是定义所有步骤及其实现(读取器Writer和处理器)的地方。 我们能够以独立的方式实现这一点,但不能与客户一起实现 我们正在使用Weblogic和Spring集成以及JMS来实现同

  • 我有一个spring批处理作业,从CSV文件读取并写入数据库。我想让它重新启动。例如,如果在读取文件或写入db时出现异常,导致作业失败,则应从失败的同一点/块重新开始,而不是从头开始读取整个文件。 我正在从一个endpoint触发作业启动器,并在我的控制器中配置了它。 目前,我正在通过控制器将参数(这是一个唯一的标识符/数字)传递给作业参数,以运行新的作业实例。如果作业失败,我将使用与GET请求中

  • 我需要从远程SFTP服务器下载一个文件,并使用spring batch处理它们。我已经实现了使用Spring集成下载文件的代码。但我无法从Spring集成组件启动Spring批处理作业。我有以下代码: 但这不起作用(上一个方法中的错误),因为找不到文件类型的bean。我不能把这两部分连在一起。如何连接集成和批处理?

  • 我得和Spring批处理问题。都与通过命令行传入的JobParameters有关。 第一期: 为了从JobParameters获取路径,我使用BeforeStep注释加载JobParameters并将它们复制到局部变量上。不幸的是,这不起作用。变量将为并且执行失败,因为文件无法打开。 如何访问读取器中的作业参数?我想将文件路径作为命令行参数传入,然后读取这个文件。

  • 是否可以配置Spring批处理管理员来启动主作业和从作业。我们有一个进程作为主节点和3-4个从节点。 Spring batch admin在单独的JVM进程中运行,但所有Spring批处理作业都使用相同的批处理数据库模式。