
com.lingdonge.db.dynamic.datasource.AbstractDynamicDataSource Maven / Gradle / Ivy
package com.lingdonge.db.dynamic.datasource;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.stat.DruidDataSourceStatManager;
import com.lingdonge.db.util.DataSourceBuilder;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.MapUtils;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
import javax.sql.DataSource;
import java.sql.DriverManager;
import java.util.Map;
import java.util.Set;
/**
* 动态数据源父类
* 该类继承AbstractRoutingDataSource,并重写determineCurrentLookupKey方法,用于确定使用哪套数据源。该类又实现了ApplicationContextAware,在Spring容器初始化的时候,会执行setApplicationContext方法,将Spring容器的上下文对象注入到属性ctx中,然后就可以使用ctx.getBean(name)来获取Spring容器中的对象。
* 代码参考:https://my.oschina.net/simpleton/blog/916108
*
* 可以在代码中动态创建数据源并注入
* https://www.cnblogs.com/wsss/p/5475057.html
* http://www.tpyyes.com/a/javaweb/2017/0829/192.html
* https://blog.csdn.net/fangdengfu123/article/details/70139644
* https://blog.csdn.net/u012881904/article/details/77449710
*/
@Slf4j
public abstract class AbstractDynamicDataSource extends AbstractRoutingDataSource implements ApplicationContextAware {
/**
* 数据源KEY-VALUE键值对
*/
private Map
© 2015 - 2025 Weber Informatics LLC | Privacy Policy