application.yml
spring
:
datasource
:
###
会员数据库
member
:
jdbc-url
: jdbc:mysql://localhost:3306/user
username
: root
password
: root
driver-class-name
: com.mysql.jdbc.Driver
###
订单数据库
order
:
jdbc-url
: jdbc:mysql://localhost:3306/order
username
: root
password
: root
driver-class-name
: com.mysql.jdbc.Driver
|
备注:如果是SpringBoot2配置多数据源 ,报如下错误:
“jdbcUrl is required with driverClassName.”或者Cause: java.lang.IllegalArgumentException: dataSource or dataSourceClassName or jdbcUrl is required.] with root cause
解决方案:
spring.datasource.url 和spring.datasource.driverClassName,换成
spring.datasource.jdbc-url和spring.datasource.driver-class-name
数据库
数据源相关配置
会员数据源
@Configuration
@MapperScan(basePackages =
"com.member.mapper"
, sqlSessionFactoryRef =
"memberSqlSessionFactory"
)
public class
MemberDataSourceConfig {
/**
*
将会员
db
注册到容器中
*
*
@return
*/
@Bean(name =
"memberDataSource"
)
@ConfigurationProperties(prefix =
"spring.datasource.member"
)
public
DataSource memberDataSource() {
return
DataSourceBuilder.
create
().build();
}
/**
*
将会员
SqlSessionFactory
注册到容器中
*
*
@param
dataSource
*
@return
*
@throws
Exception
*/
@Bean(name =
"memberSqlSessionFactory"
)
public
SqlSessionFactory memberSqlSessionFactory(@Qualifier(
"memberDataSource"
) DataSource dataSource)
throws
Exception {
SqlSessionFactoryBean sqlSessionFactoryBean =
new
SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(memberDataSource());
return
sqlSessionFactoryBean.getObject();
}
/**
*
创建会员管理器
*
*
@param
dataSource
*
@return
*/
@Bean(name =
"memberTransactionManager"
)
public
DataSourceTransactionManager memberTransactionManager(@Qualifier(
"memberDataSource"
) DataSource dataSource) {
return new
DataSourceTransactionManager(dataSource);
}
/**
*
创建订单
sqlSesion
模版
*
*
@param
sqlSessionFactory
*
@return
*
@throws
Exception
*/
@Bean(name =
"memberSqlSessionTemplate"
)
public
SqlSessionTemplate menberSqlSessionTemplate(
@Qualifier(
"memberSqlSessionFactory"
) SqlSessionFactory sqlSessionFactory)
throws
Exception {
return new
SqlSessionTemplate(sqlSessionFactory);
}
}
|
订单数据源
@Configuration
@MapperScan(basePackages =
"com.order.mapper"
, sqlSessionFactoryRef =
"orderSqlSessionFactory"
)
public class
OrderDataSourceConfig {
/**
*
将订单
db
注册到容器中
*
*
@return
*/
@Bean(name =
"orderDataSource"
)
@ConfigurationProperties(prefix =
"spring.datasource.order"
)
public
DataSource orderDataSource() {
return
DataSourceBuilder.
create
().build();
}
/**
*
将订单
SqlSessionFactory
注册到容器中
*
*
@param
dataSource
*
@return
*
@throws
Exception
*/
@Bean(name =
"orderSqlSessionFactory"
)
public
SqlSessionFactory orderSqlSessionFactory(@Qualifier(
"orderDataSource"
) DataSource dataSource)
throws
Exception {
SqlSessionFactoryBean sqlSessionFactoryBean =
new
SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(orderDataSource());
return
sqlSessionFactoryBean.getObject();
}
/**
*
创建订单管理器
*
*
@param
dataSource
*
@return
*/
@Bean(name =
"orderTransactionManager"
)
public
DataSourceTransactionManager orderTransactionManager(@Qualifier(
"orderDataSource"
) DataSource dataSource) {
return new
DataSourceTransactionManager(dataSource);
}
/**
*
创建订单
sqlSesion
模版
*
*
@param
sqlSessionFactory
*
@return
*
@throws
Exception
*/
@Bean(name =
"orderSqlSessionTemplate"
)
public
SqlSessionTemplate menberSqlSessionTemplate(
@Qualifier(
"orderSqlSessionFactory"
) SqlSessionFactory sqlSessionFactory)
throws
Exception {
return new
SqlSessionTemplate(sqlSessionFactory);
}
}
|
4.4.2创建分包
Mapper
会员
mapper
public interface
MemberMapper {
@Insert(
"insert into users values(null,#{name},#{age});"
)
public int
addUser(@Param(
"name"
) String name, @Param(
"age"
) Integer age);
}
|
订单
mapper
public interface
OrderMapper {
@Insert(
"insert into order_number values(null,#{number});"
)
int
inserOrder(@Param(
"number"
) String number);
}
|
如果多数据源使用事务报错的话
cted single matching bean but found 2: memberTransactionManager,orderTransactionManager
@Transactional(transactionManager = "memberTransactionManager")
明确指定使用那个事务管理器即可
@EnableConfigurationProperties({OrderConfig.
class
, MemberConfig.
class
})