From 08d6dae77676f47be75904b3356d4f9918bc7b1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A8=E5=AE=B8?= <13279020+wang-winston@user.noreply.gitee.com> Date: Tue, 15 Jul 2025 19:00:10 +0800 Subject: [PATCH] =?UTF-8?q?fix:lambda=E7=9A=84orElse=E6=98=AF=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E7=9A=84=E8=AF=9D=EF=BC=8C=E4=BC=9A=E5=9C=A8=E6=89=A7?= =?UTF-8?q?=E8=A1=8Clambda=E4=B9=8B=E5=89=8D=E5=A0=86=E6=A0=88=E5=B0=B1?= =?UTF-8?q?=E8=B0=83=E7=94=A8=E4=BA=86=EF=BC=8C=E9=82=A3=E4=B9=88Optional?= =?UTF-8?q?=E7=9A=84=E9=80=BB=E8=BE=91=E5=B0=B1=E5=A4=B1=E5=8E=BB=E4=BD=9C?= =?UTF-8?q?=E7=94=A8=E4=BA=86=EF=BC=8C=E5=B9=B6=E4=B8=94=E5=8F=91=E7=8E=B0?= =?UTF-8?q?=E4=BA=86=E4=B8=80=E4=B8=AA=E9=80=BB=E8=BE=91=E9=97=AE=E9=A2=98?= =?UTF-8?q?=EF=BC=8CaddDataSource=E6=B2=A1=E6=9C=89=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E5=88=B0=E5=8F=82=E6=95=B0=EF=BC=8C=E4=BC=9A=E5=AF=BC=E8=87=B4?= =?UTF-8?q?multiple=E9=80=BB=E8=BE=91=E6=9C=89=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/datasource/FlexDataSource.java | 16 ++++++++-------- .../boot/MultiDataSourceAutoConfiguration.java | 3 ++- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/datasource/FlexDataSource.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/datasource/FlexDataSource.java index b0d24a32..42230eee 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/datasource/FlexDataSource.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/datasource/FlexDataSource.java @@ -36,6 +36,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.concurrent.ThreadLocalRandom; /** @@ -61,13 +62,13 @@ public class FlexDataSource extends AbstractDataSource { this(dataSourceKey, dataSource, DbTypeUtil.getDbType(dataSource), needDecryptDataSource); } - public FlexDataSource(String dataSourceKey, DataSource dataSource, DbType dbType, boolean needDecryptDataSource){ + public FlexDataSource(String dataSourceKey, DataSource dataSource, DbType dbType, boolean needDecryptDataSource) { if (needDecryptDataSource) { DataSourceManager.decryptDataSource(dataSource); } // 处理dbType - dbType = Optional.ofNullable(dbType).orElse(DbTypeUtil.getDbType(dataSource)); + dbType = Optional.ofNullable(dbType).orElseGet(() -> DbTypeUtil.getDbType(dataSource)); this.defaultDataSourceKey = dataSourceKey; this.defaultDataSource = dataSource; @@ -88,8 +89,7 @@ public class FlexDataSource extends AbstractDataSource { } // 优先取缓存,否则根据数据源返回数据库类型 - DbType dbType = Optional.ofNullable(dbTypeHashMap.get(dataSourceKey)) - .orElse(DbTypeUtil.getDbType(ds)); + DbType dbType = Optional.ofNullable(dbTypeHashMap.get(dataSourceKey)).orElseGet(() -> DbTypeUtil.getDbType(ds)); this.defaultDataSourceKey = dataSourceKey; this.defaultDataSource = ds; @@ -104,13 +104,12 @@ public class FlexDataSource extends AbstractDataSource { addDataSource(dataSourceKey, dataSource, DbTypeUtil.getDbType(dataSource), needDecryptDataSource); } - public void addDataSource(String dataSourceKey, DataSource dataSource, DbType dbType,boolean needDecryptDataSource) { + public void addDataSource(String dataSourceKey, DataSource dataSource, DbType dbType, boolean needDecryptDataSource) { if (needDecryptDataSource) { DataSourceManager.decryptDataSource(dataSource); } - dbType = Optional.ofNullable(dbTypeHashMap.get(dataSourceKey)) - .orElse(DbTypeUtil.getDbType(dataSource)); + dbType = Optional.ofNullable(dbType).orElseGet(() -> DbTypeUtil.getDbType(dataSource)); dataSourceMap.put(dataSourceKey, dataSource); dbTypeHashMap.put(dataSourceKey, dbType); @@ -205,7 +204,7 @@ public class FlexDataSource extends AbstractDataSource { } catch (SQLException e) { if (log.isDebugEnabled()) { log.debug("Error resetting autoCommit to true before closing the connection. " + - "Cause: " + e); + "Cause: " + e); } } } @@ -242,6 +241,7 @@ public class FlexDataSource extends AbstractDataSource { /** * 获取数据源缺失处理器。 + * * @return DataSourceMissingHandler 数据源缺失处理器实例,用于自定义处理逻辑(如:记录日志、抛出异常或提供默认数据源)。 */ public DataSourceMissingHandler getDataSourceMissingHandler() { diff --git a/mybatis-flex-spring-boot-starter/src/main/java/com/mybatisflex/spring/boot/MultiDataSourceAutoConfiguration.java b/mybatis-flex-spring-boot-starter/src/main/java/com/mybatisflex/spring/boot/MultiDataSourceAutoConfiguration.java index 939da577..975875d1 100644 --- a/mybatis-flex-spring-boot-starter/src/main/java/com/mybatisflex/spring/boot/MultiDataSourceAutoConfiguration.java +++ b/mybatis-flex-spring-boot-starter/src/main/java/com/mybatisflex/spring/boot/MultiDataSourceAutoConfiguration.java @@ -128,7 +128,8 @@ public class MultiDataSourceAutoConfiguration { } // 如果没有构建成功dbType,需要自解析 - dbType = Optional.ofNullable(dbType).orElse(DbTypeUtil.getDbType(dataSource)); + final DataSource lambdaInnerDataSource = dataSource; + dbType = Optional.ofNullable(dbType).orElseGet(() -> DbTypeUtil.getDbType(lambdaInnerDataSource)); if (flexDataSource == null) { flexDataSource = new FlexDataSource(entry.getKey(), dataSource, dbType, false); } else {