mirror of
https://github.com/hs-web/hsweb-framework.git
synced 2026-06-09 01:14:16 +08:00
优化动态数据源
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
package org.hswebframework.web.datasource.starter;
|
||||
package org.hswebframework.web.datasource;
|
||||
|
||||
import org.aopalliance.intercept.MethodInterceptor;
|
||||
import org.hswebframework.web.AopUtils;
|
||||
@@ -3,15 +3,13 @@ package org.hswebframework.web.datasource;
|
||||
import org.hswebframework.ezorm.rdb.executor.SqlExecutor;
|
||||
import org.hswebframework.web.datasource.config.DynamicDataSourceConfigRepository;
|
||||
import org.hswebframework.web.datasource.config.InSpringDynamicDataSourceConfig;
|
||||
import org.hswebframework.web.datasource.service.InMemoryDynamicDataSourceService;
|
||||
import org.hswebframework.web.datasource.service.InSpringContextDynamicDataSourceService;
|
||||
import org.hswebframework.web.datasource.service.InSpringDynamicDataSourceConfigRepository;
|
||||
import org.hswebframework.web.datasource.starter.AopDataSourceSwitcherAutoConfiguration;
|
||||
import org.hswebframework.web.datasource.switcher.DataSourceSwitcher;
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.config.BeanPostProcessor;
|
||||
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
@@ -39,9 +37,10 @@ public class DynamicDataSourceAutoConfiguration implements BeanPostProcessor {
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean(DynamicDataSourceService.class)
|
||||
public InMemoryDynamicDataSourceService inMemoryDynamicDataSourceService(DynamicDataSourceConfigRepository<InSpringDynamicDataSourceConfig> repository, DataSource dataSource) {
|
||||
public InSpringContextDynamicDataSourceService inMemoryDynamicDataSourceService(DynamicDataSourceConfigRepository<InSpringDynamicDataSourceConfig> repository,
|
||||
DataSource dataSource) {
|
||||
DynamicDataSourceProxy dataSourceProxy = new DynamicDataSourceProxy(null, dataSource);
|
||||
return new InMemoryDynamicDataSourceService(repository, dataSourceProxy);
|
||||
return new InSpringContextDynamicDataSourceService(repository, dataSourceProxy);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -69,5 +68,4 @@ public class DynamicDataSourceAutoConfiguration implements BeanPostProcessor {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -11,57 +11,43 @@ import org.springframework.context.ApplicationContext;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.sql.SQLException;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 基于spring容器的动态数据源服务。从spring容器中获取数据源
|
||||
*
|
||||
* @author zhouhao
|
||||
* @since 1.0
|
||||
* @since 3.0
|
||||
*/
|
||||
public class InMemoryDynamicDataSourceService extends AbstractDynamicDataSourceService<InSpringDynamicDataSourceConfig> {
|
||||
public class InSpringContextDynamicDataSourceService extends AbstractDynamicDataSourceService<InSpringDynamicDataSourceConfig> {
|
||||
|
||||
|
||||
@Autowired
|
||||
private ApplicationContext applicationContext;
|
||||
|
||||
@Autowired
|
||||
public void setApplicationContext(ApplicationContext applicationContext) {
|
||||
this.applicationContext = applicationContext;
|
||||
}
|
||||
|
||||
public InMemoryDynamicDataSourceService(DynamicDataSourceConfigRepository<InSpringDynamicDataSourceConfig> repository, DynamicDataSource defaultDataSource) {
|
||||
public InSpringContextDynamicDataSourceService(DynamicDataSourceConfigRepository<InSpringDynamicDataSourceConfig> repository, DynamicDataSource defaultDataSource) {
|
||||
super(repository, defaultDataSource);
|
||||
}
|
||||
|
||||
public InMemoryDynamicDataSourceService(DynamicDataSourceConfigRepository<InSpringDynamicDataSourceConfig> repository, DataSource dataSource) throws SQLException {
|
||||
public InSpringContextDynamicDataSourceService(DynamicDataSourceConfigRepository<InSpringDynamicDataSourceConfig> repository, DataSource dataSource) throws SQLException {
|
||||
super(repository, dataSource);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public void registerDataSource(String id, DataSource dataSource) {
|
||||
InSpringDynamicDataSourceConfig config = new InSpringDynamicDataSourceConfig();
|
||||
config.setId(id);
|
||||
config.setName(id);
|
||||
CountDownLatch countDownLatch = new CountDownLatch(1);
|
||||
dataSourceStore.put(id, new DataSourceCache(0L
|
||||
, new DynamicDataSourceProxy(id, dataSource), countDownLatch, config));
|
||||
countDownLatch.countDown();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected DataSourceCache createCache(InSpringDynamicDataSourceConfig config) {
|
||||
DataSource dataSource = applicationContext.getBean(config.getBeanName(), DataSource.class);
|
||||
CountDownLatch countDownLatch = new CountDownLatch(1);
|
||||
try {
|
||||
return new DataSourceCache(config.hashCode(), new DynamicDataSourceProxy(config.getId(), dataSource), countDownLatch, config);
|
||||
|
||||
return new DataSourceCache(config.hashCode(),
|
||||
new DynamicDataSourceProxy(config.getId(), dataSource),
|
||||
countDownLatch,
|
||||
config);
|
||||
} finally {
|
||||
countDownLatch.countDown();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user