JSR-352/Java Batch能否将List<String>作为BatchProperty?如何配置?
JSR-352/Java Batch 注入List类型BatchProperty的支持与配置方法
JSR-352(Jakarta Batch)规范支持将List
方式1:逗号分隔字符串赋值
在<property>标签的value属性中填入逗号分隔的字符串,Batch容器会自动将其解析为List<String>:
修改后的XML示例
<?xml version="1.0" encoding="UTF-8"?> <job xmlns="https://jakarta.ee/xml/ns/jakartaee" version="2.0" id="exportToExcel" restartable="true"> <chunk item-count="10"> <!-- ...some reader... --> <processor ref="MyItemProcessor"> <properties> <property name="items" value="item1,item2,item3"/> </properties> </processor> <!-- ...some writer... --> </chunk> </job>
方式2:重复定义同名标签
多次使用同名的<property>标签,Batch容器会将所有同名属性的值自动收集为一个List<String>:
修改后的XML示例
<?xml version="1.0" encoding="UTF-8"?> <job xmlns="https://jakarta.ee/xml/ns/jakartaee" version="2.0" id="exportToExcel" restartable="true"> <chunk item-count="10"> <!-- ...some reader... --> <processor ref="MyItemProcessor"> <properties> <property name="items" value="item1"/> <property name="items" value="item2"/> <property name="items" value="item3"/> </properties> </processor> <!-- ...some writer... --> </chunk> </job>
代码验证
你的Java注入代码无需修改,保持原有写法即可直接使用:
public class MyItemProcessor extends ItemProcessor { @Inject @BatchProperty private List<String> items; public final Object processItem(Object o) throws Exception { // 直接使用items列表,例如遍历处理 for (String item : items) { // ...业务逻辑... } return o; } }
补充说明
- 部分Batch实现支持两种方式混合使用,但为了跨容器兼容性,建议统一采用一种配置方式。
- 若需要自定义分隔符(非逗号),部分厂商提供了扩展支持,但这不属于JSR-352规范的标准内容。
内容的提问来源于stack exchange,提问作者queeg
相关产品推荐
相关产品推荐

