Метод аннотации MyBatis для настройки нескольких источников данных аналогичен методу XML, с той лишь разницей, что метод аннотации не требует указания местоположения XML-файла.
Настройка информации об источнике данных
- application.properties
# 数据源一
spring.datasource.resource1.driver-class-name=com.mysql.jdbc.Driver
# 注意区分 spring.datasource.url 与自定义jdbc配置的 jdbc-url
spring.datasource.resource1.jdbc-url=jdbc:mysql://localhost:3306/game?useUnicode=true&characterEncoding=utf-8
spring.datasource.resource1.username=root
spring.datasource.resource1.password=root
# 数据源二
spring.datasource.resource2.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.resource2.jdbc-url=jdbc:mysql://localhost:3306/bookstore?useUnicode=true&characterEncoding=utf-8
spring.datasource.resource2.username=root
spring.datasource.resource2.password=root
Настройка нескольких источников данных
Шаги для интеграции источника данных конфигурации MyBatis следующие:
- Создать источник данных
Datasource
- Создайте фабрику сеансов сеансов
SqlSessionFactroy
- Создать транзакцию базы данных
DataSourceTransactionManager
- Создайте
SqlSessionTemplate
Наиболее важной частью является конфигурация источника данных, которую необходимо внедрять слой за слоем, сначала создаваяDataSource
, затем создайтеSqlSessionFactory
, а затем создайте диспетчер транзакцийDataSourceTransactionManager
, и, наконец, упакованы вSqlSessionTemplate
середина.
источник данных один
@Configuration
@MapperScan(basePackages = "com.example.mybatis.mapper.primary",
sqlSessionFactoryRef = "PrimarySqlSessionFactory")
public class PrimaryDataSourceConfig {
/**
* 配置数据源
*
* @return
*/
@Bean(name = "PrimaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.primary")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
/**
* 配置 sql 会话工厂
*/
@Bean(name = "PrimarySqlSessionFactory")
public SqlSessionFactory sessionFactory(@Qualifier("PrimaryDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
return bean.getObject();
}
/**
* 事务管理器
*/
@Bean(name = "PrimaryTransactionManager")
public DataSourceTransactionManager transactionManager(@Qualifier("PrimaryDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "PrimarySqlSessionTemplate")
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("PrimarySqlSessionFactory") SqlSessionFactory sessionFactory) {
return new SqlSessionTemplate(sessionFactory);
}
}
Источник данных два
@Configuration
@MapperScan(basePackages = "com.example.mybatis.mapper.secondary",
sqlSessionFactoryRef = "SecondarySqlSessionFactory")
public class SecondaryDataSourceConfig {
/**
* 配置数据源
*/
@Bean(name = "SecondaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.secondary")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
/**
* 配置 sql 会话工厂
*/
@Bean(name = "SecondarySqlSessionFactory")
public SqlSessionFactory sessionFactory(@Qualifier("SecondaryDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
return bean.getObject();
}
/**
* 事务管理器
*/
@Bean(name = "SecondaryTransactionManager")
public DataSourceTransactionManager transactionManager(@Qualifier("SecondaryDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "SecondarySqlSessionTemplate")
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("SecondarySqlSessionFactory") SqlSessionFactory sessionFactory) {
return new SqlSessionTemplate(sessionFactory);
}
}
Примечание. До Springboot 2.x аннотации требовались.@primary
Укажите основную библиотеку, иначе будет сообщено об ошибке.
Наконец, подробный код можно посмотреть в демонстрации этого примера.