From d1e380d5bc8d6cda7dc26778dd638b3367483ae7 Mon Sep 17 00:00:00 2001
From: zhubaomin <zhubaomin>
Date: 星期五, 11 四月 2025 17:27:30 +0800
Subject: [PATCH] 小程序6种开关阀操作失败时重发一次

---
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/multiDataSource/MultiDataSourceBeanDefinitionRegistrar.java |   93 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 93 insertions(+), 0 deletions(-)

diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/multiDataSource/MultiDataSourceBeanDefinitionRegistrar.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/multiDataSource/MultiDataSourceBeanDefinitionRegistrar.java
new file mode 100644
index 0000000..d19c088
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/multiDataSource/MultiDataSourceBeanDefinitionRegistrar.java
@@ -0,0 +1,93 @@
+package com.dy.common.multiDataSource;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import com.alibaba.druid.pool.DruidDataSourceFactory;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.MutablePropertyValues;
+import org.springframework.beans.factory.support.BeanDefinitionRegistry;
+import org.springframework.beans.factory.support.GenericBeanDefinition;
+import org.springframework.context.EnvironmentAware;
+import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
+import org.springframework.core.env.Environment;
+import org.springframework.core.env.MapPropertySource;
+import org.springframework.core.env.StandardEnvironment;
+import org.springframework.core.type.AnnotationMetadata;
+
+import javax.sql.DataSource;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+
+/**
+ * SpringBoot瀹瑰櫒鍚姩鏃讹紝閽堝鏁版嵁婧愶紝绗竴姝ュ惎鍔ㄦ湰绫伙細
+ * 鏀堕泦澶氭暟鎹簮鐨勯厤缃紝褰㈡垚鍚勬暟鎹簮鐨勫畾涔夛紝
+ * 鎶婃暟鎹簮鐨勫畾涔変綔涓衡�渄ataSource鈥濇敞鍐屽埌Spring瀹瑰櫒涓�
+ */
+@Slf4j
+public class MultiDataSourceBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar,  EnvironmentAware {
+
+    /**
+     * 榛樿dataSource
+     */
+    private DataSource defaultDataSource;
+
+    /**
+     * 鏁版嵁婧恗ap
+     */
+    private Map<String, DataSource> dataSourcesMap = new HashMap<>();
+
+
+    @Override
+    public void setEnvironment(Environment environment) {
+        //璇诲彇閰嶇疆鏂囦欢鑾峰彇鏇村鏁版嵁婧�
+        String dsNames = environment.getProperty("spring.datasource.names");
+        for (String dsName : dsNames.split(",")) {
+            dsName = dsName.trim() ;
+            try{
+                final String keyNames = "spring.datasource." + dsName ;
+                Properties properties = new Properties() ;
+                ((StandardEnvironment) environment)
+                        .getPropertySources().stream()
+                        .forEach((propertySource) -> {
+                            if (propertySource instanceof MapPropertySource) {
+                                MapPropertySource mps = (MapPropertySource) propertySource;
+                                Set<String> keys = mps.getSource().keySet();
+                                for (String key : keys) {
+                                    if (key.startsWith(keyNames)) {
+                                        properties.put(key.replace(keyNames + ".", ""), String.valueOf(mps.getProperty(key))) ;
+                                        //log.info(key.replace(keyNames + ".", "") + "=" + String.valueOf(mps.getProperty(key)));
+                                    }
+                                }
+                            }
+                        });
+
+                DruidDataSource dataSource = (DruidDataSource)DruidDataSourceFactory.createDataSource(properties) ;
+                if (dataSourcesMap.size() == 0) {
+                    defaultDataSource = dataSource;
+                }
+                dataSourcesMap.put(dsName, dataSource);
+            }catch (Exception e){
+                log.error("鍒涘缓鏁版嵁婧�" + dsName + "寮傚父", e);
+            }
+        }
+    }
+
+    @Override
+    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
+        Map<Object, Object> targetDataSources = new HashMap<Object, Object>();
+        //娣诲姞鍏朵粬鏁版嵁婧�
+        targetDataSources.putAll(dataSourcesMap);
+        //鍒涘缓DynamicDataSource
+        GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
+        beanDefinition.setBeanClass(MultiDataSource.class);
+        beanDefinition.setSynthetic(true);
+        MutablePropertyValues mpv = beanDefinition.getPropertyValues();
+        //defaultTargetDataSource 鍜� targetDataSources灞炴�ф槸 AbstractRoutingDataSource鐨勪袱涓睘鎬ap
+        mpv.addPropertyValue("defaultTargetDataSource", defaultDataSource);
+        mpv.addPropertyValue("targetDataSources", targetDataSources);
+        //娉ㄥ唽鍒癝pring瀹瑰櫒涓�
+        registry.registerBeanDefinition("dataSource", beanDefinition);
+    }
+
+}
\ No newline at end of file

--
Gitblit v1.8.0