JAVA中使用代码创建多数据源,并实现动态切换(一)
时间: 2024-03-16 21:45:04 浏览: 66
好的,我来简单介绍一下Java中如何创建多数据源并实现动态切换。
首先,我们需要在Spring Boot中引入多数据源的依赖,比如Druid或HikariCP等,这里以Druid为例。
在pom.xml中添加以下依赖:
```xml
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.6</version>
</dependency>
```
接着,在application.yml中配置多个数据源:
```yml
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
initial-size: 5
max-active: 10
max-wait: 3000
filters: stat,wall,log4j
datasource-one:
url: jdbc:mysql://localhost:3306/db_one
username: root
password: root
datasource-two:
url: jdbc:mysql://localhost:3306/db_two
username: root
password: root
```
以上配置了两个数据源,分别为datasource-one和datasource-two。
接下来,我们需要创建多个数据源的配置类,用于动态创建数据源并进行切换。
```java
@Configuration
public class DataSourceConfig {
@Bean(name = "datasourceOne")
@ConfigurationProperties(prefix = "spring.datasource.datasource-one")
public DataSource dataSourceOne() {
return DruidDataSourceBuilder.create().build();
}
@Bean(name = "datasourceTwo")
@ConfigurationProperties(prefix = "spring.datasource.datasource-two")
public DataSource dataSourceTwo() {
return DruidDataSourceBuilder.create().build();
}
@Bean
@Primary
public DynamicDataSource dataSource(@Qualifier("datasourceOne") DataSource dataSourceOne,
@Qualifier("datasourceTwo") DataSource dataSourceTwo) {
Map<Object, Object> targetDataSources = new HashMap<>();
targetDataSources.put(DataSourceType.DATASOURCE_ONE, dataSourceOne);
targetDataSources.put(DataSourceType.DATASOURCE_TWO, dataSourceTwo);
DynamicDataSource dataSource = new DynamicDataSource();
dataSource.setTargetDataSources(targetDataSources);
dataSource.setDefaultTargetDataSource(dataSourceOne);
return dataSource;
}
}
```
代码中定义了两个数据源,分别为datasourceOne和datasourceTwo,同时在DynamicDataSource中配置了这两个数据源,并设置了默认数据源为datasourceOne。
最后,我们需要创建一个数据源的枚举类,用于在切换数据源时进行标识。
```java
public enum DataSourceType {
DATASOURCE_ONE,
DATASOURCE_TWO
}
```
至此,多数据源的配置已经完成。在需要切换数据源的地方,我们只需要调用DynamicDataSource中的setDataSource方法即可。
```java
DynamicDataSource.setDataSource(DataSourceType.DATASOURCE_TWO);
```
以上就是Java中如何创建多数据源并实现动态切换的简单介绍,希望对你有所帮助。
阅读全文