标签: spring-batch

在获取所有数据之前,Spring Batch ResultSet被其他人关闭

我正在尝试将DB2源设置为Batch元数据的持久性.我得到这个堆栈跟踪:

Caused by: org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [SELECT JOB_EXECUTION_ID, START_TIME, END_TIME, STATUS, EXIT_CODE, EXIT_MESSAGE, CREATE_TIME, LAST_UPDATED, VERSION, JOB_CONFIGURATION_LOCATION from rhall.BATCH_JOB_EXECUTION where JOB_INSTANCE_ID = ? order by JOB_EXECUTION_ID desc]; SQL state [null]; error code [-4470]; [jcc][t4][10120][10898][3.57.82] Invalid operation: result set is closed. ERRORCODE=-4470, SQLSTATE=null; nested exception is com.ibm.db2.jcc.am.SqlException: [jcc][t4][10120][10898][3.57.82] Invalid operation: result set is closed. ERRORCODE=-4470, SQLSTATE=null
   at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:84)
   at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
   at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
   at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:645)
   at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:680)
   at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:712)
   at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:722)
   at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:777)
   at org.springframework.batch.core.repository.dao.JdbcJobExecutionDao.findJobExecutions(JdbcJobExecutionDao.java:131)
   at org.springframework.batch.core.repository.support.SimpleJobRepository.getStepExecutionCount(SimpleJobRepository.java:253)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native …
Run Code Online (Sandbox Code Playgroud)

db2 spring-batch

16
推荐指数
1
解决办法
933
查看次数

以编程方式运行Spring Batch Job?

我有一个Spring Batch应用程序,我从它开始CommandLineJobRunner.但现在我必须将此应用程序嵌入到我们的企业环境中.我们有一个自己的Launcher应用程序,我必须使用它.对于这个启动器应用程序,我需要一个带有main方法的启动类,它将在启动时调用,并且我必须启动Spring Batch.

JobLauncher使用此启动器手动分配和运行作业的唯一方法,还是Spring Batch中有一个类支持(或者有人知道样本)?

java spring-batch

15
推荐指数
3
解决办法
3万
查看次数

Spring批处理作业从多个来源读取

如何从多个数据库中读取项目?我已经知道可以从文件中获取.
以下示例适用于从多个文件中读取

...
<job id="readMultiFileJob" xmlns="http://www.springframework.org/schema/batch">
    <step id="step1">
    <tasklet>
        <chunk reader="multiResourceReader" writer="flatFileItemWriter"
            commit-interval="1" />
    </tasklet>
    </step>
</job>
...
<bean id="multiResourceReader"
    class=" org.springframework.batch.item.file.MultiResourceItemReader">
    <property name="resources" value="file:csv/inputs/domain-*.csv" />
    <property name="delegate" ref="flatFileItemReader" />
</bean>
...
Run Code Online (Sandbox Code Playgroud)

像这样的三个豆子.

<bean id="database2" class="org.springframework.batch.item.database.JdbcCursorItemReader">
    <property name="name" value="database2Reader" />
    <property name="dataSource" ref="dataSource2" />
    <property name="sql" value="select image from object where image like '%/images/%'" />
    <property name="rowMapper">
        <bean class="sym.batch.ImagesRowMapper2" />
    </property>
</bean>
Run Code Online (Sandbox Code Playgroud)

java database spring spring-batch

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

如何使用spring-boot在spring批处理中设置JobParameters

我按照http://spring.io/guides/gs/batch-processing/上的指南进行了操作,但它描述了一个没有可配置参数的作业.我正在使用Maven来构建我的项目.

我正在移植我在XML中定义的现有作业,并希望通过命令传入jobParameters.

我尝试了以下方法:

@Configuration
@EnableBatchProcessing
public class MyBatchConfiguration {

    // other beans ommited

    @Bean 
    public Resource destFile(@Value("#{jobParameters[dest]}") String dest) {
        return new FileSystemResource(dest);
    }

}
Run Code Online (Sandbox Code Playgroud)

然后我使用以下方法编译项目:

mvn clean package
Run Code Online (Sandbox Code Playgroud)

然后我尝试启动这样的程序:

