三七 1 vecka sedan
förälder
incheckning
a57c06f528

+ 1 - 2
fs-user-app/src/main/java/com/fs/core/config/DataSourceConfig.java

@@ -41,8 +41,7 @@ public class DataSourceConfig {
     public DynamicDataSource dataSource(@Qualifier("sopDataSource") DataSource sopDataSource,
                                         @Qualifier("masterDataSource") DataSource masterDataSource) {
         Map<Object, Object> targetDataSources = new HashMap<>();
-        targetDataSources.put(DataSourceType.MASTER, masterDataSource);
-        targetDataSources.put(DataSourceType.SOP, sopDataSource);
+        targetDataSources.put(DataSourceType.SOP.name(), sopDataSource); // Ensure matching key
         return new DynamicDataSource(masterDataSource, targetDataSources);
     }
 

+ 67 - 23
fs-user-app/src/main/java/com/fs/core/config/MyBatisConfig.java

@@ -1,12 +1,7 @@
-package com.fs.core.config;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import javax.sql.DataSource;
+package com.fs.framework.config;
 
 import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
+import com.fs.common.utils.StringUtils;
 import org.apache.ibatis.io.VFS;
 import org.apache.ibatis.session.SqlSessionFactory;
 import org.mybatis.spring.SqlSessionFactoryBean;
@@ -24,56 +19,103 @@ import org.springframework.core.type.classreading.MetadataReader;
 import org.springframework.core.type.classreading.MetadataReaderFactory;
 import org.springframework.util.ClassUtils;
 
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+
 /**
  * Mybatis支持*匹配扫描包
+ *
+
  */
 @Configuration
-public class MyBatisConfig {
+public class MyBatisConfig
+{
     @Autowired
     private Environment env;
 
     static final String DEFAULT_RESOURCE_PATTERN = "**/*.class";
 
-    public static String setTypeAliasesPackage(String typeAliasesPackage) {
+    public static String setTypeAliasesPackage(String typeAliasesPackage)
+    {
         ResourcePatternResolver resolver = (ResourcePatternResolver) new PathMatchingResourcePatternResolver();
         MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resolver);
         List<String> allResult = new ArrayList<String>();
-        try {
-            for (String aliasesPackage : typeAliasesPackage.split(",")) {
+        try
+        {
+            for (String aliasesPackage : typeAliasesPackage.split(","))
+            {
                 List<String> result = new ArrayList<String>();
                 aliasesPackage = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX
                         + ClassUtils.convertClassNameToResourcePath(aliasesPackage.trim()) + "/" + DEFAULT_RESOURCE_PATTERN;
                 Resource[] resources = resolver.getResources(aliasesPackage);
-                if (resources != null && resources.length > 0) {
+                if (resources != null && resources.length > 0)
+                {
                     MetadataReader metadataReader = null;
-                    for (Resource resource : resources) {
-                        if (resource.isReadable()) {
+                    for (Resource resource : resources)
+                    {
+                        if (resource.isReadable())
+                        {
                             metadataReader = metadataReaderFactory.getMetadataReader(resource);
-                            try {
+                            try
+                            {
                                 result.add(Class.forName(metadataReader.getClassMetadata().getClassName()).getPackage().getName());
-                            } catch (ClassNotFoundException e) {
+                            }
+                            catch (ClassNotFoundException e)
+                            {
                                 e.printStackTrace();
                             }
                         }
                     }
                 }
-                if (result.size() > 0) {
+                if (result.size() > 0)
+                {
                     HashSet<String> hashResult = new HashSet<String>(result);
                     allResult.addAll(hashResult);
                 }
             }
-            if (allResult.size() > 0) {
+            if (allResult.size() > 0)
+            {
                 typeAliasesPackage = String.join(",", (String[]) allResult.toArray(new String[0]));
-            } else {
+            }
+            else
+            {
                 throw new RuntimeException("mybatis typeAliasesPackage 路径扫描错误,参数typeAliasesPackage:" + typeAliasesPackage + "未找到任何包");
             }
-        } catch (IOException e) {
+        }
+        catch (IOException e)
+        {
             e.printStackTrace();
         }
         return typeAliasesPackage;
     }
 
-    //    @Bean
+    public Resource[] resolveMapperLocations(String[] mapperLocations)
+    {
+        ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver();
+        List<Resource> resources = new ArrayList<Resource>();
+        if (mapperLocations != null)
+        {
+            for (String mapperLocation : mapperLocations)
+            {
+                try
+                {
+                    Resource[] mappers = resourceResolver.getResources(mapperLocation);
+                    resources.addAll(Arrays.asList(mappers));
+                }
+                catch (IOException e)
+                {
+                    // ignore
+                }
+            }
+        }
+        return resources.toArray(new Resource[resources.size()]);
+    }
+
+//    @Bean
 //    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception
 //    {
 //        String typeAliasesPackage = env.getProperty("mybatis.typeAliasesPackage");
@@ -85,12 +127,14 @@ public class MyBatisConfig {
 //        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
 //        sessionFactory.setDataSource(dataSource);
 //        sessionFactory.setTypeAliasesPackage(typeAliasesPackage);
-//        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(mapperLocations));
+//        sessionFactory.setMapperLocations(resolveMapperLocations(StringUtils.split(mapperLocations, ",")));
 //        sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation));
 //        return sessionFactory.getObject();
 //    }
+
     @Bean
-    public SqlSessionFactory sqlSessionFactorys(DataSource dataSource) throws Exception {
+    public SqlSessionFactory sqlSessionFactorys(DataSource dataSource) throws Exception
+    {
         String typeAliasesPackage = env.getProperty("mybatis-plus.typeAliasesPackage");
         String mapperLocations = env.getProperty("mybatis-plus.mapperLocations");
         String configLocation = env.getProperty("mybatis-plus.configLocation");

+ 9 - 3
fs-user-app/src/main/java/com/fs/core/datasource/DynamicDataSource.java

@@ -1,5 +1,6 @@
 package com.fs.core.datasource;
 
+import com.fs.core.datasource.DynamicDataSourceContextHolder;
 import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
 
 import javax.sql.DataSource;
@@ -7,8 +8,8 @@ import java.util.Map;
 
 /**
  * 动态数据源
- * 
- 
+ *
+
  */
 public class DynamicDataSource extends AbstractRoutingDataSource
 {
@@ -19,9 +20,14 @@ public class DynamicDataSource extends AbstractRoutingDataSource
         super.afterPropertiesSet();
     }
 
+    public static void setDataSource(String dataSourceType) {
+        // 确保使用数据源类型的字符串值
+        DynamicDataSourceContextHolder.setDataSourceType(dataSourceType);
+    }
+
     @Override
     protected Object determineCurrentLookupKey()
     {
         return DynamicDataSourceContextHolder.getDataSourceType();
     }
-}
+}

+ 3 - 3
fs-user-app/src/main/java/com/fs/core/datasource/DynamicDataSourceContextHolder.java

@@ -23,7 +23,7 @@ public class DynamicDataSourceContextHolder
      */
     public static void setDataSourceType(String dsType)
     {
-        log.info("切换到{}", dsType);
+//        log.info("切换到{}数据源", dsType);
         CONTEXT_HOLDER.set(dsType);
     }
 
@@ -38,8 +38,8 @@ public class DynamicDataSourceContextHolder
     /**
      * 清空数据源变量
      */
-    public static void clearDataSourceType(){
-        log.info("销毁切换");
+    public static void clearDataSourceType()
+    {
         CONTEXT_HOLDER.remove();
     }
 }