下面是“springboot配置druid多数据源的示例代码”的完整攻略。
目录
准备工作
在开始配置Druid多数据源之前,我们需要先进行一些准备工作:
- 确认使用的Spring Boot版本,本示例使用的是
2.4.2
版本。 - 添加相关依赖,包括
spring-boot-starter-jdbc
、druid-spring-boot-starter
等。
<dependencies>
<!-- Spring Boot JDBC依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- Druid连接池依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.6</version>
</dependency>
<!-- MySQL连接驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
</dependencies>
配置Druid数据源
在 application.yml
配置文件中添加如下配置:
spring:
datasource:
url: jdbc:mysql://localhost:3306/db1?characterEncoding=utf8&serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
type: com.alibaba.druid.pool.DruidDataSource
filters: stat
maxActive: 20
initialSize: 1
maxWait: 60000
minIdle: 1
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
这里我们使用的是Druid连接池来管理数据源,因此需要设置 type
参数为 com.alibaba.druid.pool.DruidDataSource
,并且添加Druid连接池的配置项,比如 maxActive
、initialSize
等。
配置多数据源
添加多数据源配置类 DataSourceConfig
,用于创建多个数据源,并通过 @Primary
注解指定默认数据源。
@Configuration
public class DataSourceConfig {
@Bean(name = "dataSource1")
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource1() {
return DruidDataSourceBuilder.create().build();
}
@Bean(name = "dataSource2")
@ConfigurationProperties(prefix = "spring.datasource2")
public DataSource dataSource2() {
return DruidDataSourceBuilder.create().build();
}
@Primary
@Bean(name = "dynamicDataSource")
public DataSource dynamicDataSource(@Qualifier("dataSource1") DataSource dataSource1,
@Qualifier("dataSource2") DataSource dataSource2) {
DynamicDataSource dynamicDataSource = new DynamicDataSource();
Map<Object, Object> dataSourceMap = new HashMap<>(2);
dataSourceMap.put("dataSource1", dataSource1);
dataSourceMap.put("dataSource2", dataSource2);
dynamicDataSource.setDefaultTargetDataSource(dataSource1);
dynamicDataSource.setTargetDataSources(dataSourceMap);
return dynamicDataSource;
}
}
在配置类中创建两个数据源 dataSource1
和 dataSource2
,并使用 @Qualifier
注解指定对应的 @Bean
名称,这里我们还可以为每个数据源指定不同的属性配置。
然后创建 dynamicDataSource
数据源,这里我们使用了 DynamicDataSource
类,其实现了 AbstractRoutingDataSource
接口,通过重写 determineCurrentLookupKey()
方法来动态切换数据源。
最后添加 @Primary
注解指定默认数据源为 dataSource1
。
测试多数据源
为了测试多数据源是否配置成功,我们可以添加一个测试方法,依次使用 dataSource1
和 dataSource2
执行SQL语句,确保两个数据源都能正常使用。
@Service
public class UserService {
@Autowired
@Qualifier("dynamicDataSource")
private DataSource dataSource;
public List<User> listUsers() {
List<User> userList = new ArrayList<>();
try (Connection conn = dataSource.getConnection()) {
Statement statement = conn.createStatement();
ResultSet rs = statement.executeQuery("SELECT * FROM user");
while (rs.next()) {
User user = new User();
user.setId(rs.getLong("id"));
user.setName(rs.getString("name"));
user.setAge(rs.getInt("age"));
userList.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
}
return userList;
}
public List<User> listUsers2() {
List<User> userList = new ArrayList<>();
try {
Connection conn = dataSource.getConnection();
Statement statement = conn.createStatement();
ResultSet rs = statement.executeQuery("SELECT * FROM user2");
while (rs.next()) {
User user = new User();
user.setId(rs.getLong("id"));
user.setName(rs.getString("name"));
user.setAge(rs.getInt("age"));
userList.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
}
return userList;
}
}
这里我们定义了两个方法 listUsers()
和 listUsers2()
,分别使用 dataSource1
和 dataSource2
执行SQL语句,获取查询结果。
示例代码
完整示例代码可以在下面的Github仓库中找到:
https://github.com/rainspooky/springboot-druid-multi-datasource
该示例包含了创建两个数据表 user
和 user2
,以及 @Mapper 接口、实体类等相关代码。你可以直接按照该示例进行配置和测试。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot配置druid多数据源的示例代码 - Python技术站