![](/img/trans.png)
[英]Spring batch CompositeWriter Equivalent in Java EE jsr352
[英]Spring boot - jsr352 batch implementation - Beans not getting reference in jobxml
我正在使用 springboot 2.4.3 + jsr352 實現一個批處理應用程序。 定義了一個簡單的批處理類(sleepybatchlet)。 我試圖在 JSL 中引用它。 但是當使用 joboperator 啟動作業時,它沒有說 classnotfound 異常。
困-batchlet.xml:
<job xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/jobXML_1_0.xsd" restartable="true" version="1.0" id="sleepy-batchlet">
<step id="step1">
<batchlet ref="sleepyBatchlet">
<properties>
<property name="sleep.time.seconds" value="#{jobParameters['sleep.time.seconds']}" />
</properties>
</batchlet>
</step>
</job>
下面是我的批處理 class 用 @Named 注釋
@Named public class SleepyBatchlet 擴展 AbstractBatchlet{
private final static Logger logger = Logger.getLogger(SleepyBatchlet.class.getName());
private Map<ReportMetaData,byte[]> pdfMetadataMap;
/**
* Logging helper.
*/
protected static void log(String method, Object msg) {
System.out.println("SleepyBatchlet: " + method + ": " + msg);
// logger.info("SleepyBatchlet: " + method + ": " + String.valueOf(msg));
}
/**
* This flag gets set if the batchlet is stopped. This will break the batchlet
* out of its sleepy loop.
*/
private volatile boolean stopRequested = false;
/**
* The total sleep time, in seconds.
*/
@Inject
@BatchProperty(name = "sleep.time.seconds")
String sleepTimeSecondsProperty;
private int sleepTime_s = 3;
@Inject
private JschFileUtil jschFileUtil;
@Override
public String process() throws Exception {
log("process", "entry");
System.out.println("Test");
return "exitStatus";
}
/**
* Called if the batchlet is stopped by the container.
*/
@Override
public void stop() throws Exception {
log("stop:", "");
stopRequested = true;
}
}
在 java 配置 class 中定義了 bean。
@Autowired
private SleepyBatchlet sleepyBatchlet;
@Bean
public Batchlet fooBatchlet() {
return sleepyBatchlet;
}
但由於某種原因,它沒有在 JSL 中被引用。 有人可以建議使用已經創建的bean需要做什么嗎?
我試圖在 JSL 中引用它。 但是當使用 joboperator 啟動作業時,它沒有說 classnotfound 異常。
這是因為您指的是 class 的名稱,而不是其完全限定名稱。
我在這里添加了示例 springboot+jsr352 應用程序。 github.com/MekalaJ/demo
在您的示例中,您需要按如下方式更新步驟定義:
<batchlet ref="com.example.demo.batch.SleepyBatchlet">
<properties>
<property name="sleep.time.seconds" value="#{jobParameters['sleep.time.seconds']}" />
</properties>
</batchlet>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.