今天又同学说到一个应用多数据源切换问题,我大概一想,不就是个工厂方法模式去处理,随手谢了个demo。
1、首先是接口
public interface IDBUtil {
Connection getConnection();
void closeConn(Connection c);
}
2、几个实现:
public class DBSource2 implements IDBUtil {
private static DataSource dataSource;
public DBSource2(){
//初始化数据源
if(dataSource == null){
//加载
}
}
/* (non-Javadoc)
* @see xiaoli.test.IDBUtil#getConnection()
*/
public Connection getConnection() {
// TODO Auto-generated method stub
Connection conn = null;
try {
conn = dataSource.getConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
/* (non-Javadoc)
* @see xiaoli.test.IDBUtil#closeConn(java.sql.Connection)
*/
public void closeConn(Connection c) {
// TODO Auto-generated method stub
}
}
public class DBSource1 implements IDBUtil {
private static DataSource dataSource;
public DBSource1(){
//初始化数据源
if(dataSource == null){
//加载
}
}
/* (non-Javadoc)
* @see xiaoli.test.IDBUtil#getConnection()
*/
public Connection getConnection() {
// TODO Auto-generated method stub
Connection conn = null;
try {
conn = dataSource.getConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
/* (non-Javadoc)
* @see xiaoli.test.IDBUtil#closeConn(java.sql.Connection)
*/
public void closeConn(Connection c) {
// TODO Auto-generated method stub
}
}
类型枚举:
/**
* 数据源枚举
*
* @author xiaoli
*
*/
public enum DBType {
DataSource1(0),
DataSource2(1);
private int id;
public int getId() {
return id;
}
private DBType(int id) {
this.id = id;
}
}
工厂方法:
/**
* 工厂方法
*
* @author xiaoli
*
*/
public class DBFactory {
public static IDBUtil getCurrentDataSource(DBType d){
if(DBType.DataSource1 == d){
return new DBSource1();
}else if(DBType.DataSource2 == d){
return new DBSource2();
}else{
return new DBSource1();
}
}
}
以上处理简单记录,看起来简单,想到就行。。。