目的:
在springBoot
項目中添加database1
數據庫和database2
數據庫
第一步:修改application.properties
配置文件
1. 在application.properties
文件中追加了以下內容
#mysql database1數據庫
spring.datasource.database1.url=jdbc:mysql://10.10.10.10/database1?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
spring.datasource.database1.username=root1
spring.datasource.database1.password=123456
#mysql database2數據庫
spring.datasource.rule.url=jdbc:mysql://10.10.10.10/database2?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&serverTimezone=UTC
spring.datasource.database2.username=root2
spring.datasource.database2.password=123456
2. 在application.properties
文件中追加數據庫連接驅動的配置信息
確定好數據庫連接方式,並選擇對應的驅動,本項目選擇druid的連接方式:
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
第二步:創建Database1SourceConfig
配置文件
1. 在項目路徑下創建config
文件夾;
2. 在config
文件夾下,創建Database1SourceConfig
文件,用於存放database1
的配置文件;
3. 在Database1SourceConfig
文件中,主要用於配置DataSource
、配置SessionFactory
內容,然後根據具體情況,選擇配置SqlSessionTemplate
,和事務管理器TransactionManager
;
具體database1SourceConfig
內示例代碼如下:
import com.alibaba.druid.pool.DruidDataSourceFactory;
import java.util.Properties;
import javax.sql.DataSource;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
@Slf4j
@Configuration
public class Database1SourceConfig{
@Autowired
private Environment environment;// 配置文件
//配置`DataSource`
@Bean(name = "database1DataSource")
public DataSource getBasedbDataSource() throws Exception {
Properties props = new Properties();
props.put("driverClassName", environment.getProperty("spring.datasource.driver-class-name"));
props.put("url", environment.getProperty("spring.datasource.Database1.url"));
props.put("username", environment.getProperty("spring.datasource.Database1.username"));
props.put("password", environment.getProperty("spring.datasource.Database1.password"));
log.info("DruidDataSource configuration" + props);
return DruidDataSourceFactory.createDataSource(props);
}
//配置`SessionFactory`
@Bean(name = "database1SessionFactory")
//@Primary用於設置主從關係,即默認使用此配置信息
@Primary
public SqlSessionFactory database1SessionFactoryBean(@Qualifier("Database1DataSource") DataSource dataSource) {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
/* PageInterceptor pageInterceptor = new PageInterceptor();
Properties properties = new Properties();
properties.setProperty("reasonable", "true");
properties.setProperty("supportMethodsArguments", "true");
properties.setProperty("returnPageInfo", "check");
properties.setProperty("rowBoundsWithCount", "false");
properties.setProperty("params", "count=countSql");
properties.setProperty("offsetAsPageNum", "false");
properties.setProperty("helperDialect", "mysql");
pageInterceptor.setProperties(properties);*/
//添加插件
bean.setPlugins(new Interceptor[]{});
//添加XML目錄
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
try {
bean.setMapperLocations(resolver.getResources("classpath:mapping/database1/*.xml"));
return bean.getObject();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
//創建SqlSessionTemplate 【非必須】
@Bean(name = "database1SqlSessionTemplate")
@Primary
public SqlSessionTemplate secondSqlSessionTemplate(@Qualifier("database1SessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception{
return new SqlSessionTemplate(sqlSessionFactory);
}
// 創建事務管理器 【非必須】
@Bean(name = "database1TransactionManager")
@Primary
public DataSourceTransactionManager secondTransactionManager(@Qualifier("database1DataSource") DataSource dataSource){
return new DataSourceTransactionManager(dataSource);
}
}
第三步:同上,在config
文件夾下創建Database2SourceConfig
配置文件
Database2SourceConfig
代碼如下:
import com.alibaba.druid.pool.DruidDataSourceFactory;
import java.util.Properties;
import javax.sql.DataSource;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
@Slf4j
@Configuration
public class Database2SourceConfig{
@Autowired
private Environment environment;// 配置文件
//配置`DataSource`
@Bean(name = "database2DataSource")
public DataSource getBasedbDataSource() throws Exception {
Properties props = new Properties();
props.put("driverClassName", environment.getProperty("spring.datasource.driver-class-name"));
props.put("url", environment.getProperty("spring.datasource.Database2.url"));
props.put("username", environment.getProperty("spring.datasource.Database2.username"));
props.put("password", environment.getProperty("spring.datasource.Database2.password"));
log.info("DruidDataSource configuration" + props);
return DruidDataSourceFactory.createDataSource(props);
}
//配置`SessionFactory`
@Bean(name = "database2SessionFactory")
public SqlSessionFactory database2SessionFactoryBean(@Qualifier("Database2DataSource") DataSource dataSource) {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
/* PageInterceptor pageInterceptor = new PageInterceptor();
Properties properties = new Properties();
properties.setProperty("reasonable", "true");
properties.setProperty("supportMethodsArguments", "true");
properties.setProperty("returnPageInfo", "check");
properties.setProperty("rowBoundsWithCount", "false");
properties.setProperty("params", "count=countSql");
properties.setProperty("offsetAsPageNum", "false");
properties.setProperty("helperDialect", "mysql");
pageInterceptor.setProperties(properties);*/
//添加插件
bean.setPlugins(new Interceptor[]{});
//添加XML目錄
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
try {
bean.setMapperLocations(resolver.getResources("classpath:mapping/database2/*.xml"));
return bean.getObject();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
//創建SqlSessionTemplate 【非必須】
@Bean(name = "database2SqlSessionTemplate")
public SqlSessionTemplate secondSqlSessionTemplate(@Qualifier("database2SessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception{
return new SqlSessionTemplate(sqlSessionFactory);
}
// 創建事務管理器 【非必須】
@Bean(name = "database2TransactionManager")
public DataSourceTransactionManager secondTransactionManager(@Qualifier("database2DataSource") DataSource dataSource){
return new DataSourceTransactionManager(dataSource);
}
}
第四步:配置DataBase*MyBatisMapperScannerConfig
配置信息,用於指定dao
的路徑
- 在
config
文件下分別創建DataBase1MyBatisMapperScannerConfig
和DataBase2MyBatisMapperScannerConfig
兩個文件,內容分別如下: - 下面basePackages 寫上該數據庫對應的mapper文件的路徑,該mapper文件下一層就是xml文件
@Configuration
@AutoConfigureAfter(DataBase1DataSourceConfig.class)
public class DataBase1MyBatisMapperScannerConfig {
@Bean
public MapperScannerConfigurer mapperScannerConfigurer1() {
MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
mapperScannerConfigurer.setSqlSessionFactoryBeanName("dataBase1lSessionFactory");
mapperScannerConfigurer.setBasePackage("com.zjtmeng.dao.dataBase1");
return mapperScannerConfigurer;
}
}
@Configuration
@AutoConfigureAfter(DataBase2DataSourceConfig.class)
public class DataBase2MyBatisMapperScannerConfig {
@Bean
public MapperScannerConfigurer mapperScannerConfigurer1() {
MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
mapperScannerConfigurer.setSqlSessionFactoryBeanName("dataBase2lSessionFactory");
mapperScannerConfigurer.setBasePackage("com.zjtmeng.dao.dataBase1");
return mapperScannerConfigurer;
}
}