springboot druid 多数据源
时间: 2023-04-28 18:04:48 浏览: 120
Spring Boot 支持使用 Druid 作为其连接池实现来配置多数据源。首先,需要在项目的 pom.xml 文件中添加 Druid 的依赖。然后,可以使用 DruidDataSource 类配置多个数据源并在 application.properties 文件中进行相应的配置。在需要使用不同数据源时,可以使用 @Primary 注解标记默认数据源,并使用 @Qualifier 注解指定其他数据源。
相关问题
springboot druid 多数据源 示例
非常感谢您的提问。下面是 Spring Boot 和 Druid 多数据源的示例代码:
您需要添加以下 Maven 依赖:
```xml
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.21</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
```
然后,在 `application.yml` 中配置数据源:
```yaml
spring:
datasource:
# 主数据源
druid:
url: jdbc:mysql://localhost:3306/main?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: select 1 from dual
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
filters: stat,wall,log4j
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 第一个从数据源
druid1:
url: jdbc:mysql://localhost:3306/user_db?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: select 1 from dual
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
filters: stat,wall,log4j
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 第二个从数据源
druid2:
url: jdbc:mysql://localhost:3306/other_db?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: select 1 from dual
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
filters: stat,wall,log4j
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
```
然后,在 Java 代码中配置数据源:
```java
@Configuration
public class DataSourceConfig {
@Bean
@Primary
@ConfigurationProperties("spring.datasource.druid")
public DataSource mainDataSource() {
return DruidDataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties("spring.datasource.druid1")
public DataSource dataSource1() {
return DruidDataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties("spring.datasource.druid2")
public DataSource dataSource2() {
return DruidDataSourceBuilder.create().build();
}
@Bean
public DataSource dynamicDataSource(@Qualifier("mainDataSource") DataSource mainDataSource,
@Qualifier("dataSource1") DataSource dataSource1,
@Qualifier("dataSource2") DataSource dataSource2) {
Map<Object, Object> targetDataSources = new HashMap<>();
targetDataSources.put(DataSourceType.MAIN, mainDataSource);
targetDataSources.put(DataSourceType.DATA_SOURCE_1, dataSource1);
targetDataSources.put(DataSourceType.DATA_SOURCE_2, dataSource2);
DynamicDataSource dynamicDataSource = new DynamicDataSource();
dynamicDataSource.setTargetDataSources(targetDataSources);
dynamicDataSource.setDefaultTargetDataSource(mainDataSource);
return dynamicDataSource;
}
}
```
其中,`DynamicDataSource` 是一个自定义的 `javax.sql.DataSource` 实现类,用于支持数据源的动态切换。最后,您就可以在代码中使用 `@Qualifier(DataSourceType.MAIN)`、`@Qualifier(DataSourceType.DATA_SOURCE_1)`、`@Qualifier(DataSourceType.DATA_SOURCE_2)` 等注解来区分使用不同的数据源了。
希望这个示例能够帮到您!
springboot druid多数据源密码加密
Spring Boot中集成Druid多数据源时,为了安全存储数据库密码,通常会采用对密码进行加密的方式。这主要是为了避免明文密码直接暴露在配置文件中。以下是常见的做法:
1. **使用环境变量**:可以将密码存储在系统环境变量或应用属性文件(如application.properties或application.yml)中,并通过`Environment`或`PropertySourcesPlaceholderConfigurer`读取加密后的值。
```properties
db.password=${spring.datasource.password}
```
然后在启动时,通过`@Value("${spring.datasource.password}")`自动注入加密过的密码。
2. **使用加密工具库**:例如Spring Security或Java Cryptography Extension (JCE)提供的一些功能,可以先对密码进行加密,生成一个密钥和对应的加密结果。在Spring Boot的`DataSourceBuilder`中设置加密的密码。
3. **使用Spring Cloud Config Server**:如果项目有复杂的配置管理需求,可以考虑使用Config Server管理数据库密码等敏感信息,并通过客户端的配置文件获取加密后的密码。
当你需要从Druid的配置里引用加密后的密码时,可能会看到类似这样的表达式:
```yaml
druid:
password: ${spring.cloud.config.decrypt:${spring.datasource.password}}
```
这里`${spring.cloud.config.decrypt}`是一个占位符,告诉Spring Cloud Config Server解密这个值再注入到应用中。
阅读全文