java my-jarfile.jar dest=/tmp/foo
Run Code Online (Sandbox Code Playgroud)

我得到一个例外说:

[...]
Caused by: org.springframework.expression.spel.SpelEvaluationException: 
EL1008E:(pos 0): Field or property 'jobParameters' cannot be found on object of 
type 'org.springframework.beans.factory.config.BeanExpressionContext'
Run Code Online (Sandbox Code Playgroud)

谢谢 !

spring-batch spring-el spring-boot

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

Spring Batch异步处理器配置可获得最佳性能

我在Spring Batch中创建异步处理器时遇到问题.我的处理器越来越IDreader基于从响应,建立对象SOAP调用.有时为1输入(ID)必须有例如60-100个SOAP调用,有时只有1个.我试图制作多线程步骤,它正在处理例如50个输入,但它没用,因为49个线程在1秒内完成了它们的工作并被阻止,等待这个正在进行60-100次SOAP通话的人.现在我用AsyncItemProcessor+ AsyncItemWriter但这个解决方案对我来说很慢.由于我的输入(IDs)很大,从DB读取的大约25k项目我希望在时间开始~50-100输入.

这是我的配置:

@Configuration
public class BatchConfig {

    @Autowired
    public JobBuilderFactory jobBuilderFactory;
    @Autowired
    public StepBuilderFactory stepBuilderFactory;
    @Autowired
    private DatabaseConfig databaseConfig;
    @Value(value = "classpath:Categories.txt")
    private Resource categories;

    @Bean
    public Job processJob() throws Exception {
        return jobBuilderFactory.get("processJob").incrementer(new RunIdIncrementer()).listener(listener()).flow(orderStep1()).end().build();
    }

    @Bean
    public Step orderStep1() throws Exception {
        return stepBuilderFactory.get("orderStep1").<Category, CategoryDailyResult>chunk(1).reader(reader()).processor(asyncItemProcessor()).writer(asyncItemWriter()).taskExecutor(taskExecutor()).build();
    }

    @Bean
    public JobExecutionListener listener() {
        return new JobCompletionListener();
    }


    @Bean
    public ItemWriter asyncItemWriter() { …
Run Code Online (Sandbox Code Playgroud)

java spring multithreading spring-batch

15
推荐指数
1
解决办法
4226
查看次数

跨数据库同步表数据

我有一个表记录其在字段上的行插入/更新时间戳.

我想将此表中的数据与另一个数据库服务器上的另一个表同步.两个数据库服务器未连接,同步是单向(主/从).使用表触发器不合适

我的工作流程

  • 我使用全局last_sync_date参数和查询表Master来更改/插入记录
  • 将结果行输出到xml
  • 使用更新和插入解析xml并更新表Slave

处理Master表的已删除记录时,问题的复杂性会增加.为了捕获已删除的记录,我认为我必须为先前插入的记录维护一个日志表并使用sql"NOT IN".在处理大型数据集时,这会成为性能问题.

什么是处理这种情况的替代工作流程?

java sql spring-batch

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

Spring批量远程分块和远程分区之间的区别

spring批量远程分块和远程分区有什么区别?

我无法理解Spring批处理中远程分块和远程分区之间的区别.有人可以解释一下吗?

java spring spring-batch

14
推荐指数
1
解决办法
9923
查看次数

Spring Batch:用于高容量和低延迟的ItemReader实现

使用案例:从数据库中读取1000万行[10列]并写入文件(csv格式).

  1. 将建议JdbcCursorItemReaderJdbcPagingItemReader中的哪个ItemReader实现?那是什么原因?

  2. 在上述用例中哪个表现更好(快)?

  3. 在单流程与多流程方法的情况下,选择会有所不同吗?

  4. 在使用TaskExecutor的多线程方法的情况下,哪一个会更好和简单?

spring jdbc batch-processing spring-batch

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

无法打开JPA EntityManager进行交易; 嵌套异常是java.lang.IllegalStateException

我特别对Spring和Spring-Batch很新.我还是设法安装了Spring Batch-Admin.我添加了自定义作业和Hibernate/JPA以实现持久性.

一切都按预期工作,直到第一个块应该持久化.然后我收到以下错误消息:

org.springframework.transaction.CannotCreateTransactionException: 
      Could not open JPA  EntityManager for transaction;

nested exception is java.lang.IllegalStateException: Already value
      [org.springframework.jdbc.datasource.ConnectionHolder@60d31437] 
      for key [org.springframework.jdbc.datasource.DriverManagerDataSource@12da4b19] 
      bound to thread [jobLauncherTaskExecutor-1]
Run Code Online (Sandbox Code Playgroud)

这是完整的堆栈跟踪:

org.springframework.transaction.CannotCreateTransactionException: Could not open JPA  EntityManager for transaction; nested exception is java.lang.IllegalStateException: Already value [org.springframework.jdbc.datasource.ConnectionHolder@43f9e588] for key [org.springframework.jdbc.datasource.DriverManagerDataSource@84f171a] bound to thread [jobLauncherTaskExecutor-1]
     at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:427)
     at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:371)
     at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:335)
     at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:105)
     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
     at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
     at com.sun.proxy.$Proxy41.saveIfUnique(Unknown Source)
     at com.qompa.batch.ArticleItemWriter.write(ArticleItemWriter.java:28)
     at org.springframework.batch.core.step.item.SimpleChunkProcessor.writeItems(SimpleChunkProcessor.java:171)
     at org.springframework.batch.core.step.item.SimpleChunkProcessor.doWrite(SimpleChunkProcessor.java:150)
     at org.springframework.batch.core.step.item.FaultTolerantChunkProcessor$3.doWithRetry(FaultTolerantChunkProcessor.java:313)
     at org.springframework.batch.retry.support.RetryTemplate.doExecute(RetryTemplate.java:240)
     at …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate jpa spring-batch

