springboot druid 多数据源
时间: 2023-04-28 22:04:48 浏览: 125
Spring Boot 支持使用 Druid 作为其连接池实现来配置多数据源。首先,需要在项目的 pom.xml 文件中添加 Druid 的依赖。然后,可以使用 DruidDataSource 类配置多个数据源并在 application.properties 文件中进行相应的配置。在需要使用不同数据源时,可以使用 @Primary 注解标记默认数据源,并使用 @Qualifier 注解指定其他数据源。
相关问题
springboot druid 多数据源 示例
这是一个使用Spring Boot和Druid连接池的多数据源示例:
1. 首先,需要添加以下依赖关系:
```
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.16</version>
</dependency>
```
2. 在application.properties文件中配置数据源:
```
spring.datasource.driverClassName=com.mysql.jdbc.Driver
#主数据源
spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false
spring.datasource.username=root
spring.datasource.password=root
#从数据源1
spring.datasource.test1.url=jdbc:mysql://localhost:3306/test1?useSSL=false
spring.datasource.test1.username=root
spring.datasource.test1.password=root
#从数据源2
spring.datasource.test2.url=jdbc:mysql://localhost:3306/test2?useSSL=false
spring.datasource.test2.username=root
spring.datasource.test2.password=root
```
3. 在代码中配置多数据源:
```
@Configuration
public class DataSourceConfig {
@Bean(name = "masterDataSource")
@Primary
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource() {
return DruidDataSourceBuilder.create().build();
}
@Bean(name = "test1DataSource")
@ConfigurationProperties(prefix = "spring.datasource.test1")
public DataSource test1DataSource() {
return DruidDataSourceBuilder.create().build();
}
@Bean(name = "test2DataSource")
@ConfigurationProperties(prefix = "spring.datasource.test2")
public DataSource test2DataSource() {
return DruidDataSourceBuilder.create().build();
}
@Bean(name = "dynamicDataSource")
public DynamicDataSource dynamicDataSource() {
DynamicDataSource dynamicDataSource = new DynamicDataSource();
Map<Object, Object> dataSourceMap = new HashMap<>();
dataSourceMap.put("master", dataSource());
dataSourceMap.put("test1", test1DataSource());
dataSourceMap.put("test2", test2DataSource());
dynamicDataSource.setDefaultTargetDataSource(dataSource());
dynamicDataSource.setTargetDataSources(dataSourceMap);
return dynamicDataSource;
}
}
```
4. 创建动态数据源:
```
public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return DataSourceContextHolder.getDataSource();
}
}
```
5. 在需要使用不同数据源的方法中设置数据源:
```
@Component
public class UserService {
@Autowired
private JdbcTemplate jdbcTemplate;
public int addUser(User user) {
DataSourceContextHolder.setDataSource(DataSourceNames.TEST1);
String sql = "insert into user(id, name, age) values(?, ?, ?)";
return jdbcTemplate.update(sql, user.getId(), user.getName(), user.getAge());
}
public List<User> getAllUsers() {
DataSourceContextHolder.setDataSource(DataSourceNames.TEST2);
String sql = "select * from user";
return jdbcTemplate.query(sql, new BeanPropertyRowMapper(User.class));
}
}
```
6. 在访问需要使用不同数据源的方法时切换数据源:
```
@RestController
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/addUser")
public int addUser(@RequestBody User user) {
return userService.addUser(user);
}
@GetMapping("/getAllUsers")
public List<User> getAllUsers() {
return userService.getAllUsers();
}
}
```
以上就是Spring Boot和Druid连接池的多数据源示例。
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解密这个值再注入到应用中。
阅读全文