java - 多个作业中的 Spring Batch 相同的步骤名称?

标签 java spring spring-batch jobs

我对使用 spring-batch 2.1.8.RELEASE 的 Spring Batch 命名约定感到很困惑。

主要问题:

2 个不同的作业,但内部步骤相同(将获得不同的属性),名称不是唯一的。如果我尝试运行其中一项工作,例如 job1。然后它获得 prop2 的值“file2”,即使它是为 job2 定义的。 (只是一个抽象示例,没有太多关于 stepamount、监听器等的细节。)无法找出该过程的任何规律或原因。

<batch:job id="job1" parent="parentJob">
    <batch:step id="copyFile">
        <batch:tasklet>
            <bean class="xxx.xyz.classXXX"
                scope="step">
                <property name="prop1"
                    value="file1" />
            </bean>
        </batch:tasklet>
    </batch:step>
</batch>

每个作业都在自己的文件中定义。

<batch:job id="job2" parent="parentJob">
    <batch:step id="copyFile">
        <batch:tasklet>
            <bean class="xxx.xyz.classXXX"
                scope="step">
                <property name="prop2"
                    value="file2" />
            </bean>
        </batch:tasklet>
    </batch:step>
</batch>

我们有大约 80 个作业 - 每个作业都有 copyFile 作为第一步。但是每个工作中间也有步骤,应该同样命名。有没有可能避免那些注入(inject)困惑/失败?除了“copyFile1”、“copyFile2”等命名步骤之外......

(名称和属性不过是烟雾和镜子!)

您需要更多信息吗?希望我的解释不会太糟糕。提前致谢!

干杯最大。

最佳答案

显然步骤 id 在 spring 批处理中是全局的(今天检查过)。它们在创建上下文时被加载到 map 中,并且由于它们具有相同的 ID,因此读取的步骤作为最后一次获胜。

此功能的解决方法:使用不同的步骤 ID,例如使用等于 batch:job id 的前缀,如下所示:

<batch:job id="job1" parent="parentJob">
  <batch:step id="job1_copyFile">
    <batch:tasklet>
      <bean class="xxx.xyz.classXXX" scope="step">
        <property name="prop1" value="file1" />
      </bean>
    </batch:tasklet>
  </batch:step>
</batch>

<batch:job id="job2" parent="parentJob">
  <batch:step id="job2_copyFile">
    <batch:tasklet>
      <bean class="xxx.xyz.classXXX" scope="step">
        <property name="prop2" value="file2" />
      </bean>
    </batch:tasklet>
  </batch:step>
</batch>

关于java - 多个作业中的 Spring Batch 相同的步骤名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11153108/

相关文章:

java - 使用 Java 中的正则表达式确定输入字符串是否与时钟时间匹配

java - 如何在 JMeter 中提取正则表达式以用于以下内容?

java - Spring Batch - 无法解析格式正确的日期

java - Spring MVC 3 - 将参数绑定(bind)到支持对象

java - 无法将 Spring Batch MongoItemReader 上的属性的 Query 类型的值转换为所需类型 'java.lang.String'

java - Spring Batch - JdbcCursorItemReader 使用大型 MySQL 表抛出 OutOfMemoryError

java - 编写一个基于多个字段排序的比较器

java - JSON 序列化时 jsonrpc4j null

java - 外键也是主键的实体的Spring Data Repository

java - Spring Batch+Boot 和 : [org/springframework/web/WebApplicationInitializer. 类]无法打开,因为它不存在