java配置多数据源多连接池的工具类,这里是mysql和mongoDB

public class DBManager {
	
	private static final String PREFIX="jdbc:apache:commons:dbcp:"; 
	private static Log log =LogFactory.getLog(DBManager.class);
	
	private static Map mongoMap;   //已经初始化的mongoDB的map信息
	//已经初始化的mongoDB中 db名称信息 key:mongodb.id  value:mongodb.dbname
	private static Map mongoDbMap;   
	private static Set dbNames;                   //已经初始化数据库服务器标识
	
	private static DBManager instance;
	
	//线程变量保存连接
	protected static ThreadLocal threadConnection=new ThreadLocal();
	
	
	/**
	 * 返回DBManager实例
	 * @return
	 * @throws Exception
	 */
	public static DBManager getInstance() throws Exception{
		if(instance==null){
			instance=new DBManager();
		}
		return instance;
	}
	
	private DBManager() throws Exception{
		initDB();
	}
	
	/**
	 * 返回所有初始化的数据库服务器标识
	 * @return 服务器标识数组
	 */
	public  String[] getDBNames(){
		String[] dbs=(String[]) dbNames.toArray();
		String[] clones=Arrays.copyOf(dbs, dbs.length);
		return clones;
	}
	
	/**
	 * 获取数据库连接
	 * @param dbKey 数据库连接池标识
	 * @return  数据库连接
	 * @throws SQLException 
	 */
	public  Connection getConnection(String dbKey) throws SQLException{
		Connection conn=threadConnection.get();
		if(conn==null||conn.isClosed()){
			//如果连接不存在建立连接放入线程变量中
			conn=DriverManager.getConnection(PREFIX+dbKey);
			threadConnection.set(conn);
		}
		return conn;
	}
	
	/**
	 * 获取数据库连接
	 * @param dbKey	数据库连接池标识
	 * @param autoCommit 是否自动提交  true是  false否
	 * @return 数据库连接
	 * @throws SQLException 
	 */
	public  Connection getConnection(String dbKey,boolean autoCommit) throws SQLException{
		Connection conn=getConnection(dbKey);
		conn.setAutoCommit(autoCommit);
		return conn;
	}
	
	/**
	 * 初始化数据库连接池
	 * @throws Exception 初始化失败
	 */
	public  void initDB() throws Exception{
		mongoMap=new HashMap();
		mongoDbMap=new HashMap();
		dbNames=new HashSet();
		setupPool();
		setupMongoDB();
	}
	
	/**
	 * 初始化数据库连接池
	 * 关系型数据库 使用DBCP建立
	 * @throws IOException 
	 * @throws FileNotFoundException 
	 */
	private void setupPool() throws Exception{
		String filePath=this.getClass().getClassLoader().getResource("").getFile();
		File f=new File(filePath+"conf/db");
		File[] files=f.listFiles(new FilenameFilter(){
			//过滤关系型数据库的配置文件
			public boolean accept(File dir, String name) {
				return name.matches("^db\\w*fu\\w*.properties$"); //是关系型数据库的配置文件
			}
		});		
		for(int i=0;i

你可能感兴趣的:(java配置多数据源多连接池的工具类,这里是mysql和mongoDB)