博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据库访问 threadlocal模式[参考easydbo]
阅读量:6494 次
发布时间:2019-06-24

本文共 2231 字,大约阅读时间需要 7 分钟。

JDBCContext类主要解决数据连接的问题
public 
class JDBCContext {
    
    
private 
static 
final Log log = LogFactory.getLog(JDBCContext.
class);
    
//
private Database database;
    
private DataSource datasource;
    
protected Connection connection;
    
private 
boolean isValid = 
true;
    
private 
static ThreadLocal<JDBCContext> jdbcContext;
    
/**
     * 私有构造函数
     * 
@param
 database
     
*/
    
private JDBCContext(DataSource datasource){        
        
this.datasource = datasource;
        createConnection();        
    }
    
public 
static JDBCContext getJdbcContext(DataSource datasource)
    {        
        
        
if(jdbcContext==
null)jdbcContext=
new JDBCContextThreadLocal(datasource);
        
        JDBCContext context = (JDBCContext) jdbcContext.get();
        
if (context == 
null) {
            
            context = 
new JDBCContext(datasource);
            
        }
        
return context;
    }
    
    
private 
void createConnection(){        
        
try{
            
            
if(connection == 
null || connection.isClosed() == 
true){
                log.debug("Create a connection");
                
                
//
connection=datasource.getConnection();
                
//
isValid = true;
                
                
if(datasource != 
null){
                    
                        
//
Class.forName(datasource.getdBType().getDriverclass()).newInstance();
                        
//
connection = DriverManager.getConnection(datasource.getUrl(), datasource.getUser(),datasource.getPassword());
                    connection=datasource.getConnection();
                    isValid = 
true;
                    
                }
                
else{
                    log.error("DataSource is invalid");
                    isValid = 
false;
                    
return;
                }
            }
else{
                log.debug("The current connection is valid.");
            }
        }
catch(Exception e){
            e.printStackTrace();
        }
        
    }
    
    
/**
     * 释放当前连接;
     
*/
    
public 
void releaseConnection(){
        
try{
            
if(connection != 
null && connection.isClosed() == 
false){
                connection.close();
                
//
 添加代码 by chenying                
                jdbcContext.remove();
                isValid = 
false;
                log.debug("The connection is closed.");
            }
        }
catch(SQLException e){
            e.printStackTrace();
        }
    }
    
    
/**
     * 
@return
     
*/
    
public Connection getConnection(){
        
        log.debug("Get a Connection!");
        
try{
        
if(connection==
null || connection.isClosed())createConnection();
        }
        
catch(Exception e)
        {
            e.printStackTrace();
        }
        
return connection;
    }
    
/**
     * 
@return
     
*/
    
public 
boolean isValid(){
        
return isValid;
    }
    
    
    
/**
     * 内部类
     * 
@author
 Administrator
     *
     
*/
    
private 
static 
class JDBCContextThreadLocal 
extends ThreadLocal<JDBCContext> {
        
public DataSource datasource;
        
public JDBCContextThreadLocal(DataSource datasource)
        {
            
this.datasource=datasource;
        }
        
protected 
synchronized JDBCContext initialValue() {            
            
return 
new JDBCContext(datasource);            
        }
    }
}

转载地址:http://pikyo.baihongyu.com/

你可能感兴趣的文章
cocos2d游戏开发,常用工具集合
查看>>
FatTree胖树拓扑结构
查看>>
Kafka深度解析
查看>>
unsigned 后面不跟类型的情况
查看>>
fio硬盘压力测试
查看>>
信号处理——卷积(convolution)的实现
查看>>
多线程同步(循环50 基础加深版)
查看>>
Black and White
查看>>
静态变量和实例变量的区别
查看>>
晨跑【最小费用最大流】
查看>>
景点中心 C组模拟赛
查看>>
iOS国际化(多语言设置)
查看>>
bzoj 2733 平衡树启发式合并
查看>>
sublime简书安装配置
查看>>
爱上MVC~Web.Config的Debug和Release版本介绍
查看>>
条款03 尽可能使用const
查看>>
【转】那些年我们一起清除过的浮动
查看>>
python__高级 : 动态添加 对象属性, 类属性, 对象实例方法, 类静态方法, 类方法...
查看>>
【每天一道算法题】时间复杂度为O(n)的排序
查看>>
NLog的介绍使用
查看>>