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

在Spring批处理中不可能将作业参数传递给step作用域bean

邓韬
2023-03-14

我正在使用Spring batch编写一个批处理,并试图将一个作业参数传递给item reader bean定义,但是当我执行该批处理时,我总是得到以下错误:

org.springframework.expression.spel.SpelEvaluationException: EL1027E:(pos 13): Indexing into type 'org.springframework.batch.core.JobParameters' is not supported
/**
 * Job producing an XML file aimed at synchronizing Appipay data with ForHRM data
 *
 * @author francois.dupire
 */
@Configuration
@Import(BatchConfiguration.class)
@ComponentScan(basePackageClasses = BusinessObjectServiceImpl.class)
public class ForHRMToAppipayDescriptiveDataSyncJobConfiguration {

    /*
     * Constants
     */
    public static final String JOB_NAME = "forHRMToAppipaySyncJob";
    private static final String FORHRM_TO_APPIPAY_SYNC_STEP = "forHRMToAppipaySyncStep";

    private static final int CHUNK_SIZE = 10;

    /*
     * Fields
     */
    private final JobBuilderFactory jobBuilderFactory;
    private final StepBuilderFactory stepBuilderFactory;

    /*
     * Constructors
     */
    @Autowired
    public ForHRMToAppipayDescriptiveDataSyncJobConfiguration(JobBuilderFactory jobBuilderFactory, StepBuilderFactory stepBuilderFactory) {
        this.jobBuilderFactory = jobBuilderFactory;
        this.stepBuilderFactory = stepBuilderFactory;
    }

    /*
     * Job
     */
    @Bean
    public Job forHRMToAppipaySyncJob(Step forHRMToAppipaySyncStep) {
        return jobBuilderFactory
                .get(JOB_NAME)
                .start(forHRMToAppipaySyncStep)
                .build();
        // TODO Add parameters validator
    }

    /*
     * Steps
     */
    // Sync step
    @Bean
    public Step forHRMToAppipaySyncStep(AppipaySyncTriggersReader reader, AppipaySyncTriggersToAppipayDescriptiveDataProcessor processor, AppipayDescriptiveDataWriter writer) {
        return stepBuilderFactory
                .get(FORHRM_TO_APPIPAY_SYNC_STEP)
                .<List<SynchronisationAppipay>, Signaletiques>chunk(CHUNK_SIZE)
                .reader(reader)
                .processor(processor)
                .writer(writer)
                .build();
    }

    @Bean
    @StepScope
    public AppipaySyncTriggersReader appipaySyncTriggersReader(@Value("#{jobParameters['EMPCODE']}") String employerCode, SynchronisationAppipayRepository appipaySyncTriggerRepository) {
        return new AppipaySyncTriggersReader(employerCode, CHUNK_SIZE, appipaySyncTriggerRepository);
    }
Invalid property 'EMPCODE' of bean class [org.springframework.batch.core.scope.context.StepContext]: Bean property 'EMPCODE' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?

我只是不知道我做错了什么,因为根据我在网上发现的文档和其他帖子,一切似乎都很好。

编辑:我使用的是Spring 4.3.3和Spring Batch 3.0.7

共有1个答案

廖琪
2023-03-14

我得到了我问题的答案。

在我导入到配置中的BatchConfiguration中,有一个jobParameters bean,它优先于传递给作业的参数。所以我的论点在这篇文章中找不到。我把它拿走了,它解决了我的问题。

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

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

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

  • 问题内容: 我是cron工作的新手,不确定是否会奏效。 为了安全起见,我考虑过制作一个一页脚本,该脚本查找某些GET值(用户名,密码和安全代码),以确保只有计算机和知道这3种信息的人才能运行该命令。 我制作了脚本,并且可以在浏览器中运行该脚本,但是可以使用GET值运行cron作业吗? 一个例子就是我跑步 这可能吗? 问题答案: 仅当通过Web服务器调用脚本时,&关联数组才被初始化。通过命令行调用时

  • 在表中,默认情况下传递和作业参数。当我使用REST endpoint launcher方法触发作业时,我没有看到这些参数在默认情况下被传递。 并且在每个作业运行中传递这两个参数的相同值。和。正如所料,它给出了以下异常。 我的问题是: 当我使用命令行触发作业时,为什么默认情况下传递此和作业参数? ,为什么每次运行作业时传递的两个参数的值都是一样的?即使我正在使用 方法是如何创建差异的?

  • 我正在使用Spring batch进行批处理,在进行批处理之前,我想验证所有作业参数,如productName、productID、开始日期、结束日期、productType,如果这些作业参数为null或包含错误值,我必须使验证步骤失败,并使作业失败。 我已经编写了验证步骤和Tasklet,在我的Tasklet中,我计划处理作业参数验证(对所有作业参数执行空检查)。因为我是第一次做Spring批处