之前自己练习的时候由于只用了一个数据库,所以没怎么用到多数据源配置。
然后这周实习用到了,记录一下。
pom.xml
这没有什么特别的,就是平常的连接mysql以及springboot的配置。
这里就简单列举一下,可以参考网上其他的如何创建项目的教程。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</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.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
application.properties
如果嫌冗余的话,可以创建一个application-datasource.properties中,
在application.properties中引用(spring.profiles.active = datasource)这个文件就可以。
这里就放在application.properties中了。
# AAA
spring.datasource.AAA.driverClassName = com.mysql.cj.jdbc.Driver
spring.datasource.AAA.url = jdbc:mysql://xxx:3306/xxx?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8
spring.datasource.AAA.username = root
spring.datasource.AAA.password = 9fhj32z12feriz3n2
# BBB
spring.datasource.BBB.driverClassName = com.mysql.cj.jdbc.Driver
spring.datasource.BBB.url = jdbc:mysql://xxx:3306/xxx?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8
spring.datasource.BBB.username = root
spring.datasource.BBB.password = asdasd
# CCC
spring.datasource.CCC.driverClassName = com.mysql.cj.jdbc.Driver
spring.datasource.CCC.url = jdbc:mysql://xxx:3306/xxx?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8
spring.datasource.CCC.username = root
spring.datasource.CCC.password = root
Config
多个数据源需要选一个加上 @Primary 配置。
基本上都一样,就是改一下bean的名字就可以
@MapperScan(basePackages = “com.example.demo.aaa.mapper” 扫描mapper接口的包路径
@ConfigurationProperties(prefix = “xx”) 指定配置文件的数据源前缀bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources
(“classpath:mapper/*.xml”));
指定mapper接口对应 mapper.xml的路径
AAAConfig
@Configuration
@MapperScan(basePackages = "com.example.demo.aaa.mapper", sqlSessionTemplateRef = "sqlSessionTemplate")
public class AAAConfig {
@Bean(name = "dataSource")
@ConfigurationProperties(prefix = "spring.datasource.AAA")
@Primary
public DataSource testDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "sqlSessionFactory")
@Primary
public SqlSessionFactory testSqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
// bean.setConfigLocation(new PathMatchingResourcePatternResolver().getResource("classpath:mybatis-config.xml"));
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
return bean.getObject();
}
@Bean(name = "transactionManager")
@Primary
public DataSourceTransactionManager testTransactionManager(@Qualifier("dataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "sqlSessionTemplate")
@Primary
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("sqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
BBBConfig
@Configuration
@MapperScan(basePackages = "com.example.demo.bbb.mapper", sqlSessionTemplateRef = "sqlSessionTemplateBBB")
public class BBBConfig {
@Bean(name = "dataSourceBBB")
@ConfigurationProperties(prefix = "spring.datasource.BBB")
public DataSource VvmusicMetadataReadDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "sqlSessionFactoryBBB")
public SqlSessionFactory testSqlSessionFactory(@Qualifier("dataSourceBBB") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
// bean.setConfigLocation(new PathMatchingResourcePatternResolver().getResource("classpath:mybatis-config.xml"));
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/BBB/*.xml"));
return bean.getObject();
}
@Bean(name = "transactionManagerBBB")
public DataSourceTransactionManager testTransactionManager(@Qualifier("dataSourceBBB") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "sqlSessionTemplateBBB")
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("sqlSessionFactoryBBB") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
CCCConfig
@Configuration
@MapperScan(basePackages = "com.example.demo.ccc.mapper", sqlSessionTemplateRef = "sqlSessionTemplateCCC")
public class CCCConfig {
@Bean(name = "dataSourceCCC")
@ConfigurationProperties(prefix = "spring.datasource.CCC")
public DataSource testDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "sqlSessionFactoryCCC")
public SqlSessionFactory testSqlSessionFactory(@Qualifier("dataSourceCCC") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
// bean.setConfigLocation(new PathMatchingResourcePatternResolver().getResource("classpath:mybatis-config.xml"));
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
return bean.getObject();
}
@Bean(name = "transactionManagerCCC")
public DataSourceTransactionManager testTransactionManager(@Qualifier("dataSourceCCC") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "sqlSessionTemplateCCC")
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("sqlSessionFactoryCCC") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
结构
应该就是这么多,接口测试就不写了 随便写个controller测一下就可以