SpringBoot整合多数据源(分布式,微服务)
在一个项目中,有多个Jdbc连接
多数据源会产生的问题:事物管理、分包结构
在实际项目中,怎么搭建多数据源、区分数据源
举例:在一个项目中2个数据源test001,test002
1、分包结构(一般开发者使用多)
com.lly.test001----访问test001数据库
dao
service
com.lly.test002----访问test002数据库
dao
service
分布式事务解决方案:jta+automatic(传统项目)
2、使用注解方式
com.lly
dao
service
@datascousetest001(自定义注解)
public void test001{
}
@datascousetest002(自定义注解)
public void test002{
}
application.properties配置数据源
1、分包结构(一般开发者使用多)
#非系统默认的需要创建代码文件
spring.datasource.test1.driverClassName = com.mysql.jdbc.Driver
spring.datasource.test1.url = jdbc:mysql://localhost:3306/test001?useUnicode=true&characterEncoding=utf-8
spring.datasource.test1.username = root
spring.datasource.test1.password = root
spring.datasource.test2.driverClassName = com.mysql.jdbc.Driver
spring.datasource.test2.url = jdbc:mysql://localhost:3306/test002?useUnicode=true&characterEncoding=utf-8
spring.datasource.test2.username = root
spring.datasource.test2.password = root
spring.datasource.test1.driverClassName = com.mysql.jdbc.Driver
spring.datasource.test1.url = jdbc:mysql://localhost:3306/test001?useUnicode=true&characterEncoding=utf-8
spring.datasource.test1.username = root
spring.datasource.test1.password = root
spring.datasource.test2.driverClassName = com.mysql.jdbc.Driver
spring.datasource.test2.url = jdbc:mysql://localhost:3306/test002?useUnicode=true&characterEncoding=utf-8
spring.datasource.test2.username = root
spring.datasource.test2.password = root
加载数据源
@
Configuration
//
注册到
springboot
容器中
@MapperScan
(basePackages =
"com.itmayiedu.user1"
, sqlSessionFactoryRef =
"test1SqlSessionFactory"
)
public
class
DataSource1Config {
/**
*
*
@methodDesc
:
功能描述
:(
配置
test1
数据库
)
*
@param
:
@return
*
@createTime
:2017
年
9
月
17
日
下午
3:16:44
*
@returnType
:@return DataSource
*
@copyright
:
上海每特教育科技有限公司
*
@QQ
:644064779
*/
@Bean
(name =
"test1DataSource"
)
@Primary
@ConfigurationProperties
(prefix =
"spring.datasource.test1"
)
public
DataSource testDataSource() {
return
DataSourceBuilder.
create
().build();
}
/**
*
*
@methodDesc
:
功能描述
:(test1
sql
会话工厂
)
*
@author
:
余胜军
*
@param
:
@param
* dataSource
*
@param
:
@return
*
@param
:
@throws
* Exception
*
@createTime
:2017
年
9
月
17
日
下午
3:17:08
*
@returnType
:@param dataSource
*
@returnType
:@return
*
@returnType
:@throws Exception SqlSessionFactory
*
@copyright
:
上海每特教育科技有限公司
*
@QQ
:644064779
*/
@Bean
(name =
"test1SqlSessionFactory"
)
@Primary
public
SqlSessionFactory testSqlSessionFactory(
@Qualifier
(
"test1DataSource"
) DataSource
dataSource
)
throws
Exception {
SqlSessionFactoryBean
bean
=
new
SqlSessionFactoryBean();
bean
.setDataSource(
dataSource
);
// bean.setMapperLocations(
// new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/
mapper
/test1/*.
xml
"));
return
bean
.getObject();
}
/**
*
*
@methodDesc
:
功能描述
:(test1
事物管理
)
*
@author
:
余胜军
*
@param
:
@param
* dataSource
*
@param
:
@return
*
@param
:
@throws
* Exception
*
@createTime
:2017
年
9
月
17
日
下午
3:17:08
*
@returnType
:@param dataSource
*
@returnType
:@return
*
@returnType
:@throws Exception SqlSessionFactory
*
@copyright
:
上海每特教育科技有限公司
*
@QQ
:644064779
*/
@Bean
(name =
"test1TransactionManager"
)
@Primary
public
DataSourceTransactionManager testTransactionManager(
@Qualifier
(
"test1DataSource"
) DataSource
dataSource
) {
return
new
DataSourceTransactionManager(
dataSource
);
}
@Bean
(name =
"test1SqlSessionTemplate"
)
@Primary
public
SqlSessionTemplate testSqlSessionTemplate(
@Qualifier
(
"test1SqlSessionFactory"
) SqlSessionFactory
sqlSessionFactory
)
throws
Exception {
return
new
SqlSessionTemplate(
sqlSessionFactory
);
}
}