Commit adb5ee01 by fengshuonan

重构初始化sqlSessionFactory的过程

parent 3232636f
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 javax.sql.DataSource;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import static cn.stylefeng.guns.dbcontainer.core.context.DataSourceContext.MASTER_DATASOURCE_NAME;
/**
* mybatis的sqlSessionFactory的上下文容器(单例)
*
......@@ -35,4 +42,39 @@ public class SqlSessionFactoryContext {
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 @@
package cn.stylefeng.guns.config.datasource;
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.exception.DataSourceInitException;
import cn.stylefeng.roses.core.config.properties.DruidProperties;
import cn.stylefeng.roses.core.mutidatasource.mybatis.OptionalSqlSessionTemplate;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.session.SqlSessionFactory;
......@@ -30,7 +27,6 @@ import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.Primary;
import javax.sql.DataSource;
import java.util.Map;
import static cn.stylefeng.guns.dbcontainer.core.context.DataSourceContext.MASTER_DATASOURCE_NAME;
......@@ -62,34 +58,13 @@ public class SqlSessionFactoryConfig {
*/
@Bean(name = "gunsSqlSessionTemplate")
public OptionalSqlSessionTemplate gunsSqlSessionTemplate(@Qualifier("sqlSessionFactoryPrimary") SqlSessionFactory sqlSessionFactoryPrimary,
@Qualifier("druidProperties") DruidProperties druidProperties,
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);
//获取数据库的数据源
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);
}
}
//初始化其他数据源的SqlSessionFactory的容器
SqlSessionFactoryContext.initBaseSqlSessionFactory(sqlSessionFactoryCreator);
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