标签: spring-batch

SpringBatch中的MapReduce/Aggregate操作

是否可以在SpringBatch中执行MapReduce样式操作?

我的批处理工作有两个步骤.第一步计算平均值.第二步将每个值与平均值进行比较以确定另一个值.

例如,让我们说我有一个庞大的学生分数数据库.第一步计算每门课程/考试的平均分数.第二步将个人得分与平均值进行比较,根据一些简单的规则确定等级:

  1. 如果学生得分高于平均水平
  2. B如果学生分数是平均分
  3. C如果学生得分低于平均水平

目前我的第一步是一个Sql,它选择平均值并将其写入表中.第二步是一个Sql,它将平均分数与个人分数相结合,并使用Processor来实现规则.

有类似的聚合函数,如avg,min在Steps中使用了很多,我真的更喜欢这可以在Processors中完成,尽可能简化Sqls.有没有办法编写一个处理器,它根据分组标准在多行中聚合结果,然后将一次平均值/最小值写入输出表?

这种模式重复了很多,我不是在寻找使用Sql的单处理器实现,它可以获取平均和个人分数.

java mapreduce batch-processing spring-batch

12
推荐指数
1
解决办法
2300
查看次数

读取一个记录/项目并使用弹簧批次写入多个记录/项目

我做了一些搜索,但找不到任何样本/示例.

我需要读取一个表(输入)的地理坐标,处理它以生成与坐标相关的POI.因此,一个地理坐标将导致需要将一个或多个POI插入另一个表(输出).

我目前正在使用JdbcCursorItemReader和JdbcBatchItemWriter来读取一个项目/记录并写入一个项目/记录.还有一个ItemProcessor,它为给定的地理坐标生成POI.

自定义JdbcBatchItemWriter是否帮助我实现了这一目标?

有任何想法吗?TIA.

spring-integration spring-batch

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

