Skip to content

Commit 144b0e1

Browse files
committed
Test status quo for @primary + TransactionManagementConfigurer
This commit introduces tests for the status quo in production support for multiple transaction managers registered as @primary and via the TransactionManagementConfigurer API. See gh-24869
1 parent dc5ddff commit 144b0e1

File tree

1 file changed

+86
-1
lines changed

1 file changed

+86
-1
lines changed

spring-tx/src/test/java/org/springframework/transaction/annotation/EnableTransactionManagementTests.java

Lines changed: 86 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.springframework.context.annotation.Conditional;
3232
import org.springframework.context.annotation.Configuration;
3333
import org.springframework.context.annotation.ConfigurationCondition;
34+
import org.springframework.context.annotation.Primary;
3435
import org.springframework.core.type.AnnotatedTypeMetadata;
3536
import org.springframework.stereotype.Service;
3637
import org.springframework.transaction.PlatformTransactionManager;
@@ -106,7 +107,6 @@ public void txManagerIsResolvedCorrectlyWhenMultipleManagersArePresent() {
106107
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(
107108
EnableTxConfig.class, MultiTxManagerConfig.class);
108109
TransactionalTestBean bean = ctx.getBean(TransactionalTestBean.class);
109-
110110
CallCountingTransactionManager txManager = ctx.getBean("txManager", CallCountingTransactionManager.class);
111111
CallCountingTransactionManager txManager2 = ctx.getBean("txManager2", CallCountingTransactionManager.class);
112112

@@ -122,6 +122,48 @@ public void txManagerIsResolvedCorrectlyWhenMultipleManagersArePresent() {
122122
ctx.close();
123123
}
124124

125+
@Test
126+
public void txManagerIsResolvedCorrectlyWhenMultipleManagersArePresentAndOneIsPrimary() {
127+
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(
128+
EnableTxConfig.class, PrimaryMultiTxManagerConfig.class);
129+
TransactionalTestBean bean = ctx.getBean(TransactionalTestBean.class);
130+
CallCountingTransactionManager primary = ctx.getBean("primary", CallCountingTransactionManager.class);
131+
CallCountingTransactionManager txManager2 = ctx.getBean("txManager2", CallCountingTransactionManager.class);
132+
133+
// invoke a transactional method, causing the PlatformTransactionManager bean to be resolved.
134+
bean.findAllFoos();
135+
136+
assertThat(primary.begun).isEqualTo(1);
137+
assertThat(primary.commits).isEqualTo(1);
138+
assertThat(primary.rollbacks).isEqualTo(0);
139+
assertThat(txManager2.begun).isEqualTo(0);
140+
assertThat(txManager2.commits).isEqualTo(0);
141+
assertThat(txManager2.rollbacks).isEqualTo(0);
142+
143+
ctx.close();
144+
}
145+
146+
@Test
147+
public void txManagerIsResolvedCorrectlyWithTxMgmtConfigurerAndPrimaryPresent() {
148+
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(
149+
EnableTxConfig.class, PrimaryTxManagerAndTxMgmtConfigurerConfig.class);
150+
TransactionalTestBean bean = ctx.getBean(TransactionalTestBean.class);
151+
CallCountingTransactionManager primary = ctx.getBean("primary", CallCountingTransactionManager.class);
152+
CallCountingTransactionManager annotationDriven = ctx.getBean("annotationDrivenTransactionManager", CallCountingTransactionManager.class);
153+
154+
// invoke a transactional method, causing the PlatformTransactionManager bean to be resolved.
155+
bean.findAllFoos();
156+
157+
assertThat(primary.begun).isEqualTo(0);
158+
assertThat(primary.commits).isEqualTo(0);
159+
assertThat(primary.rollbacks).isEqualTo(0);
160+
assertThat(annotationDriven.begun).isEqualTo(1);
161+
assertThat(annotationDriven.commits).isEqualTo(1);
162+
assertThat(annotationDriven.rollbacks).isEqualTo(0);
163+
164+
ctx.close();
165+
}
166+
125167
/**
126168
* A cheap test just to prove that in ASPECTJ mode, the AnnotationTransactionAspect does indeed
127169
* get loaded -- or in this case, attempted to be loaded at which point the test fails.
@@ -295,6 +337,49 @@ public PlatformTransactionManager annotationDrivenTransactionManager() {
295337
}
296338

297339

340+
@Configuration
341+
static class PrimaryMultiTxManagerConfig {
342+
343+
@Bean
344+
public TransactionalTestBean testBean() {
345+
return new TransactionalTestBean();
346+
}
347+
348+
@Bean
349+
@Primary
350+
public PlatformTransactionManager primary() {
351+
return new CallCountingTransactionManager();
352+
}
353+
354+
@Bean
355+
public PlatformTransactionManager txManager2() {
356+
return new CallCountingTransactionManager();
357+
}
358+
}
359+
360+
361+
@Configuration
362+
static class PrimaryTxManagerAndTxMgmtConfigurerConfig implements TransactionManagementConfigurer {
363+
364+
@Bean
365+
public TransactionalTestBean testBean() {
366+
return new TransactionalTestBean();
367+
}
368+
369+
@Bean
370+
@Primary
371+
public PlatformTransactionManager primary() {
372+
return new CallCountingTransactionManager();
373+
}
374+
375+
@Bean
376+
@Override
377+
public PlatformTransactionManager annotationDrivenTransactionManager() {
378+
return new CallCountingTransactionManager();
379+
}
380+
}
381+
382+
298383
@Configuration
299384
@EnableTransactionManagement
300385
static class Spr11915Config {

0 commit comments

Comments
 (0)