在 Druid 中实现多数据源配置是相对简单且灵活的,这使得在同一个应用中可以同时管理多个数据库连接。以下是如何在 Druid 中配置多个数据源的步骤和示例:
1. 配置多个数据源
在 Druid 中,每个数据源都可以单独配置,并且可以为每个数据源指定不同的连接池配置。下面是一个简单的配置示例:
示例:配置两个数据源
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import javax.sql.DataSource;
@Component
@ConfigurationProperties(prefix = "spring.datasource.db1")
public class DataSourceDB1 extends DruidDataSource {
// 留空,通过@ConfigurationProperties自动绑定配置
}
@Component
@ConfigurationProperties(prefix = "spring.datasource.db2")
public class DataSourceDB2 extends DruidDataSource {
// 留空,通过@ConfigurationProperties自动绑定配置
}
在配置文件(如 application.yml
或 application.properties
)中,你可以定义这两个数据源的配置:
spring:
datasource:
db1:
url: jdbc:mysql://localhost:3306/db1
username: user1
password: pass1
driver-class-name: com.mysql.jdbc.Driver
initial-size: 5
max-active: 20
db2:
url: jdbc:mysql://localhost:3306/db2
username: user2
password: pass2
driver-class-name: com.mysql.jdbc.Driver
initial-size: 5
max-active: 20
2. 注册数据源
在 Spring Boot 应用中,你可以通过 @Configuration
类来注册这些数据源:
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
@Configuration
public class DataSourceConfig {
@Bean(name = "dataSourceDB1")
@ConfigurationProperties(prefix = "spring.datasource.db1")
public DataSource dataSourceDB1() {
return new DruidDataSource();
}
@Bean(name = "dataSourceDB2")
@ConfigurationProperties(prefix = "spring.datasource.db2")
public DataSource dataSourceDB2() {
return new DruidDataSource();
}
}
3. 使用多数据源
在你的应用程序中,你可以通过注解 @Qualifier
来指定使用哪个数据源:
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
@Repository
public class UserRepository {
private final JdbcTemplate jdbcTemplateDB1;
private final JdbcTemplate jdbcTemplateDB2;
@Autowired
public UserRepository(@Qualifier("dataSourceDB1") DataSource dataSourceDB1,
@Qualifier("dataSourceDB2") DataSource dataSourceDB2) {
this.jdbcTemplateDB1 = new JdbcTemplate(dataSourceDB1);
this.jdbcTemplateDB2 = new JdbcTemplate(dataSourceDB2);
}
public void saveUserToDB1(User user) {
String sql = "INSERT INTO users (name, email) VALUES (?, ?)";
jdbcTemplateDB1.update(sql, user.getName(), user.getEmail());
}
public void saveUserToDB2(User user) {
String sql = "INSERT INTO users (name, email) VALUES (?, ?)";
jdbcTemplateDB2.update(sql, user.getName(), user.getEmail());
}
}
4. 配置示例总结
通过上述步骤,你可以在 Druid 中配置多个数据源,并在应用中使用这些数据源。这种方式不仅可以让应用更灵活地管理多个数据库连接,还可以根据业务需求动态调整每个数据源的连接池配置。
注意事项
- 配置文件格式:确保你的配置文件格式正确,Spring Boot 支持 YAML 和 properties 格式。
- Driver Class Name:根据所使用的数据库类型,确保指定了正确的驱动类名。
- 监控和日志:对于每个数据源,确保启用了必要的监控和日志记录,以便于问题诊断。
- 安全性和权限:为每个数据源指定合适的用户名和密码,确保安全性。
通过这种方式配置,你可以轻松地在 Druid 中实现多数据源管理,并在分布式系统中灵活地使用不同的数据库实例。