This is an automated email from the ASF dual-hosted git repository.
funky-eyes pushed a commit to branch 2.x
in repository https://gitbox.apache.org/repos/asf/incubator-seata.git
The following commit(s) were added to refs/heads/2.x by this push:
new 2a88b08631 bugfix: resolve Saga auto-configuration compatibility with
Spring Boot 4.x (#8157)
2a88b08631 is described below
commit 2a88b08631a905af9433109f0880661600380ece
Author: Zhengcy05 <[email protected]>
AuthorDate: Mon Jul 6 17:41:54 2026 +0800
bugfix: resolve Saga auto-configuration compatibility with Spring Boot 4.x
(#8157)
---
changes/en-us/2.x.md | 3 ++-
changes/zh-cn/2.x.md | 1 +
.../autoconfigure/SeataSagaAutoConfiguration.java | 10 ++++++++--
.../autoconfigure/SeataSagaAutoConfigurationTest.java | 19 +++++++++++++++++++
4 files changed, 30 insertions(+), 3 deletions(-)
diff --git a/changes/en-us/2.x.md b/changes/en-us/2.x.md
index e8ffacf603..b1dd506b13 100644
--- a/changes/en-us/2.x.md
+++ b/changes/en-us/2.x.md
@@ -25,7 +25,8 @@ Add changes here for all PR submitted to the 2.x branch.
### bugfix:
- [[#8138](https://github.com/apache/incubator-seata/pull/8138)] fix TCC fence
cleanup deleting in-progress/unexpired sibling branch records
-- [#8145](https://github.com/apache/incubator-seata/pull/8145) fix global lock
batch acquire false-failure on Dameng(DM)
+- [[#8145](https://github.com/apache/incubator-seata/pull/8145)] fix global
lock batch acquire false-failure on Dameng(DM)
+- [[#8157](https://github.com/apache/incubator-seata/pull/8157)] fix Saga
auto-configuration being skipped on Spring Boot 4.x because of a hard
`DataSourceAutoConfiguration` class reference
diff --git a/changes/zh-cn/2.x.md b/changes/zh-cn/2.x.md
index 77a68bc3fa..51adf16daf 100644
--- a/changes/zh-cn/2.x.md
+++ b/changes/zh-cn/2.x.md
@@ -26,6 +26,7 @@
- [[#8138](https://github.com/apache/incubator-seata/pull/8138)] 修复 TCC fence
清理时误删同一全局事务中仍在进行(TRIED)或未过期的分支记录的问题
- [#8145](https://github.com/apache/incubator-seata/pull/8145)
修复达梦(DM)数据库下全局锁批量获取被误判为失败的问题
+- [[#8157](https://github.com/apache/incubator-seata/pull/8157)] 修复 Spring
Boot 4.x 下由于硬编码 `DataSourceAutoConfiguration` 类引用导致 Saga 自动配置被跳过的问题
### optimize:
diff --git
a/spring/seata-spring-boot-starter/src/main/java/org/apache/seata/spring/boot/autoconfigure/SeataSagaAutoConfiguration.java
b/spring/seata-spring-boot-starter/src/main/java/org/apache/seata/spring/boot/autoconfigure/SeataSagaAutoConfiguration.java
index 1a64037420..1bbbf04309 100644
---
a/spring/seata-spring-boot-starter/src/main/java/org/apache/seata/spring/boot/autoconfigure/SeataSagaAutoConfiguration.java
+++
b/spring/seata-spring-boot-starter/src/main/java/org/apache/seata/spring/boot/autoconfigure/SeataSagaAutoConfiguration.java
@@ -30,7 +30,6 @@ import
org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -47,7 +46,14 @@ import java.util.concurrent.TimeUnit;
*/
@Configuration(proxyBeanMethods = false)
@ConditionalOnProperty({StarterConstants.SEATA_PREFIX + ".enabled",
StarterConstants.SAGA_PREFIX + ".enabled"})
-@AutoConfigureAfter({DataSourceAutoConfiguration.class,
SeataAutoConfiguration.class})
+@AutoConfigureAfter(
+ value = {SeataAutoConfiguration.class},
+ name = {
+ // Spring Boot 2.x, 3.x
+
"org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration",
+ // Spring Boot 4.x
+
"org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration"
+ })
public class SeataSagaAutoConfiguration {
public static final String SAGA_DATA_SOURCE_BEAN_NAME =
"seataSagaDataSource";
diff --git
a/spring/seata-spring-boot-starter/src/test/java/org/apache/seata/spring/boot/autoconfigure/SeataSagaAutoConfigurationTest.java
b/spring/seata-spring-boot-starter/src/test/java/org/apache/seata/spring/boot/autoconfigure/SeataSagaAutoConfigurationTest.java
index 1d5ec2a1e8..4b3aa245c4 100644
---
a/spring/seata-spring-boot-starter/src/test/java/org/apache/seata/spring/boot/autoconfigure/SeataSagaAutoConfigurationTest.java
+++
b/spring/seata-spring-boot-starter/src/test/java/org/apache/seata/spring/boot/autoconfigure/SeataSagaAutoConfigurationTest.java
@@ -32,6 +32,7 @@ import org.mockito.MockedStatic;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import
org.springframework.boot.context.properties.EnableConfigurationProperties;
@@ -44,6 +45,7 @@ import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
+import java.util.Arrays;
import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ThreadPoolExecutor;
@@ -68,6 +70,11 @@ import static org.mockito.Mockito.when;
"seata.saga.state-machine.enable-async=true"
})
class SeataSagaAutoConfigurationTest {
+ private static final String SPRING_BOOT_2_3_DATA_SOURCE_AUTO_CONFIGURATION
=
+
"org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration";
+ private static final String SPRING_BOOT_4_DATA_SOURCE_AUTO_CONFIGURATION =
+
"org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration";
+
@Autowired
private ApplicationContext applicationContext;
@@ -136,4 +143,16 @@ class SeataSagaAutoConfigurationTest {
assertThat(rejectedExecutionHandler).isNotNull();
assertThat(rejectedExecutionHandler).isInstanceOf(ThreadPoolExecutor.CallerRunsPolicy.class);
}
+
+ @Test
+ void
testAutoConfigureAfterSupportsSpringBoot4DataSourceAutoConfiguration() {
+ AutoConfigureAfter autoConfigureAfter =
+
SeataSagaAutoConfiguration.class.getAnnotation(AutoConfigureAfter.class);
+
+ AssertionsForClassTypes.assertThat(autoConfigureAfter).isNotNull();
+
assertThat(autoConfigureAfter.value()).containsExactly(SeataAutoConfiguration.class);
+ assertThat(Arrays.asList(autoConfigureAfter.name()))
+ .containsExactly(
+ SPRING_BOOT_2_3_DATA_SOURCE_AUTO_CONFIGURATION,
SPRING_BOOT_4_DATA_SOURCE_AUTO_CONFIGURATION);
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]