首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring boot - jsr352批处理实现-在jobxml中未获得引用的Beans

Spring boot - jsr352批处理实现-在jobxml中未获得引用的Beans
EN

Stack Overflow用户
提问于 2021-04-16 05:33:18
回答 1查看 96关注 0票数 0

我正在使用springboot 2.4.3 + jsr352实现一个批处理应用程序。这里定义了一个简单的batchlet类(Sleepybatchlet)。我正在尝试在JSL中引用它。但是,当使用joboperator启动作业时,它会失败,并显示classnotfound异常。

sleepy-batchlet.xml:

代码语言:javascript
复制
<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>

下面是我的batchlet类,它用@Named注解

@命名公共类SleepyBatchlet扩展了AbstractBatchlet{

代码语言:javascript
复制
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配置类中也定义了bean。

代码语言:javascript
复制
@Autowired
private SleepyBatchlet sleepyBatchlet;
@Bean
public Batchlet fooBatchlet() {
    return sleepyBatchlet;
}

但是由于某些原因,它并没有在JSL中被引用。有人能建议一下使用已经创建的bean需要做些什么吗?

EN

回答 1

Stack Overflow用户

发布于 2021-04-20 15:39:46

我正在尝试在

中引用它。但是,当使用joboperator启动作业时,它会失败,并显示classnotfound异常。

这是因为您引用的是类的名称,而不是它的完全限定名。

我在这里添加了示例springboot+jsr352应用程序。github.com/MekalaJ/demo

在您的示例中,您需要更新步骤定义,如下所示:

代码语言:javascript
复制
        <batchlet ref="com.example.demo.batch.SleepyBatchlet">
            <properties>
                <property name="sleep.time.seconds" value="#{jobParameters['sleep.time.seconds']}" />
            </properties>
        </batchlet>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67116307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档