mirror of https://github.com/jeecgboot/jeecg-boot
Merge acf7a6ccda
into 118775cf79
commit
d60f224e60
|
@ -12,9 +12,17 @@
|
|||
<artifactId>jeecg-cloud-test-shardingsphere</artifactId>
|
||||
|
||||
<dependencies>
|
||||
<!-- 动态数据源 -->
|
||||
<dependency>
|
||||
<groupId>org.jeecgframework.boot</groupId>
|
||||
<artifactId>jeecg-boot-starter-shardingsphere</artifactId>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
|
||||
<version>${dynamic-datasource-spring-boot-starter.version}</version>
|
||||
</dependency>
|
||||
<!-- 分库分表 -->
|
||||
<dependency>
|
||||
<groupId>org.apache.shardingsphere</groupId>
|
||||
<artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
|
||||
<version>5.0.0</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
|
|
@ -0,0 +1,85 @@
|
|||
package org.jeecg.modules.test.sharding.config;
|
||||
|
||||
import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
|
||||
import com.baomidou.dynamic.datasource.creator.DataSourceProperty;
|
||||
import com.baomidou.dynamic.datasource.creator.DefaultDataSourceCreator;
|
||||
import com.baomidou.dynamic.datasource.provider.AbstractDataSourceProvider;
|
||||
import com.baomidou.dynamic.datasource.provider.DynamicDataSourceProvider;
|
||||
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration;
|
||||
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties;
|
||||
import org.springframework.boot.SpringBootConfiguration;
|
||||
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.context.annotation.Primary;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.sql.DataSource;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 分库分表数据源配置
|
||||
* @author zyf
|
||||
*/
|
||||
@Configuration
|
||||
@AutoConfigureBefore({DynamicDataSourceAutoConfiguration.class, SpringBootConfiguration.class})
|
||||
public class DataSourceConfiguration {
|
||||
/**
|
||||
* 分表数据源名称
|
||||
*/
|
||||
public static final String SHARDING_DATA_SOURCE_NAME = "sharding";
|
||||
/**
|
||||
* 动态数据源配置项
|
||||
*/
|
||||
@Resource
|
||||
private DynamicDataSourceProperties dynamicDataSourceProperties;
|
||||
|
||||
@Lazy
|
||||
@Resource
|
||||
DataSource shardingDataSource;
|
||||
|
||||
@Lazy
|
||||
@Resource
|
||||
DefaultDataSourceCreator dataSourceCreator;
|
||||
|
||||
|
||||
/**
|
||||
* 将shardingDataSource放到了多数据源(dataSourceMap)中
|
||||
* 注意有个版本的bug,3.1.1版本 不会进入loadDataSources 方法,这样就一直造成数据源注册失败
|
||||
*/
|
||||
@Bean
|
||||
public DynamicDataSourceProvider dynamicDataSourceProvider() {
|
||||
Map<String, DataSourceProperty> datasourceMap = dynamicDataSourceProperties.getDatasource();
|
||||
return new AbstractDataSourceProvider(dataSourceCreator) {
|
||||
@Override
|
||||
public Map<String, DataSource> loadDataSources() {
|
||||
Map<String, DataSource> dataSourceMap = createDataSourceMap(datasourceMap);
|
||||
// 将 shardingjdbc 管理的数据源也交给动态数据源管理
|
||||
dataSourceMap.put(SHARDING_DATA_SOURCE_NAME, shardingDataSource);
|
||||
return dataSourceMap;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* 将动态数据源设置为首选的
|
||||
* 当spring存在多个数据源时, 自动注入的是首选的对象
|
||||
* 设置为主要的数据源之后,就可以支持shardingjdbc原生的配置方式了
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Primary
|
||||
@Bean
|
||||
public DataSource dataSource(DynamicDataSourceProvider dynamicDataSourceProvider) {
|
||||
DynamicRoutingDataSource dataSource = new DynamicRoutingDataSource();
|
||||
dataSource.setPrimary(dynamicDataSourceProperties.getPrimary());
|
||||
dataSource.setStrict(dynamicDataSourceProperties.getStrict());
|
||||
dataSource.setStrategy(dynamicDataSourceProperties.getStrategy());
|
||||
//v3.5.2 稳定版本 (让默认的DynamicDataSourceProvider优先级为0 by@VonXXGhostin#437)
|
||||
//dataSource.setProvider(dynamicDataSourceProvider);
|
||||
dataSource.setP6spy(dynamicDataSourceProperties.getP6spy());
|
||||
dataSource.setSeata(dynamicDataSourceProperties.getSeata());
|
||||
return dataSource;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue