Spring批处理使用JpaPagingItemReader JpaItemWriter没有正在进行的事务
我的项目使用java配置,即由其他java配置文件创建的Spring批处理使用JpaPagingItemReader JpaItemWriter没有正在进行的事务,jpa,spring-data,spring-batch,Jpa,Spring Data,Spring Batch,我的项目使用java配置,即由其他java配置文件创建的DataSourceentityManagerFactoryPlatformTransactionManager 当ItemReader读取数据时,ItemProcessor转换的数据itemreater有一些错误 我怎样才能解决这个问题 错误消息 2015-01-17 16:26:30.390 ERROR AbstractStep:225 - Encountered an error executing step testStep in
DataSource
entityManagerFactoryPlatformTransactionManager
当ItemReader
读取数据时,ItemProcessor
转换的数据itemreater
有一些错误
我怎样才能解决这个问题
错误消息
2015-01-17 16:26:30.390 ERROR AbstractStep:225 - Encountered an error executing step testStep in job validJob
javax.persistence.TransactionRequiredException: no transaction is in progress
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.checkTransactionNeeded(AbstractEntityManagerImpl.java:1171)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:1332)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
如何在以下代码上启用事务:
@Configuration
@EnableBatchProcessing
public class JobConfiguration {
@Inject
private PlatformTransactionManager transactionManager;
@Inject
private EntityManagerFactory emf;
@Bean
public Job validJob(JobBuilderFactory jobBuilderFactory,Step step) {
return jobBuilderFactory.get("validJob").flow(step).end().build();
}
@Bean
public Step testStep(StepBuilderFactory stepBuilderFactory, ItemReader<PurchaseOrder> reader,
ItemWriter<PurchaseOrder> writer, ItemProcessor<PurchaseOrder, PurchaseOrder> processor) {
return stepBuilderFactory.get("testStep")//
.transactionManager(transactionManager)//
.<PurchaseOrder, PurchaseOrder>chunk(100)//
.reader(reader)//
.processor(processor)//
.writer(writer)//
.build();
}
@Bean
public ItemReader<PurchaseOrder> reader() {
JpaPagingItemReader<PurchaseOrder> reader = new JpaPagingItemReader<PurchaseOrder>();
reader.setEntityManagerFactory(emf);
reader.setQueryString(" select p from PurchaseOrder p ");
reader.setTransacted(false);
return reader;
}
@Bean
public ItemProcessor<PurchaseOrder, PurchaseOrder> processor() {
return new PurchaseOrderItemProcessor();
}
@Bean
public ItemWriter<PurchaseOrder> writer() {
JpaItemWriter<PurchaseOrder> writer = new JpaItemWriter<PurchaseOrder>();
writer.setEntityManagerFactory(emf);
return writer;
}
@配置
@启用批处理
公共类作业配置{
@注入
私有平台transactionManager transactionManager;
@注入
私人实体管理工厂emf;
@豆子
公共作业有效作业(JobBuilderFactory JobBuilderFactory,步骤){
返回jobBuilderFactory.get(“validJob”).flow(step.end().build();
}
@豆子
公共步骤测试步骤(StepBuilderFactory StepBuilderFactory、ItemReader reader、,
ItemWriter编写器、ItemProcessor处理器){
返回stepBuilderFactory.get(“testStep”)//
.transactionManager(transactionManager)//
.chunk(100)//
.读卡器(读卡器)//
.处理器(处理器)//
.作者(作者)//
.build();
}
@豆子
公共项目阅读器(){
JpaPagingItemReader=新的JpaPagingItemReader();
reader.setEntityManagerFactory(emf);
reader.setQueryString(“从PurchaseOrder p中选择p”);
reader.setTransaction(假);
返回读取器;
}
@豆子
公共项目处理器(){
返回新的PurchaseOrderItemProcessor();
}
@豆子
公共项目编写器(){
JpaItemWriter=新的JpaItemWriter();
writer.setEntityManagerFactory(emf);
返回作者;
}
欢迎使用Stack Overflow。如果您纠正明显的拼写错误并使句子通顺,您的问题会得到更好的回答。如果英语不是您的第一语言,至少要检查拼写。对不起,下次提交检查之前,我会问很多问题。事务管理器的配置是否与您在提交检查时使用的相同作业作为一个整体?如果是这样,默认情况下,区块应该包装在事务中。。。