小编Jos*_*hua的帖子

如何在执行代码时第一次停止弹出批量预定作业?

我正在使用带有石英的弹簧批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)

cron spring crontab quartz-scheduler spring-batch

21
推荐指数
2
解决办法
2万
查看次数

Spring Batch错误(作业实例已存在)且RunIdIncrementer仅生成一次

我正在使用 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

5
推荐指数
1
解决办法
2万
查看次数

org.springframework.batch.item.ReaderNotOpenException:阅读器必须打开才能读取

我正在使用 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)

spring spring-batch

4
推荐指数
1
解决办法
1万
查看次数

无法加载流口水规则,出现错误:无法解析对象类型

我是流口水的新手,我想运行一个hello world,但是它一直给我这个错误

packageBuilder中存在一些错误,无法解析ObjectType'Messagee':[规则名称='Hello World']

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)
Run Code Online (Sandbox Code Playgroud)

规则编译错误:[规则名称='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)

drools

2
推荐指数
1
解决办法
1万
查看次数

标签 统计

spring-batch ×3

spring ×2

cron ×1

crontab ×1

drools ×1

quartz-scheduler ×1