我正在使用带有石英的弹簧批2.2.4在某个时间运行一些工作
问题是作业总是在第一次执行代码后运行,然后根据计划的时间运行.我想停止第一次运行,让它只根据预定的时间运行.
我的cron表达式是"0 0 0**?" 我也试过"0 0 0 1/1*?*",但它仍然会在应用程序启动时执行一次
如何在应用程序启动时停止第一次执行?
这是作业上下文文件:
<batch:job id="exceptionLogJob">
<batch:step id="exceptionLogReadWriteStep">
<batch:tasklet >
<batch:chunk reader="exceptionLogReader" writer="exceptionLogWriter"
commit-interval="1000" />
</batch:tasklet>
</batch:step>
</batch:job>
<!-- ======================================================= -->
<!-- READER -->
<!-- ======================================================= -->
<bean id="exceptionLogReader"
class="org.springframework.batch.item.database.JdbcCursorItemReader">
<property name="dataSource" ref="dataSource" />
<property name="sql" value="SELECT a.*,a.rowid FROM SF_EXCEPTION_LOG a WHERE DATETIME > SYSDATE - 1" />
<property name="rowMapper" ref="ExceptionLogRowMapper" />
</bean>
<!-- ======================================================= -->
<!-- Writer -->
<!-- ======================================================= -->
<bean id="exceptionLogWriter"
class="com.mobily.sf.batchprocessor.exceptionlog.ExceptionLogWriter" />
<bean id="jobDetailExceptionLog" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass"
value="com.sf.batchprocessor.commons.JobLauncherDetails" /> …Run Code Online (Sandbox Code Playgroud) 我正在使用 Spring Batch 和 Quartz 从数据库表中读取数据并写入另一个表中。数据库是Oracle,它是c3p0
问题是每个作业必须有一个唯一的参数,我尝试了RunIdIncrementer并且尝试了以下代码:
public class JobRerunner implements JobParametersIncrementer {
@Override
public JobParameters getNext(JobParameters parameters) {
System.out.println("got job parameters: " + parameters);
if (parameters==null || parameters.isEmpty()) {
return new JobParametersBuilder().addLong("run.id", System.currentTimeMillis()).toJobParameters();
}
long currentTime = parameters.getLong("run.id",System.currentTimeMillis()) + 1;
return new JobParametersBuilder().addLong("run.id",currentTime).toJobParameters();
}
}
Run Code Online (Sandbox Code Playgroud)
但我遇到了同样的问题,run.id只生成一次,当作业第二次运行时,它根本没有参数,第三次也没有参数(第二次和第三次运行JobParameter = null所以(Job Instance已经存在)
工作背景
<batch:job id="readyReqPoolJob" restartable="true">
<batch:step id="readyReqPoolStep">
<batch:tasklet>
<batch:chunk reader="readyReqPoolReader" writer="readyReqPoolWrtiter"
commit-interval="100" />
</batch:tasklet>
</batch:step>
</batch:job>
<!-- ======================================================= -->
<!-- 6) READER -->
<!-- ======================================================= -->
<bean id="readyReqPoolReader"
class="org.springframework.batch.item.database.JdbcCursorItemReader"> …Run Code Online (Sandbox Code Playgroud) 我正在使用 Spring Batch 来运行(从数据库表读取并写入另一个表)作业
该作业是由 Quartz 调度的,数据库是 oracle,它是 c3p0,我遇到了 reader not open 异常
这是工作背景
<batch:job id="readyReqPoolJob">
<batch:step id="readyReqPoolStep">
<batch:tasklet>
<batch:chunk reader="readyReqPoolReader" writer="readyReqPoolWrtiter"
commit-interval="1000" />
</batch:tasklet>
</batch:step>
</batch:job>
<!-- ======================================================= -->
<!-- 6) READER -->
<!-- ======================================================= -->
<bean id="readyReqPoolReader"
class="org.springframework.batch.item.database.JdbcCursorItemReader">
<property name="dataSource" ref="dataSource" />
<property name="sql" value="select * from SF_ILA_Ready_Request_Pool" />
<property name="rowMapper" ref="ReadyReqPoolRowMapper" />
</bean>
<bean id="readyReqPoolWrtiter"
class="com.mobily.housekeepingservice.readyrequestpoolarchive.ReadyReqPoolArchiveWriter" />
<bean id="jobDetail" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass"
value="org.springframework.batch.sample.quartz.JobLauncherDetails" />
<property name="jobDataAsMap">
<map>
<entry key="jobName" value="readyReqPoolJob" />
<entry key="jobLocator" value-ref="jobRegistry" />
<entry key="jobLauncher" …Run Code Online (Sandbox Code Playgroud) 我是流口水的新手,我想运行一个hello world,但是它一直给我这个错误
packageBuilder中存在一些错误,无法解析ObjectType'Messagee':[规则名称='Hello World']
Run Code Online (Sandbox Code Playgroud)Exception in thread "main" java.lang.IllegalArgumentException: Could not parse knowledge. at hellodrools.HelloWorldRuleTest.initialiseDrools(HelloWorldRuleTest.java:55) at hellodrools.HelloWorldRuleTest.main(HelloWorldRuleTest.java:26)规则编译错误:[规则名称='Hello World'] hellodrools / Message / Rule_Hello_World720710180.java(1:8):软件包hellodrools.Message与类型冲突
我的drl文件:
package hellodrools.Message
rule 'Hello World'
when
message:Message (type == 'Hello')
then
message.printMessage();
end
Run Code Online (Sandbox Code Playgroud)
Message.java
package hellodrools;
public class Message{
private String type;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public void printMessage() {
System.out.println("Type: " + type);
}
}
Run Code Online (Sandbox Code Playgroud)
HelloWorldTestRule.java
package hellodrools;
import java.io.IOException;
import java.io.InputStreamReader; …Run Code Online (Sandbox Code Playgroud)