簡體   English   中英

Spring 啟動 - jsr352 批量實現 - bean 在 jobxml 中沒有得到引用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM