package org.quickbundle.project.multidb; import org.quickbundle.base.beans.factory.RmBeanFactory; import org.quickbundle.base.exception.RmRuntimeException; import org.quickbundle.tools.support.log.RmLogHelper; import org.springframework.beans.MutablePropertyValues; import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; import org.springframework.beans.factory.support.BeanDefinitionRegistry; public class RmMultiDataSource { private static String dataSource_slave_key = ""; private static String dataSource_slave_url = ""; private static volatile boolean isInitCreateBean = false; public RmMultiDataSource() { super(); } public void init(){ if(!isInitCreateBean) { synchronized (RmMultiDataSource.class) { if(!isInitCreateBean) { try { if(RmBeanFactory.getBeanFactory() instanceof BeanDefinitionRegistry) { BeanDefinitionRegistry bdr = (BeanDefinitionRegistry)RmBeanFactory.getBeanFactory(); String[] aChannelKey = dataSource_slave_key.split("[\\s,]+"); String[] aChannelUrl = dataSource_slave_url.split("[\\s,]+"); for (int i = 0; i < aChannelUrl.length; i++) { AbstractBeanDefinition bd_abstractInnerDataSource = BeanDefinitionReaderUtils.createBeanDefinition("abstractInnerDataSource", null, null); MutablePropertyValues mpv_abstractInnerDataSource = new MutablePropertyValues(); mpv_abstractInnerDataSource.addPropertyValue("url", aChannelUrl[i]); bd_abstractInnerDataSource.setPropertyValues(mpv_abstractInnerDataSource); AbstractBeanDefinition bd_dataSourceChannel = BeanDefinitionReaderUtils.createBeanDefinition("abstractDataSource", null, null); bd_dataSourceChannel.setAbstract(false); bd_dataSourceChannel.setLazyInit(true); MutablePropertyValues mpv_dataSourceChannel = new MutablePropertyValues(); mpv_dataSourceChannel.addPropertyValue("dataSource", bd_abstractInnerDataSource); bd_dataSourceChannel.setPropertyValues(mpv_dataSourceChannel); bdr.registerBeanDefinition(aChannelKey[i], bd_dataSourceChannel); RmLogHelper.getLogger(this.getClass()).info("registerBeanDefinition:" + aChannelKey[i] + "-->" + bd_dataSourceChannel); } } else { RmLogHelper.getLogger(RmMultiDataSource.class).error("RmBeanFactory.getBeanFactory() instanceof BeanDefinition = false"); throw new RmRuntimeException("RmBeanFactory.getBeanFactory() instanceof BeanDefinitionRegistry = false"); } isInitCreateBean = true; } catch (Exception e) { e.printStackTrace(); if(e instanceof RuntimeException) { throw (RuntimeException)e; } } } } } } public String getDataSource_slave_url() { return dataSource_slave_url; } public void setDataSource_slave_url(String dataSource_slave_url) { RmMultiDataSource.dataSource_slave_url = dataSource_slave_url; } public String getDataSource_slave_key() { return dataSource_slave_key; } public void setDataSource_slave_key(String dataSource_slave_key) { RmMultiDataSource.dataSource_slave_key = dataSource_slave_key; } }