我正在尝试使用Spring Batch从Cassandra读取数据,在其中我实现了ItemReader,ItemProcessor和ItemWriter。我能够读取数据,对其进行处理并将数据写回到同一张表中。我正在创建xml文件来执行作业:

xml:

    <job id="LoadStatusIndicator" job-repository="jobRepository" restartable="false">
        <step id="LoadStatus" next="">
            <tasklet>
                <chunk reader="StatusReader" processor="ItemProcessor" writer="ItemWriter"
                    commit-interval="10" />
            </tasklet>
        </step>
    </job>

    <beans:bean id="ItemWriter" scope="step"
        class="com.batch.writer.ItemWriter">
    </beans:bean>

<beans:bean id="ItemProcessor" scope="step"
        class="com.batch.processor.ItemProcessor">
    </beans:bean>
    <beans:bean id="Reader" scope="step"
        class="com.reader.ItemReader">
        <beans:property name="dataSource" ref="CassandraSource" />

    </beans:bean>


applicationcontext.xml:

<beans:bean id="CassandraSource" parent="DataSourceParent">
<beans:property name="url" value="jdbc:cassandra://${cassandra.hostName}:${cassandra.port}/${cassandra.keyspace}" />
<beans:property name="driverClassName" value="org.apache.cassandra.cql.jdbc.CassandraDriver" />
</beans:bean>


读者班:

   public static final String query = "SELECT * FROM test_1 allow filtering;";

 @Override
    public List<Item> read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException
    {
    List<Item> results = new ArrayList<Item>();
try {
results = cassandraTemplate.select(query,Item.class);
    } catch (Exception e) {
    e.printStackTrace();
    }
return results;
    }


作家班:

@Override
public void write(List<? extends Item> item) throws Exception {
    try {
    cassandraTemplate.insert(item);
}catch(Exception e){e.printStackTrace();}


但是问题是整个工作被多次执行,实际上它根本没有停止。我必须强行停止工作执行。我表中只有2行。
我认为这是因为xml中定义了commit-interval,但是当commit-interval = 10时,作业执行了10次以上

根据我的理解,当我运行xml文件时,这意味着我仅运行一次作业,它将调用读取器一次将数据保存在运行时内存(作业存储库)中,一次调用项目处理器(我使用list),整个列表一次插入

最佳答案

解决了

在阅读器类中,我写道:

if (results.size!=0)return results;elsereturn null;

关于java - Spring Batch中的作业正在多次执行并且没有停止,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35340265/

10-16 17:37