通过dynamic datasource实现在启动中动态添加删除数据源的源码
时间: 2023-12-10 08:42:18 浏览: 228
以下是通过 dynamic datasource 实现在启动中动态添加删除数据源的源码:
首先,需要引入 dynamic-datasource-spring-boot-starter 依赖。在 pom.xml 文件中添加以下代码:
```xml
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>2.5.0</version>
</dependency>
```
接下来,创建一个配置类 DynamicDataSourceConfig,用于配置动态数据源。在该类中,需要定义一个 Map 用于存储数据源配置信息,以及一个默认数据源名。并且,需要使用 @ConfigurationProperties 注解注入 dynamic 数据源的配置信息。
```java
@Configuration
@ConfigurationProperties(prefix = "spring.datasource.dynamic")
public class DynamicDataSourceConfig {
private Map<String, DataSourceProperties> datasources = new HashMap<>();
private String primary;
// getter 和 setter 方法省略
}
```
接着,在配置类中创建一个 DynamicDataSource 对象,并使用 @Bean 注解将其注入到容器中。在创建 DynamicDataSource 对象时,需要传入一个 DataSourceCreator 对象,该对象用于创建数据源。
```java
@Bean
public DataSource dataSource() {
Map<String, DataSource> dataSourceMap = new HashMap<>();
for (String key : datasources.keySet()) {
DataSourceProperties properties = datasources.get(key);
DataSource dataSource = createDataSource(properties);
dataSourceMap.put(key, dataSource);
}
DynamicDataSource dynamicDataSource = new DynamicDataSource();
dynamicDataSource.setTargetDataSources(dataSourceMap);
dynamicDataSource.setDefaultTargetDataSource(dataSourceMap.get(primary));
return dynamicDataSource;
}
private DataSource createDataSource(DataSourceProperties properties) {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(properties.getUrl());
dataSource.setUsername(properties.getUsername());
dataSource.setPassword(properties.getPassword());
dataSource.setDriverClassName(properties.getDriverClassName());
dataSource.setInitialSize(properties.getInitialSize());
dataSource.setMaxActive(properties.getMaxActive());
dataSource.setMinIdle(properties.getMinIdle());
dataSource.setMaxWait(properties.getMaxWait());
return dataSource;
}
```
最后,在启动类中开启动态数据源功能。在启动类中,需要使用 @EnableDynamicDataSource 注解开启动态数据源功能。
```java
@EnableDynamicDataSource
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
```
现在,就可以通过修改配置文件或者数据库中的数据源配置信息,来动态添加或删除数据源了。同时,也可以通过注解 @DS("数据源名") 来切换数据源。
阅读全文