无法找到XML架构命名空间的Spring NamespaceHandler [http://www.springframework.org/schema/batch]

情况

我正在使用Spring Batch为我们的数据仓库构建累积快照,我遇到了一个我无法弄清楚的配置障碍.

我使用Spring模板项目使用STS(SpringSource Tool Suite 2.8.1)创建了一个简单的Spring Batch 项目.这些是我创建的两个xml配置文件:

发射后的context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:batch="http://www.springframework.org/schema/batch"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xsi:schemaLocation="
    http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch-2.1.xsd
    http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<context:property-placeholder location="classpath:batch.properties" />

<context:component-scan base-package="edu.kdc.visioncards" />

<jdbc:initialize-database data-source="dataSource">
    <jdbc:script location="${batch.schema.script}" />
</jdbc:initialize-database>

<batch:job-repository id="jobRepository" />

<import resource="classpath:/META-INF/spring/module-context.xml" />
Run Code Online (Sandbox Code Playgroud)

module-context.xml

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:batch="http://www.springframework.org/schema/batch"
xsi:schemaLocation="http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch-2.1.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

<description>Example job to get you started. It provides a skeleton for a typical batch application.</description>

<batch:job id="job1">
    <batch:step …
Run Code Online (Sandbox Code Playgroud)

spring spring-batch

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

Spring批处理中的commit-interval和处理回滚

我的问题涉及Spring批处理和事务.

假设我为我的一个步骤选择了50提交间隔.

还假设我总共有1000条记录,其中一条记录会导致itemWriter失败,从而导致整个块的回滚(在我的例子中为50条记录).

什么是stategies以确保在作业完成后将49个有效记录写入数据库(并忽略有问题的块)?

java transactions commit chunks spring-batch

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

Spring @Transactional和JDBC autoCommit

在我的实际应用程序中,我有一个DBCP连接池,它没有设置JDBC autoCommit = false.它似乎有默认的autoCommit = true.这可能是一个错误,但我想了解更改此参数的影响.

我正在使用: - 带有@Transactional注释的Spring - 带有JDBC阅读器和编写器的Spring Batch,最终使用JdbcTemplate自定义tasklet

我想知道Spring是否在当前连接上设置autoCommit = false,如果它在TransactionManager处理的事务的上下文中.它是否覆盖默认设置?因为在我看来这样做是有意义的.

spring jdbc spring-batch

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

具有基于Java的配置的Spring Batch的可跳过异常类

我在XML中配置一个步骤,如下所示:

<batch:step id="slaveStep">
        <batch:tasklet>
            <batch:chunk
                    reader="reader"
                    processor="processor"
                    writer="writer"
                    commit-interval="10"
                    skip-limit="100000">
                <batch:skippable-exception-classes>
                    <batch:include class="MyException"/>
                </batch:skippable-exception-classes>
            </batch:chunk>
        </batch:tasklet>
    </batch:step>
Run Code Online (Sandbox Code Playgroud)

在java配置中,我使用这样的StepBuilder:

@Bean
public StepBuilder stepBuilder(String stepName)
{
    return new StepBuilder(stepName);
}

@Bean
Step slaveStep()
{
    return stepBuilder("slaveStep")
            .<Movie, Movie>chunk(10)
            .reader(reader(new HashMap<>()))
            .processor(processor())
            .writer(writer())
            .build();
}
Run Code Online (Sandbox Code Playgroud)

但我找不到配置可跳过的异常类的方法

java spring spring-batch spring-java-config

12
推荐指数
1
解决办法
9540
查看次数

如何将文件夹的所有文件加载到Spring中的资源列表?

我有一个文件夹,想要使用Spring和通配符将所有txt文件加载到列表中:

通过注释,我可以做以下事情:

@Value("classpath*:../../dir/*.txt")
private Resource[] files;
Run Code Online (Sandbox Code Playgroud)

但是如何以编程方式使用spring实现相同的目标呢?

java spring spring-batch

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

Spring Batch如何管理事务(可能有多个数据源)?

我想了解有关Spring批处理中数据流的一些信息,但未能在Internet上找到我要查找的内容(尽管本网站上有一些有用的问题).

我正在尝试建立在我们公司使用Spring Batch的标准,我们想知道当一个步骤中的多个处理器更新不同数据源上的数据时,Spring Batch的行为如何.

这个问题集中在一个分块的过程,但随时提供有关其他模式的信息.

从我所看到的(如果我错了请纠正我),当读取一行时,它会在读取下一行之前跟随整个流程(读取器,处理器,写入器)(而不是读取器处理的孤岛处理)所有行,将它们发送到处理器,等等).

在我的例子中,几个处理器读取数据(在不同的数据库中)并在此过程中更新它们,最后写入器将数据插入到另一个DB中.目前,JobRepository没有链接到数据库,但这将是一个独立的,使得事情仍然有点复杂.

由于数据属于多个业务领域,因此无法更改此模型.

在这种情况下如何管理交易?只有处理完整块后才提交数据吗?那么,是否存在两阶段提交管理?如何确保?应该进行哪些开发或配置以确保数据的一致性?

更一般地说,在类似情况下,您的建议是什么?

java transactions spring-batch

12
推荐指数
1
解决办法
3521
查看次数

春季批次与石英工作?

我是批处理的新手.我试图从简单的调度程序和工作开始.但我很困惑b/w春季批次与石英工作.我的理解是

Quartz: - quartz提供了两个框架,即调度程序框架和作业框架(如果我不想使用spring批处理作业).对 ?

Spring Batch: -它只提供作业框架.我一直使用Quatz schecduler来安排弹簧批处理作业.spring还提供自己的调度程序吗?

spring quartz-scheduler spring-batch

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

没有DataSource的Spring启动+弹簧批处理

我正在尝试在spring boot项目中配置spring批处理,我想在没有数据源的情况下使用它.我发现这ResourcelessTransactionManager是要走的路,但我不能让它发挥作用.问题是我已经定义了另外3个dataSources,但我不想在springBatch中使用它们中的任何一个.

我已经检查了默认实现DefaultBatchConfigurer,如果它无法找到dataSource,它将完全按照我的意愿执行.问题是我有3个并且不想使用任何.

请不要建议在内存数据库中使用hsql或其他,因为我不想要它.

java spring spring-batch spring-boot

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