下面记录一下单数据源的自动配置、使用Bean配置方式和多数据源配置与事务管理器扩配置。
单数据源配置
这里选用的是druid作为数据源,下面是Mysql驱动和druid数据池依赖
pom.xml包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency> 数据池的选用和数据库的配置
application.yml配置文件
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://139.9.183.232:3306/test?useSSL=false&characterEncoding=utf8
username: root
password: root 最后在启动类中进行mapper包的扫描
@MapperScan("com.example.springbootmysql01")
@SpringBootApplication
public class SpringbootMysql01Application {
public static void main(String[] args) {
SpringApplication.run(SpringbootMysql01Application.class, args);
}
}使用bean方式配置数据源
数据库的配置
sql.properties配置文件
mysql.driver-class-name=com.mysql.cj.jdbc.Driver mysql.url=jdbc:mysql://139.9.183.232:3306/test?useSSL=false&characterEncoding=utf8 mysql.username=root mysql.password=root
使用配置类配置数据源
@Configuration
@PropertySource(value = "classpath:sql.properties")
public class DataSourceConfig {
@Value("${mysql.driver-class-name}")
private String driverClassName;
@Value("${mysql.url}")
private String url;
@Value("${mysql.username}")
private String username;
@Value("${mysql.password}")
private String password;
@Bean
public DataSource setDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClassName);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
} 配置二,使用DataSourceBuilder方式构建数据源
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://139.9.183.232:3306/test?useSSL=false&characterEncoding=utf8
username: root
password: root @Configuration
public class DataSourceConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSourceDb1() {
return DataSourceBuilder.create().type(DruidDataSource.class).build();
}
} - 配置多数据源
在配置文件配置多个数据源地址
spring:
datasource-db1:
url: jdbc:mysql://139.9.183.232:3306/test?useSSL=false&characterEncoding=utf8
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: root
datasource-db2:
url: jdbc:mysql://139.9.183.232:3306/test?useSSL=false&characterEncoding=utf8
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: root
初始化数据源和事务管理器
@Configuration
public class DatasourceConfig {
/**
* 数据源1
* @return
*/
@Bean(name = "DataSources.DB1")
@ConfigurationProperties(prefix = "spring.datasource-db1")
public DataSource dataSourceDb1() {
return DataSourceBuilder.create().type(DruidDataSource.class).build();
}
/**
* 数据源2
* @return
*/
@Bean(name = "DataSources.DB2")
@ConfigurationProperties(prefix = "spring.datasource-db2")
public DataSource dataSourceDb2() {
return DataSourceBuilder.create().type(DruidDataSource.class).build();
}
/**
* 事务管理器1
* @param dataSource 数据源1
* @return
*/
@Primary
@Bean("transactionManager.DB1")
public DataSourceTransactionManager transactionManagerDB1(@Qualifier("DataSources.DB1") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
/**
* 事务管理器2
* @param dataSource 数据源1
* @return
*/
@Bean("transactionManager.DB2")
public DataSourceTransactionManager transactionManagerDB2(@Qualifier("DataSources.DB2") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
配置查询使用的SqlSessionFactoryBean
数据源一
配置com.example.springbootmysql03.mapper.db1包下使用sqlSessionFactoryBean.DB1数据源工厂
@Configuration
@MapperScan(value = "com.example.springbootmysql03.mapper.db1", sqlSessionFactoryRef = "sqlSessionFactoryBean.DB1")
public class MyBatisDB1Config {
@Autowired
@Qualifier("DataSources.DB1")
private DataSource dataSource;
@Bean("sqlSessionFactoryBean.DB1")
public SqlSessionFactoryBean sqlSessionFactoryBean() {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
return sqlSessionFactoryBean;
}
}
数据源二
配置com.example.springbootmysql03.mapper.db2包下使用sqlSessionFactoryBean.DB2数据源工厂
@Configuration
@MapperScan(value = "com.example.springbootmysql03.mapper.db2", sqlSessionFactoryRef = "sqlSessionFactoryBean.DB2")
public class MyBatisDB2Config {
@Autowired
@Qualifier("DataSources.DB2")
private DataSource dataSource;
@Bean("sqlSessionFactoryBean.DB2")
public SqlSessionFactoryBean sqlSessionFactoryBean() {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
return sqlSessionFactoryBean;
}
} 注意:在sqlsessionFactoryBean中可以配置加载xml配置文件
// 解决配置到配置文件中通过*配置找不到mapper文件的问题。 如果不设置这一行,在配置文件中,只能使用数组的方式一个个的罗列出来,并且要指定具体的文件名
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper_db2/*.xml")); 不同数据源事务管理器的使用
@SpringBootTest
class SpringbootMysql03ApplicationTests {
@Resource
private User1Mapper user1Mapper;
@Resource
private User2Mapper user2Mapper;
@Test
@Transactional(transactionManager = "transactionManager.DB1")
void testDB1() {
System.out.println(user1Mapper.get());
}
@Test
@Transactional(transactionManager = "transactionManager.DB2")
void testDB2() {
System.out.println(user2Mapper.get());
}
} 完!

京公网安备 11010502036488号