##首先在配置文件中配置两个数据源
数据源中用前缀区分:
bbs为一个数据源,test为另一个数据源,分别代表两个数据库
建database包配置两个数据源
详细代码如下
package com.muzijin.bbs.database;
import javax.sql.DataSource;
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.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
@Configuration//注冊到spring容器中
//配置mapper扫描的包
@MapperScan(basePackages="com.muzijin.bbs.mapper1",sqlSessionFactoryRef="bbsSqlSessionFactory")
public class DataSource1 {
/**
* 配置bbs数据库
*/
@Bean(name= "bbsDataSource")//名字可以自定义,和下面的同名参数保持一致即可
@ConfigurationProperties(prefix="spring.datasource.bbs")//取前缀为spring.datasource.bbs的配置
@Primary//设置默认数据库
public DataSource testDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name="bbsSqlSessionFactory")
@Primary
public SqlSessionFactory testSqlSessionFactory(@Qualifier("bbsDataSource")DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(
// 设置mybatis的xml所在位置
new PathMatchingResourcePatternResolver().getResources("classpath*:mappers/mapper1/*.xml"));
return bean.getObject();
}
/**
* 配置事务管理器
* @param dataSource
* @return
*/
@Bean(name="bbsTransactionManager")
@Primary
public DataSourceTransactionManager testTransactionManager(@Qualifier("bbsDataSource")DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name="bbsSqlSessionTemplate")
@Primary
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("bbsSqlSessionFactory")SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
package com.muzijin.bbs.database;
import javax.sql.DataSource;
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.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.ConfigurationPropertiesBinding;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
@Configuration//注冊到spring容器中
@MapperScan(basePackages="com.muzijin.bbs.mapper2",sqlSessionFactoryRef="testSqlSessionFactory")
public class DataSource2 {
/**
* 配置bbs数据库
*/
@Bean(name= "testDataSource")
@ConfigurationProperties(prefix="spring.datasource.test")
public DataSource testDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name="testSqlSessionFactory")
@Primary
public SqlSessionFactory testSqlSessionFactory(@Qualifier("testDataSource")DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(
// 设置mybatis的xml所在位置
new PathMatchingResourcePatternResolver().getResources("classpath*:mappers/mapper2/*.xml"));
return bean.getObject();
}
@Bean(name="testTransactionManager")
public DataSourceTransactionManager testTransactionManager(@Qualifier("testDataSource")DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name="testSqlSessionTemplate")
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("testSqlSessionFactory")SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
两个类配置不同的数据源,需要注意的就是
@ConfigurationProperties(prefix="spring.datasource.test")
引号中的字符串为你配置文件中的前缀
@MapperScan(basePackages="com.muzijin.bbs.mapper2",sqlSessionFactoryRef="testSqlSessionFactory")
前面的配置是配置对应mapper的包名,后面的变量名以及name="" 都可以自定义,保持一致就行
bean.setMapperLocations(
// 设置mybatis的xml所在位置
new PathMatchingResourcePatternResolver().getResources("classpath*:mappers/mapper2/*.xml"));
这一行的参数是配置对应的xml文件,一般情况把引号后面的改了就行了
为了区分,把之前的mapper包分为mapper1和mapper2两个包,mapper2里面存放的是test这个数据库的持久层接口
这样配置完,基本上就完成了,剩下步骤就和平时一样了,先写一个测试供参考
package com.muzijin.bbs.mapper2;
import com.muzijin.bbs.entity.UrlData;
public interface UrlDataMapper {
UrlData find();
}
urldata实体类的数据就不看了
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="com.muzijin.bbs.mapper2.UrlDataMapper">
<select id="find" resultType="com.muzijin.bbs.entity.UrlData">
SELECT
corpId
FROM
urldata
WHERE
id=1
</select>
</mapper>
测试类
package com.muzijin.bbs.mapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import com.muzijin.bbs.entity.UrlData;
import com.muzijin.bbs.mapper2.UrlDataMapper;
@RunWith(SpringRunner.class)
@SpringBootTest
public class UrlDataMapperTestCase {
@Autowired
private UrlDataMapper mapper;
@Test
public void test() {
System.err.println(mapper);
UrlData data = mapper.find();
System.err.println("data:"+data);
}
}