From b3b17b231e2f2840332ce6eb96f791865fdec6d5 Mon Sep 17 00:00:00 2001
From: zhubaomin <zhubaomin>
Date: 星期一, 14 四月 2025 16:38:16 +0800
Subject: [PATCH] 代码优化
---
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