From 4513ef24bf9b188c2a77d6ce94f1a6b7e9ebf0e6 Mon Sep 17 00:00:00 2001 From: zuoxiao <470321431@qq.com> Date: 星期日, 27 四月 2025 20:40:19 +0800 Subject: [PATCH] fix(irrigatePlan): 修正灌溉计划开始时间逻辑 --- 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