feat: providers all need defaultcreator
This commit is contained in:
parent
c83de09ec1
commit
145bd7cede
@ -16,6 +16,8 @@
|
||||
package com.baomidou.dynamic.datasource.spring.boot.autoconfigure;
|
||||
|
||||
import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
|
||||
import com.baomidou.dynamic.datasource.creator.DataSourceCreator;
|
||||
import com.baomidou.dynamic.datasource.creator.DefaultDataSourceCreator;
|
||||
import com.baomidou.dynamic.datasource.event.DataSourceInitEvent;
|
||||
import com.baomidou.dynamic.datasource.event.EncDataSourceInitEvent;
|
||||
import com.baomidou.dynamic.datasource.provider.DynamicDataSourceProvider;
|
||||
@ -28,6 +30,8 @@ import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.core.annotation.Order;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 动态数据源核心自动配置类
|
||||
*
|
||||
@ -46,8 +50,8 @@ public class DynamicDataSourceAssistConfiguration {
|
||||
|
||||
@Bean
|
||||
@Order(0)
|
||||
public DynamicDataSourceProvider ymlDynamicDataSourceProvider() {
|
||||
return new YmlDynamicDataSourceProvider(properties.getDatasource());
|
||||
public DynamicDataSourceProvider ymlDynamicDataSourceProvider(DefaultDataSourceCreator defaultDataSourceCreator) {
|
||||
return new YmlDynamicDataSourceProvider(defaultDataSourceCreator, properties.getDatasource());
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ -55,4 +59,17 @@ public class DynamicDataSourceAssistConfiguration {
|
||||
public DataSourceInitEvent dataSourceInitEvent() {
|
||||
return new EncDataSourceInitEvent();
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
public DefaultDataSourceCreator dataSourceCreator(List<DataSourceCreator> dataSourceCreators) {
|
||||
DefaultDataSourceCreator creator = new DefaultDataSourceCreator();
|
||||
creator.setCreators(dataSourceCreators);
|
||||
creator.setPublicKey(properties.getPublicKey());
|
||||
creator.setLazy(properties.getLazy());
|
||||
creator.setP6spy(properties.getP6spy());
|
||||
creator.setSeata(properties.getSeata());
|
||||
creator.setSeataMode(properties.getSeataMode());
|
||||
return creator;
|
||||
}
|
||||
}
|
@ -18,8 +18,6 @@ package com.baomidou.dynamic.datasource.spring.boot.autoconfigure;
|
||||
import cn.beecp.BeeDataSource;
|
||||
import com.alibaba.druid.pool.DruidDataSource;
|
||||
import com.atomikos.jdbc.AtomikosDataSourceBean;
|
||||
import com.baomidou.dynamic.datasource.creator.DataSourceCreator;
|
||||
import com.baomidou.dynamic.datasource.creator.DefaultDataSourceCreator;
|
||||
import com.baomidou.dynamic.datasource.creator.atomikos.AtomikosDataSourceCreator;
|
||||
import com.baomidou.dynamic.datasource.creator.basic.BasicDataSourceCreator;
|
||||
import com.baomidou.dynamic.datasource.creator.beecp.BeeCpDataSourceCreator;
|
||||
@ -33,14 +31,11 @@ import lombok.RequiredArgsConstructor;
|
||||
import org.apache.commons.dbcp2.BasicDataSource;
|
||||
import org.apache.ibatis.transaction.TransactionFactory;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.core.annotation.Order;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author TaoYu
|
||||
*/
|
||||
@ -58,14 +53,6 @@ public class DynamicDataSourceCreatorAutoConfiguration {
|
||||
public static final int DEFAULT_ORDER = 7000;
|
||||
private final DynamicDataSourceProperties properties;
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
public DefaultDataSourceCreator dataSourceCreator(List<DataSourceCreator> dataSourceCreators) {
|
||||
DefaultDataSourceCreator creator = new DefaultDataSourceCreator();
|
||||
creator.setCreators(dataSourceCreators);
|
||||
return creator;
|
||||
}
|
||||
|
||||
@Bean
|
||||
@Order(DEFAULT_ORDER)
|
||||
public BasicDataSourceCreator basicDataSourceCreator() {
|
||||
|
@ -19,6 +19,7 @@ import com.baomidou.dynamic.datasource.ds.ItemDataSource;
|
||||
import com.baomidou.dynamic.datasource.enums.SeataMode;
|
||||
import com.baomidou.dynamic.datasource.event.DataSourceInitEvent;
|
||||
import com.baomidou.dynamic.datasource.support.ScriptRunner;
|
||||
import com.baomidou.dynamic.datasource.toolkit.CryptoUtils;
|
||||
import com.p6spy.engine.spy.P6DataSource;
|
||||
import io.seata.rm.datasource.DataSourceProxy;
|
||||
import io.seata.rm.datasource.xa.DataSourceProxyXA;
|
||||
@ -41,7 +42,28 @@ public class DefaultDataSourceCreator {
|
||||
|
||||
private List<DataSourceCreator> creators;
|
||||
|
||||
private DataSourceGlobalConfig config;
|
||||
/**
|
||||
* 是否懒加载数据源
|
||||
*/
|
||||
private Boolean lazy = false;
|
||||
/**
|
||||
* /**
|
||||
* 是否使用p6spy输出,默认不输出
|
||||
*/
|
||||
private Boolean p6spy = false;
|
||||
/**
|
||||
* 是否使用开启seata,默认不开启
|
||||
*/
|
||||
private Boolean seata = false;
|
||||
/**
|
||||
* seata使用模式,默认AT
|
||||
*/
|
||||
private SeataMode seataMode = SeataMode.AT;
|
||||
/**
|
||||
* 全局默认publicKey
|
||||
*/
|
||||
private String publicKey = CryptoUtils.DEFAULT_PUBLIC_KEY_STRING;
|
||||
|
||||
private DataSourceInitEvent dataSourceInitEvent;
|
||||
|
||||
public DataSource createDataSource(DataSourceProperty dataSourceProperty) {
|
||||
@ -55,19 +77,13 @@ public class DefaultDataSourceCreator {
|
||||
if (dataSourceCreator == null) {
|
||||
throw new IllegalStateException("creator must not be null,please check the DataSourceCreator");
|
||||
}
|
||||
String publicKey = dataSourceProperty.getPublicKey();
|
||||
if (StringUtils.isEmpty(publicKey)) {
|
||||
if (config != null) {
|
||||
publicKey = config.getPublicKey();
|
||||
dataSourceProperty.setPublicKey(publicKey);
|
||||
}
|
||||
String propertyPublicKey = dataSourceProperty.getPublicKey();
|
||||
if (StringUtils.isEmpty(propertyPublicKey)) {
|
||||
dataSourceProperty.setPublicKey(publicKey);
|
||||
}
|
||||
Boolean lazy = dataSourceProperty.getLazy();
|
||||
if (lazy == null) {
|
||||
if (config != null) {
|
||||
lazy = config.getLazy();
|
||||
dataSourceProperty.setLazy(lazy);
|
||||
}
|
||||
Boolean propertyLazy = dataSourceProperty.getLazy();
|
||||
if (propertyLazy == null) {
|
||||
dataSourceProperty.setLazy(lazy);
|
||||
}
|
||||
if (dataSourceInitEvent != null) {
|
||||
dataSourceInitEvent.beforeCreate(dataSourceProperty);
|
||||
@ -77,8 +93,7 @@ public class DefaultDataSourceCreator {
|
||||
dataSourceInitEvent.afterCreate(dataSource);
|
||||
}
|
||||
this.runScrip(dataSource, dataSourceProperty);
|
||||
return dataSource;
|
||||
// return wrapDataSource(dataSource, dataSourceProperty);
|
||||
return wrapDataSource(dataSource, dataSourceProperty);
|
||||
}
|
||||
|
||||
private void runScrip(DataSource dataSource, DataSourceProperty dataSourceProperty) {
|
||||
@ -100,14 +115,13 @@ public class DefaultDataSourceCreator {
|
||||
String name = dataSourceProperty.getPoolName();
|
||||
DataSource targetDataSource = dataSource;
|
||||
|
||||
Boolean enabledP6spy = config.getP6spy() && dataSourceProperty.getP6spy();
|
||||
Boolean enabledP6spy = p6spy && dataSourceProperty.getP6spy();
|
||||
if (enabledP6spy) {
|
||||
targetDataSource = new P6DataSource(dataSource);
|
||||
log.debug("dynamic-datasource [{}] wrap p6spy plugin", name);
|
||||
}
|
||||
|
||||
Boolean enabledSeata = config.getSeata() && dataSourceProperty.getSeata();
|
||||
SeataMode seataMode = config.getSeataMode();
|
||||
Boolean enabledSeata = seata && dataSourceProperty.getSeata();
|
||||
if (enabledSeata) {
|
||||
if (SeataMode.XA == seataMode) {
|
||||
targetDataSource = new DataSourceProxyXA(targetDataSource);
|
||||
|
@ -17,8 +17,8 @@ package com.baomidou.dynamic.datasource.provider;
|
||||
|
||||
import com.baomidou.dynamic.datasource.creator.DataSourceProperty;
|
||||
import com.baomidou.dynamic.datasource.creator.DefaultDataSourceCreator;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.util.HashMap;
|
||||
@ -28,10 +28,10 @@ import java.util.Map;
|
||||
* @author TaoYu
|
||||
*/
|
||||
@Slf4j
|
||||
@AllArgsConstructor
|
||||
public abstract class AbstractDataSourceProvider implements DynamicDataSourceProvider {
|
||||
|
||||
@Autowired
|
||||
private DefaultDataSourceCreator defaultDataSourceCreator;
|
||||
private final DefaultDataSourceCreator defaultDataSourceCreator;
|
||||
|
||||
protected Map<String, DataSource> createDataSourceMap(
|
||||
Map<String, DataSourceProperty> dataSourcePropertiesMap) {
|
||||
|
@ -16,7 +16,7 @@
|
||||
package com.baomidou.dynamic.datasource.provider;
|
||||
|
||||
import com.baomidou.dynamic.datasource.creator.DataSourceProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import com.baomidou.dynamic.datasource.creator.DefaultDataSourceCreator;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
@ -29,7 +29,6 @@ import java.util.Map;
|
||||
* @since 1.0.0
|
||||
*/
|
||||
@Slf4j
|
||||
@AllArgsConstructor
|
||||
public class YmlDynamicDataSourceProvider extends AbstractDataSourceProvider {
|
||||
|
||||
/**
|
||||
@ -37,6 +36,12 @@ public class YmlDynamicDataSourceProvider extends AbstractDataSourceProvider {
|
||||
*/
|
||||
private final Map<String, DataSourceProperty> dataSourcePropertiesMap;
|
||||
|
||||
public YmlDynamicDataSourceProvider(DefaultDataSourceCreator defaultDataSourceCreator, Map<String, DataSourceProperty> dataSourcePropertiesMap) {
|
||||
super(defaultDataSourceCreator);
|
||||
this.dataSourcePropertiesMap = dataSourcePropertiesMap;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Map<String, DataSource> loadDataSources() {
|
||||
return createDataSourceMap(dataSourcePropertiesMap);
|
||||
|
Loading…
x
Reference in New Issue
Block a user