我正在使用springboot 2.4.3 + jsr352实现一个批处理应用程序。这里定义了一个简单的batchlet类(Sleepybatchlet)。我正在尝试在JSL中引用它。但是,当使用joboperator启动作业时,它会失败,并显示classnotfound异常。
sleepy-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>下面是我的batchlet类,它用@Named注解
@命名公共类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配置类中也定义了bean。
@Autowired
private SleepyBatchlet sleepyBatchlet;
@Bean
public Batchlet fooBatchlet() {
return sleepyBatchlet;
}但是由于某些原因,它并没有在JSL中被引用。有人能建议一下使用已经创建的bean需要做些什么吗?
发布于 2021-04-20 15:39:46
我正在尝试在
中引用它。但是,当使用joboperator启动作业时,它会失败,并显示classnotfound异常。
这是因为您引用的是类的名称,而不是它的完全限定名。
我在这里添加了示例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>https://stackoverflow.com/questions/67116307
复制相似问题