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]

Reply via email to