我想使用JpaItemWriter批量持久實體。但是,當我使用下面的代碼要堅持,我被告知:JpaItemWriter:沒有交易正在進行中
@Bean
public ItemWriter<T> writer() {
JpaItemWriter<T> itemWriter = new JpaItemWriter<>();
itemWriter.setEntityManagerFactory(emf);
}
@Configuration
@EnableTransactionManagement
@EnableBatchProcessing
class Config{ {
@Bean
public LocalContainerEntityManagerFactoryBean emf() {
LocalContainerEntityManagerFactoryBean emf = new LocalContainerEntityManagerFactoryBean();
emf.setDataSource(dataSource());
emf.setPackagesToScan("my.package");
emf.setJpaVendorAdapter(jpaAdapter());
emf.setJpaProperties(jpaProterties());
return emf;
}
編輯:
@Bean
public Job airlineJob(JobBuilderFactory jobs, Step step) {
return jobs.get("job")
.start(step)
.build();
}
//Reader is a `FlatFileItemReader`, writer is `CustomItemWriter`.
@Bean
public Step step(StepBuilderFactory steps,
MultiResourceItemReader<T> rea,
ItemProcessor<T, T> pro,
ItemWriter<T> wr) {
return steps.get("step")
.reader(rea)
.processor(proc)
.writer(wr)
.build();
}
//use same datasource and tx manager as in the full web application
@Bean
public JobLauncher launcher(TransactionManager tx, DataSource ds) throws Exception {
SimpleJobLauncher launcher = new SimpleJobLauncher();
JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean();
factory.setDataSource(ds);
factory.setTransactionManager(tx);
jobLauncher.setJobRepository(factory.getJobRepository());
return launcher;
}
Hibernate:
select
nextval ('hibernate_sequence')
[] 2014-03-19 15:46:02,237 ERROR : TransactionRequiredException: no transaction is in progress
我怎樣才能在以下交易啓用編輯2作爲對@Haim的迴應:
@Bean
public JpaItemWriter<T> jpaItemWriter(EntityManagerFactory emf) {
JpaItemWriter<T> writer = new JpaItemWriter<T>();
writer.setEntityManagerFactory(emf);
return writer;
}
你爲什麼要構建一個JpaItemWriter?那應該在春季完成?如果沒有進行中的交易,這意味着您沒有正確設置Spring Batch。添加相關的配置和類。 –
因爲批處理過程需要將讀者和寫者定義爲Bean。 'stepBuilderFactory.get(「step」)。reader(reader).writer(writer).build();' – membersound
你是否正在使用Spring Batch 3和Java Config方法。對於初學者來說,你不應該調用'afterPropertiesSet'的spring會爲你做這件事(它只是一個像其他bean一樣的bean)。但請仍然添加您的實際Spring批處理和事務配置。我希望你也有一個'JpaTransactionManager'和一些'@ EnableTransactionManagement'。 –