14
推荐指数
3
解决办法
6万
查看次数

更改Spring Boot项目以继承自定义依赖项管理

我有一个小的Spring Boot应用程序,我必须适应使用自定义父级.谷歌找到了很多关于如何迁移 Spring Boot 的例子,但我不知道 Spring Boot 迁移(我几乎不知道开始).

原因

简而言之,这个应用程序是作为一种概念验证而开发的,开发人员选择了最先进的技术.

现在,这个应用程序将继续生存,我们需要将它集成到我们的框架中.因此,作为一个Maven项目,它应该继承我们的一个普通父项,尽管我的理解是Spring Boot项目应该继承自Spring Boot的父级POM.

[编辑]我错了:可以在没有父POM的情况下使用Spring Boot.因此,删除Spring Boot不是义务,但我们的父POM包含自己的版本管理,这使我必须覆盖启动器中包含的几个版本.

为什么我们需要继承父母

我们在所有项目中都使用了一个企业框架.为了简化操作,我们在父POM中管理许多框架的版本.这些版本与我们的小批量项目中spring-boot-dependencies的版本冲突的一些示例:

  • Spring框架(内部:3.2.4; Spring Boot 1.2.2:4.1.5)
  • Spring Batch(ih:2.2.0; sb:3.0.3)
  • 速度(ih:1.5; sb:1.7)
  • Junit(ih:4.11; sb:4.12)
  • ...(我们管理大约90个版本)

我显然无权升级这些版本.请记住,这个框架用于许多项目,任何改变都可能产生严重和不受控制的后果.

附加背景

目标是获得一点Spring批处理应用程序.它必须从命令行获取一些输入,并12在执行失败时返回退出代码.下面是发射器的核心,但我愿意接受任何更好的方法.

我们的批处理启动器类

如果完全放弃Spring Boot,我需要调整这个启动器类,但是,主要用于XML Spring上下文,我发现这有点困难.

// ...
import org.springframework.batch.core.ExitStatus;
import org.springframework.batch.core.JobExecution;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;

@ComponentScan("my.config.package")
@EnableAutoConfiguration
public class Application {

    public static void main(String[] args) {
        // ...
        SpringApplication app = new SpringApplication(Application.class);
        app.setWebEnvironment(false);
        final Map<String, …
Run Code Online (Sandbox Code Playgroud)

java spring maven spring-batch spring-boot

14
推荐指数
1
解决办法
4941
查看次数