1.配置文件
spring.datasource.a.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.a.jdbc-url=jdbc:mysql://127.0.0.1:3306/test_a?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.a.username=root
spring.datasource.a.password=root
spring.datasource.b.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.b.jdbc-url=jdbc:mysql://127.0.0.1:3306/test_b?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.b.username=root
spring.datasource.b.password=root
2.數據源配置類
對應a數據源的配置類
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.mybatis.spring.boot.autoconfigure.SpringBootVFS;
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;
@Configuration
@MapperScan(basePackages = "com.xxx.test.mapper.a", sqlSessionFactoryRef = "testASqlSessionFactory")
public class DataSourceConfigA {
//自動注入DataSource的屬性
@Bean(name = "testADataSource")
@ConfigurationProperties(prefix = "spring.datasource.a")
public DataSource getDateSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "testASqlSessionFactory")
public SqlSessionFactory getSqlSessionFactory(@Qualifier("testADataSource") DataSource datasource)
throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(datasource);
//設置model的全包名
bean.setTypeAliasesPackage("com.xxx.test.model");
//這個必須加,不然打包後配置的TypeAliasesPackage不起作用,如果xml中用到resultType="類名"會報錯找不到model中的類
bean.setVfs(SpringBootVFS.class);
return bean.getObject();
}
@Bean("testASqlSessionTemplate")
public SqlSessionTemplate getSqlsessiontemplate(
@Qualifier("testASqlSessionFactory") SqlSessionFactory sessionfactory) {
//開啓從表的字段名到類的屬性名自動映射
sessionfactory.getConfiguration().setMapUnderscoreToCamelCase(true);
return new SqlSessionTemplate(sessionfactory);
}
}
對應b數據源的配置類
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.mybatis.spring.boot.autoconfigure.SpringBootVFS;
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;
@Configuration
@MapperScan(basePackages = "com.xxx.test.mapper.b", sqlSessionFactoryRef = "testBSqlSessionFactory")
public class DataSourceConfigB {
@Bean(name = "testADataSource")
@ConfigurationProperties(prefix = "spring.datasource.b")
public DataSource getDateSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "testBSqlSessionFactory")
public SqlSessionFactory getSqlSessionFactory(@Qualifier("testBDataSource") DataSource datasource)
throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(datasource);
bean.setTypeAliasesPackage("com.xxx.test.model");
//這個必須加,不然打包後配置的TypeAliasesPackage不起作用,如果xml中用到resultType="類名"會報錯找不到model中的類
bean.setVfs(SpringBootVFS.class);
return bean.getObject();
}
@Bean("testBSqlSessionTemplate")
public SqlSessionTemplate getSqlsessiontemplate(
@Qualifier("testBSqlSessionFactory") SqlSessionFactory sessionfactory) {
sessionfactory.getConfiguration().setMapUnderscoreToCamelCase(true);
return new SqlSessionTemplate(sessionfactory);
}
}
3.項目包結構
/src/main/java
com.xxx.test
mapper
a
TestA.java
TestA.xml
b
TestB.java
TestB.xml
model
A.java
B.java
4. 注意事項
//這個必須加,不然打包後配置的TypeAliasesPackage不起作用,如果xml中用到resultType="類名"會報錯找不到model中的類
bean.setVfs(SpringBootVFS.class);