📄 datasourcemanager.java
字号:
package com.easyjf.dbo;
import java.sql.Connection;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;//apache的连接沲
import org.apache.log4j.Logger;
import com.easyjf.dbo.config.DBOConfig;
/**
* 数据源管理类,主要用户测试,实际应用中一般直接通过JNDI访问服务器的数据源
* @author 蔡世友
*
*/
public class DataSourceManager {
private final static Logger logger = Logger.getLogger(DataSourceManager.class);
private static final Map container=new HashMap();
private static DataSource dataSource=null;
private String jndi;
private String jndiFactory;
private String poolFactory;
private String driver;
private String url;
private String userName;
private String password;
public DataSourceManager()
{
}
public DataSourceManager(DataSource source)
{
DataSourceManager.dataSource=source;
// container.put("default",source);
}
//通过jndi取得数据源
public DataSourceManager(String jndiFactory,String url,String jndi)
{
this.url=url;
this.jndiFactory=jndiFactory;
this.jndi=jndi;
}
/**
*
* @param driver 驱动名称
* @param url 驱动URL
* @param userName 数据库用户名
* @param password 数据库帐号
*/
public DataSourceManager(String driver,String url,String userName,String password,String poolFactory)
{
this.driver=driver;
this.url=url;
this.userName=userName;
this.password=password;
this.poolFactory=poolFactory;
}
/**
* 创建JNDI数据源
* @return 数据源可用则返该数据源,不可用则返回空
*/
public DataSource createJNDISource()
{
DataSource source=null;
try{
Hashtable env = new Hashtable();
if(jndiFactory!=null && (!jndiFactory.equals("")))
env.put(Context.INITIAL_CONTEXT_FACTORY,jndiFactory);
if(url!=null && (!url.equals("")))
env.put(Context.PROVIDER_URL,url);
InitialContext ctx=new InitialContext(env);
if(jndi!=null && (!jndi.equals("")))
source=(DataSource)ctx.lookup(jndi);
else
logger.error("无法查找JNDI数据源,请确认配置文件是否正确!");
}
catch(Exception e)
{
logger.error("JNDI数据源创建错误!");
}
if(!testConnection(source))source=null;
return source;
}
/**
* 创建驱动数据源
* @return 如果数据源可用,则返回该数据源,不可用则返回空
*/
public DataSource createDriverSource()
{
BasicDataSource bdds = new BasicDataSource();
bdds.setDriverClassName(driver);
bdds.setUrl(url);
bdds.setUsername(userName);
bdds.setPassword(password);
if(!testConnection(bdds))bdds=null;//如果数据源不可用,则返回空
return bdds;
}
/**
* 测试数据源连接是否可用
* @param source
* @return
*/
public boolean testConnection(DataSource source)
{
boolean ret=false;
if(source==null)return false;
Connection con=null;
try{
con=source.getConnection();
if(con!=null)
{
ret=true;
}
}
catch(Exception e)
{
logger.error("无法从数据源创建数据连接,请确认是否配置正确!"+e);
}
finally{
try{
if(con!=null)con.close();
}
catch(Exception e)
{
logger.error("无法从数据源创建数据连接,请确认是否配置正确!"+e);
}
}
return ret;
}
public void setDataSource(DataSource source)
{
DataSourceManager.dataSource=source;
}
public static void addDataSource(String name,DataSource dataSource)
{
container.put(name,dataSource);
}
public static Map getDataSources() throws EasyDBOException
{
if(container.isEmpty()) DBOConfig.getInstance().init();
return container;
}
public static DataSource getDataSource()throws EasyDBOException
{
if(dataSource==null)
{
//try{
dataSource=DBOConfig.getInstance().getDataSource();
//}
//catch(EasyDBOException e)
//{
// logger.error(e);
//}
}
return dataSource;
}
public static DataSource getDataSource(String name)throws EasyDBOException
{
if(container.isEmpty())
{
DBOConfig.getInstance().init();
}
Object data=container.get(name);
if(data==null ||(!(data instanceof DataSource)))
{
throw new EasyDBOException("找不到ID为"+name+"的数据库源,请确认配置文件是否正确!");
}
return dataSource;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -