Browse Source

优化动态数据源

zhouhao 7 years ago
parent
commit
c2fea04378

+ 1 - 1
hsweb-datasource/hsweb-datasource-api/src/main/java/org/hswebframework/web/datasource/starter/AopDataSourceSwitcherAutoConfiguration.java

@@ -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;

+ 4 - 6
hsweb-datasource/hsweb-datasource-api/src/main/java/org/hswebframework/web/datasource/DynamicDataSourceAutoConfiguration.java

@@ -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 - 25
hsweb-datasource/hsweb-datasource-api/src/main/java/org/hswebframework/web/datasource/service/InMemoryDynamicDataSourceService.java

@@ -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();
         }
-
     }
 
-
 }