From 8705ab522124c03298df823596384e7c8e30439d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=80=E6=BA=90=E6=B5=B7=E5=93=A5?= Date: Wed, 19 Jul 2023 12:44:50 +0800 Subject: [PATCH] fix: solon dbType error --- .../com/mybatisflex/core/FlexGlobalConfig.java | 5 +++++ .../core/datasource/FlexDataSource.java | 14 +++++++++++++- .../core/mybatis/FlexSqlSessionFactoryBuilder.java | 10 +++------- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/FlexGlobalConfig.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/FlexGlobalConfig.java index 66baa55a..8a028bba 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/FlexGlobalConfig.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/FlexGlobalConfig.java @@ -24,6 +24,7 @@ import com.mybatisflex.core.dialect.DbType; import org.apache.ibatis.session.Configuration; import org.apache.ibatis.session.SqlSessionFactory; +import javax.sql.DataSource; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -108,6 +109,10 @@ public class FlexGlobalConfig { public void setConfiguration(Configuration configuration) { this.configuration = configuration; + DataSource dataSource = configuration.getEnvironment().getDataSource(); + if (dataSource instanceof FlexDataSource){ + this.dbType = ((FlexDataSource) dataSource).getDefaultDbType(); + } } public SqlSessionFactory getSqlSessionFactory() { 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 c55fbed1..32949192 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 @@ -44,13 +44,20 @@ public class FlexDataSource extends AbstractDataSource { private final Map dataSourceMap = new HashMap<>(); private final Map dbTypeHashMap = new HashMap<>(); + private final DbType defaultDbType; private final String defaultDataSourceKey; private final DataSource defaultDataSource; public FlexDataSource(String dataSourceKey, DataSource dataSource) { + + DataSourceManager.decryptDataSource(dataSource); + this.defaultDataSourceKey = dataSourceKey; this.defaultDataSource = dataSource; - addDataSource(dataSourceKey, dataSource); + this.defaultDbType = DbTypeUtil.getDbType(dataSource); + + dataSourceMap.put(dataSourceKey, dataSource); + dbTypeHashMap.put(dataSourceKey, defaultDbType); } public void addDataSource(String dataSourceKey, DataSource dataSource) { @@ -80,10 +87,15 @@ public class FlexDataSource extends AbstractDataSource { return defaultDataSource; } + public DbType getDefaultDbType() { + return defaultDbType; + } + public DbType getDbType(String dataSourceKey) { return dbTypeHashMap.get(dataSourceKey); } + @Override public Connection getConnection() throws SQLException { String xid = TransactionContext.getXID(); diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/mybatis/FlexSqlSessionFactoryBuilder.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/mybatis/FlexSqlSessionFactoryBuilder.java index 7275dc27..0b34a378 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/mybatis/FlexSqlSessionFactoryBuilder.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/mybatis/FlexSqlSessionFactoryBuilder.java @@ -17,8 +17,6 @@ package com.mybatisflex.core.mybatis; import com.mybatisflex.core.FlexConsts; import com.mybatisflex.core.FlexGlobalConfig; -import com.mybatisflex.core.dialect.DbType; -import com.mybatisflex.core.dialect.DbTypeUtil; import com.mybatisflex.core.exception.FlexExceptions; import org.apache.ibatis.builder.xml.XMLConfigBuilder; import org.apache.ibatis.exceptions.ExceptionFactory; @@ -85,10 +83,9 @@ public class FlexSqlSessionFactoryBuilder extends SqlSessionFactoryBuilder { } SqlSessionFactory sessionFactory = super.build(configuration); - DbType dbType = DbTypeUtil.getDbType(configuration.getEnvironment().getDataSource()); - //设置全局配置的 sessionFactory 和 dbType - initGlobalConfig(configuration, sessionFactory, dbType); + // 设置全局配置的 sessionFactory + initGlobalConfig(configuration, sessionFactory); printBanner(); @@ -115,10 +112,9 @@ public class FlexSqlSessionFactoryBuilder extends SqlSessionFactoryBuilder { * @param config * @param sessionFactory */ - private void initGlobalConfig(Configuration config, SqlSessionFactory sessionFactory, DbType dbType) { + private void initGlobalConfig(Configuration config, SqlSessionFactory sessionFactory) { FlexGlobalConfig flexGlobalConfig = new FlexGlobalConfig(); flexGlobalConfig.setSqlSessionFactory(sessionFactory); - flexGlobalConfig.setDbType(dbType); flexGlobalConfig.setConfiguration(config); String environmentId = config.getEnvironment().getId();