Spring Boot集成MyBatis配置多數據源(DataSource)詳細教程

一、工程創建

申明一點本案例使用的springboot版本是1.5.6.RELEASE。首先需要創建springBoot項目,添加springBoot框架對MyBatis支持的相關依賴Jar:分別添加MyBatis、MySQL以及Web依賴以及Druid依賴,這裏添加Druid依賴必須是Spring boot支持的Druid,不能使用傳統的Druid。完整的依賴jar如下:

<dependencies>
	<dependency>
		<groupId>com.alibaba</groupId>
		<artifactId>druid-spring-boot-starter</artifactId>
		<version>1.1.10</version>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
	<dependency>
		<groupId>com.alibaba</groupId>
		<artifactId>fastjson</artifactId>
		<version>1.2.28</version>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-test</artifactId>
		<scope>test</scope>
	</dependency>
	<dependency>
		<groupId>org.mybatis.spring.boot</groupId>
		<artifactId>mybatis-spring-boot-starter</artifactId>
		<version>1.3.3</version>
	</dependency>
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>8.0.15</version>
		<scope>runtime</scope>
	</dependency>
</dependencies>

二、多數據源配置

接下來配置多數據源,首先在配置文件application.properties中配置2個數據庫基本信息,然後配置兩個DataSource即可,這裏筆者把代碼貼出來,並且附上解釋說明信息。application.properties文件的配置:

server.port=7001
spring.application.name=springCloud-multiple-dataSources
spring.instance.instance-id=${spring.application.name}:${server.port}
  
## 數據源1的配置(此處***替換成自己數據庫的連接串以及用戶名和密碼)
spring.datasource.wxdev.url= ****
spring.datasource.wxdev.username=****
spring.datasource.wxdev.password=****
spring.datasource.wxdev.driverClassName=com.mysql.jdbc.Driver
spring.datasource.wxdev.type=com.alibaba.druid.pool.DruidDataSource

## 數據源2的配置(此處***替換成自己數據庫的連接串以及用戶名和密碼) 
spring.datasource.platform.url=***
spring.datasource.platform.username=****
spring.datasource.platform.password=****
spring.datasource.platform.driverClassName=com.mysql.jdbc.Driver
spring.datasource.platform.type=com.alibaba.druid.pool.DruidDataSource

logging.config=classpath:logback_spring.xml

## mybatis mapper文件配置
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
mybatis.config-location=classpath:mybatis/mybatis-config.xml

然後再定義兩個DataSource的配置類(分別對應上面的2個數據源),如下:

@Configuration
@MapperScan(basePackages = "com.chenyun.cloud.mapper.wxdev",sqlSessionTemplateRef = "SqlSessionTemplate1")
public class DataSourceOneConfig {

	private static final String MAPPER_LOCATION = "classpath:mybatis/mapper/wxdev/*.xml";

	@Value("${spring.datasource.wxdev.url}")
	private String url;

	@Value("${spring.datasource.wxdev.username}")
	private String user;

	@Value("${spring.datasource.wxdev.password}")
	private String password;

	@Value("${spring.datasource.wxdev.driverClassName}")
	private String driverClass;

	@Bean
	@Primary
	public DataSource dataSourceOne() {
		DruidDataSource dataSource = new DruidDataSource();
		dataSource.setDriverClassName(driverClass);
		dataSource.setUrl(url);
		dataSource.setUsername(user);
		dataSource.setPassword(password);
		return dataSource;
	}

	@Bean(name = "dataSourceOneTransactionManager")
	public DataSourceTransactionManager transactionManager() {
		return new DataSourceTransactionManager(dataSourceOne());
	}

	@Bean(name = "SqlSessionFactory1")
	public SqlSessionFactory getSqlSessionFactory1(@Qualifier("dataSourceOne") DataSource dataSource)
			throws Exception {
		final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
		sessionFactory.setDataSource(dataSource);
		sessionFactory.setMapperLocations(
				new PathMatchingResourcePatternResolver().getResources(MAPPER_LOCATION));
		return sessionFactory.getObject();
	}

	@Bean(name = "SqlSessionTemplate1")
	public SqlSessionTemplate getSqlSessionTemplate1(
			@Qualifier("SqlSessionFactory1") SqlSessionFactory sqlSessionFactory) throws Exception {
		return new SqlSessionTemplate(sqlSessionFactory);
	}		
}
@Configuration
@MapperScan(basePackages = "com.chenyun.cloud.mapper.platform", sqlSessionTemplateRef = "SqlSessionTemplate2")
public class DataSourceTwoConfig {

	private static final String MAPPER_LOCATION = "classpath:mybatis/mapper/platform/*.xml";

	@Value("${spring.datasource.platform.url}")
	private String url;

	@Value("${spring.datasource.platform.username}")
	private String user;

	@Value("${spring.datasource.platform.password}")
	private String password;

	@Value("${spring.datasource.platform.driverClassName}")
	private String driverClass;
	
	@Bean(name = "dataSourceTwo")
	public DataSource dataSourceTwo() {
		DruidDataSource dataSource = new DruidDataSource();
		dataSource.setDriverClassName(driverClass);
		dataSource.setUrl(url);
		dataSource.setUsername(user);
		dataSource.setPassword(password);
		return dataSource;
	}

	@Bean(name = "dataSourceOneTransactionManager")
	public DataSourceTransactionManager transactionManager() {
		return new DataSourceTransactionManager(dataSourceTwo());
	}

	@Bean(name = "SqlSessionFactory2")
	public SqlSessionFactory getSqlSessionFactory2(@Qualifier("dataSourceTwo") DataSource dataSourceTwo)
			throws Exception {
		final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
		sessionFactory.setDataSource(dataSourceTwo);
		sessionFactory.setMapperLocations(
				new PathMatchingResourcePatternResolver().getResources(MAPPER_LOCATION));
		return sessionFactory.getObject();
	}

	@Bean(name = "SqlSessionTemplate2")
	public SqlSessionTemplate getSqlSessionTemplate2(
			@Qualifier("SqlSessionFactory2") SqlSessionFactory sqlSessionFactory) throws Exception {
		return new SqlSessionTemplate(sqlSessionFactory);
	}
}

上面這個數據源配置類說明:在配置類上面加註解@Configuration表示這是一個可以被spring容器掃描到的配置類,配置類中註解@MapperScan表示要掃描的包路徑com.chenyun.cloud.mapper.platform,即該包下的Mapper接口將操作dataSourceTwo中的數據,對應的SqlSessionFactory和SqlSessionTemplate分別是sqlSessionFactory2和sqlSessionTemplate2,在配置類內部,分別提供SqlSessionFactory和SqlSessionTemplate即可。需要注意的是,多數據源配置必須指定哪個數據源是主數據源,需用註解@Primary標明,例如本案例數據源dataSourceOne上的註解。

現在MyBatis多數據源就配置好了,接下來只需要在com.chenyun.cloud.mapper.wxdev和com.chenyun.cloud.mapper.platform包中提供不同的Mapper接口以及在resources目錄下面創建不同xml映射文件。

接下來,在Service中注入兩個不同的Mapper接口,就可以操作不同的數據源,關於springBoot集成MyBatis多數據源案例就分享到這裏,如有問題,掃碼關注公衆號,聯繫筆者。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章