Adapt to breaking changes in Batch's transaction management

See gh-32237
This commit is contained in:
Andy Wilkinson 2022-09-14 10:15:30 +01:00
parent c6990a34f9
commit 6d2a1d3f3b
2 changed files with 11 additions and 12 deletions

View File

@ -47,10 +47,10 @@ public class BasicBatchConfigurer implements BatchConfigurer, InitializingBean {
private final DataSource dataSource; private final DataSource dataSource;
private PlatformTransactionManager transactionManager;
private final TransactionManagerCustomizers transactionManagerCustomizers; private final TransactionManagerCustomizers transactionManagerCustomizers;
private PlatformTransactionManager transactionManager;
private JobRepository jobRepository; private JobRepository jobRepository;
private JobLauncher jobLauncher; private JobLauncher jobLauncher;
@ -76,11 +76,6 @@ public class BasicBatchConfigurer implements BatchConfigurer, InitializingBean {
return this.jobRepository; return this.jobRepository;
} }
@Override
public PlatformTransactionManager getTransactionManager() {
return this.transactionManager;
}
@Override @Override
public JobLauncher getJobLauncher() { public JobLauncher getJobLauncher() {
return this.jobLauncher; return this.jobLauncher;
@ -98,7 +93,6 @@ public class BasicBatchConfigurer implements BatchConfigurer, InitializingBean {
public void initialize() { public void initialize() {
try { try {
this.transactionManager = buildTransactionManager();
this.jobRepository = createJobRepository(); this.jobRepository = createJobRepository();
this.jobLauncher = createJobLauncher(); this.jobLauncher = createJobLauncher();
this.jobExplorer = createJobExplorer(); this.jobExplorer = createJobExplorer();
@ -130,7 +124,7 @@ public class BasicBatchConfigurer implements BatchConfigurer, InitializingBean {
map.from(this.dataSource).to(factory::setDataSource); map.from(this.dataSource).to(factory::setDataSource);
map.from(this::determineIsolationLevel).whenNonNull().to(factory::setIsolationLevelForCreate); map.from(this::determineIsolationLevel).whenNonNull().to(factory::setIsolationLevelForCreate);
map.from(this.properties.getJdbc()::getTablePrefix).whenHasText().to(factory::setTablePrefix); map.from(this.properties.getJdbc()::getTablePrefix).whenHasText().to(factory::setTablePrefix);
map.from(this::getTransactionManager).to(factory::setTransactionManager); map.from(this::buildTransactionManager).to(factory::setTransactionManager);
factory.afterPropertiesSet(); factory.afterPropertiesSet();
return factory.getObject(); return factory.getObject();
} }
@ -153,7 +147,12 @@ public class BasicBatchConfigurer implements BatchConfigurer, InitializingBean {
if (this.transactionManagerCustomizers != null) { if (this.transactionManagerCustomizers != null) {
this.transactionManagerCustomizers.customize(transactionManager); this.transactionManagerCustomizers.customize(transactionManager);
} }
this.transactionManager = transactionManager;
return transactionManager; return transactionManager;
} }
PlatformTransactionManager getTransactionManager() {
return this.transactionManager;
}
} }

View File

@ -309,7 +309,7 @@ class BatchAutoConfigurationTests {
.run((context) -> { .run((context) -> {
assertThat(context).hasSingleBean(BatchConfigurer.class); assertThat(context).hasSingleBean(BatchConfigurer.class);
JpaTransactionManager transactionManager = JpaTransactionManager.class JpaTransactionManager transactionManager = JpaTransactionManager.class
.cast(context.getBean(BatchConfigurer.class).getTransactionManager()); .cast(context.getBean(BasicBatchConfigurer.class).getTransactionManager());
assertThat(transactionManager.getDefaultTimeout()).isEqualTo(30); assertThat(transactionManager.getDefaultTimeout()).isEqualTo(30);
assertThat(transactionManager.isRollbackOnCommitFailure()).isTrue(); assertThat(transactionManager.isRollbackOnCommitFailure()).isTrue();
}); });
@ -323,7 +323,7 @@ class BatchAutoConfigurationTests {
.run((context) -> { .run((context) -> {
assertThat(context).hasSingleBean(BatchConfigurer.class); assertThat(context).hasSingleBean(BatchConfigurer.class);
DataSourceTransactionManager transactionManager = DataSourceTransactionManager.class DataSourceTransactionManager transactionManager = DataSourceTransactionManager.class
.cast(context.getBean(BatchConfigurer.class).getTransactionManager()); .cast(context.getBean(BasicBatchConfigurer.class).getTransactionManager());
assertThat(transactionManager.getDefaultTimeout()).isEqualTo(30); assertThat(transactionManager.getDefaultTimeout()).isEqualTo(30);
assertThat(transactionManager.isRollbackOnCommitFailure()).isTrue(); assertThat(transactionManager.isRollbackOnCommitFailure()).isTrue();
}); });
@ -336,7 +336,7 @@ class BatchAutoConfigurationTests {
assertThat(context).hasSingleBean(BatchConfigurer.class) assertThat(context).hasSingleBean(BatchConfigurer.class)
.hasSingleBean(BatchDataSourceScriptDatabaseInitializer.class).hasBean("batchDataSource"); .hasSingleBean(BatchDataSourceScriptDatabaseInitializer.class).hasBean("batchDataSource");
DataSource batchDataSource = context.getBean("batchDataSource", DataSource.class); DataSource batchDataSource = context.getBean("batchDataSource", DataSource.class);
assertThat(context.getBean(BatchConfigurer.class)).hasFieldOrPropertyWithValue("dataSource", assertThat(context.getBean(BasicBatchConfigurer.class)).hasFieldOrPropertyWithValue("dataSource",
batchDataSource); batchDataSource);
assertThat(context.getBean(BatchDataSourceScriptDatabaseInitializer.class)) assertThat(context.getBean(BatchDataSourceScriptDatabaseInitializer.class))
.hasFieldOrPropertyWithValue("dataSource", batchDataSource); .hasFieldOrPropertyWithValue("dataSource", batchDataSource);