Commit adb5ee01 by fengshuonan

重构初始化sqlSessionFactory的过程

parent 3232636f
package cn.stylefeng.guns.dbcontainer.core.context; package cn.stylefeng.guns.dbcontainer.core.context;
import cn.stylefeng.guns.dbcontainer.core.collector.SqlSessionFactoryCreator;
import cn.stylefeng.guns.dbcontainer.core.exception.DataSourceInitException;
import cn.stylefeng.roses.core.config.properties.DruidProperties;
import cn.stylefeng.roses.core.util.SpringContextHolder;
import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactory;
import javax.sql.DataSource;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import static cn.stylefeng.guns.dbcontainer.core.context.DataSourceContext.MASTER_DATASOURCE_NAME;
/** /**
* mybatis的sqlSessionFactory的上下文容器(单例) * mybatis的sqlSessionFactory的上下文容器(单例)
* *
...@@ -35,4 +42,39 @@ public class SqlSessionFactoryContext { ...@@ -35,4 +42,39 @@ public class SqlSessionFactoryContext {
return sqlSessionFactories; return sqlSessionFactories;
} }
/**
* 初始化数据库中的数据源的SqlSessionFactory
*
* @author fengshuonan
* @Date 2019-06-15 19:51
*/
public static void initBaseSqlSessionFactory(SqlSessionFactoryCreator sqlSessionFactoryCreator) {
//初始化数据源容器
try {
DruidProperties druidProperties = SpringContextHolder.getBean(DruidProperties.class);
DataSourceContext.initDataSource(druidProperties);
} catch (Exception e) {
throw new DataSourceInitException(DataSourceInitException.ExEnum.INIT_DATA_SOURCE_ERROR);
}
//获取数据库的数据源
Map<String, DataSource> dataSources = DataSourceContext.getDataSources();
//创建数据库中数据源的sqlSessionFactory
for (Map.Entry<String, DataSource> entry : dataSources.entrySet()) {
String dbName = entry.getKey();
DataSource dataSource = entry.getValue();
//如果是主数据源,跳过,否则会冲突
if (MASTER_DATASOURCE_NAME.equals(dbName)) {
continue;
} else {
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryCreator.createSqlSessionFactory(dataSource);
SqlSessionFactoryContext.addSqlSessionFactory(dbName, sqlSessionFactory);
}
}
}
} }
...@@ -16,10 +16,7 @@ ...@@ -16,10 +16,7 @@
package cn.stylefeng.guns.config.datasource; package cn.stylefeng.guns.config.datasource;
import cn.stylefeng.guns.dbcontainer.core.collector.SqlSessionFactoryCreator; import cn.stylefeng.guns.dbcontainer.core.collector.SqlSessionFactoryCreator;
import cn.stylefeng.guns.dbcontainer.core.context.DataSourceContext;
import cn.stylefeng.guns.dbcontainer.core.context.SqlSessionFactoryContext; import cn.stylefeng.guns.dbcontainer.core.context.SqlSessionFactoryContext;
import cn.stylefeng.guns.dbcontainer.core.exception.DataSourceInitException;
import cn.stylefeng.roses.core.config.properties.DruidProperties;
import cn.stylefeng.roses.core.mutidatasource.mybatis.OptionalSqlSessionTemplate; import cn.stylefeng.roses.core.mutidatasource.mybatis.OptionalSqlSessionTemplate;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactory;
...@@ -30,7 +27,6 @@ import org.springframework.context.annotation.Import; ...@@ -30,7 +27,6 @@ import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.Primary; import org.springframework.context.annotation.Primary;
import javax.sql.DataSource; import javax.sql.DataSource;
import java.util.Map;
import static cn.stylefeng.guns.dbcontainer.core.context.DataSourceContext.MASTER_DATASOURCE_NAME; import static cn.stylefeng.guns.dbcontainer.core.context.DataSourceContext.MASTER_DATASOURCE_NAME;
...@@ -62,34 +58,13 @@ public class SqlSessionFactoryConfig { ...@@ -62,34 +58,13 @@ public class SqlSessionFactoryConfig {
*/ */
@Bean(name = "gunsSqlSessionTemplate") @Bean(name = "gunsSqlSessionTemplate")
public OptionalSqlSessionTemplate gunsSqlSessionTemplate(@Qualifier("sqlSessionFactoryPrimary") SqlSessionFactory sqlSessionFactoryPrimary, public OptionalSqlSessionTemplate gunsSqlSessionTemplate(@Qualifier("sqlSessionFactoryPrimary") SqlSessionFactory sqlSessionFactoryPrimary,
@Qualifier("druidProperties") DruidProperties druidProperties,
SqlSessionFactoryCreator sqlSessionFactoryCreator) { SqlSessionFactoryCreator sqlSessionFactoryCreator) {
//初始化数据源容器
try {
DataSourceContext.initDataSource(druidProperties);
} catch (Exception e) {
throw new DataSourceInitException(DataSourceInitException.ExEnum.INIT_DATA_SOURCE_ERROR);
}
//先添加主数据源 //添加主数据源的SqlSessionFactory
SqlSessionFactoryContext.addSqlSessionFactory(MASTER_DATASOURCE_NAME, sqlSessionFactoryPrimary); SqlSessionFactoryContext.addSqlSessionFactory(MASTER_DATASOURCE_NAME, sqlSessionFactoryPrimary);
//获取数据库的数据源 //初始化其他数据源的SqlSessionFactory的容器
Map<String, DataSource> dataSources = DataSourceContext.getDataSources(); SqlSessionFactoryContext.initBaseSqlSessionFactory(sqlSessionFactoryCreator);
//创建其他sqlSessionFactory
for (Map.Entry<String, DataSource> entry : dataSources.entrySet()) {
String dbName = entry.getKey();
DataSource dataSource = entry.getValue();
//如果是主数据源,跳过,否则会冲突
if (MASTER_DATASOURCE_NAME.equals(dbName)) {
continue;
} else {
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryCreator.createSqlSessionFactory(dataSource);
SqlSessionFactoryContext.addSqlSessionFactory(dbName, sqlSessionFactory);
}
}
return new OptionalSqlSessionTemplate(sqlSessionFactoryPrimary, SqlSessionFactoryContext.getSqlSessionFactorys()); return new OptionalSqlSessionTemplate(sqlSessionFactoryPrimary, SqlSessionFactoryContext.getSqlSessionFactorys());
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment