`
cloudtech
  • 浏览: 4614961 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

private static ThreadLocal<Connection> t1=new ThreadLocal<Connection>();

 
阅读更多
package com.tfy.itheima.jdbc.util;


import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;


import javax.sql.DataSource;


import org.apache.commons.dbcp.BasicDataSourceFactory;




public class DbcpUtil {
private static ThreadLocal<Connection> t1=new ThreadLocal<Connection>();
private static DataSource ds=null;
static{
Properties props=new Properties();
InputStream in=DbcpUtil.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");

try {
props.load(in);
ds=BasicDataSourceFactory.createDataSource(props);
} catch (Exception e) {
e.printStackTrace();
throw new ExceptionInInitializerError(e);
}
}
public static DataSource getDataSource(){

return ds;

}
public static Connection getConnection(){

try {
Connection conn=t1.get();
if(conn==null){
conn=ds.getConnection();
t1.set(conn);
}
return conn;
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}

}
public void release(ResultSet rs,Statement stmt,Connection conn){
if(rs!=null){
try{
rs.close();
}catch(Exception e){
e.printStackTrace();
}
}
if(stmt!=null){
try{
stmt.close();
}catch(Exception e){
e.printStackTrace();
}
}
if(conn!=null){
try{
conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
public static void commit() {
Connection conn=t1.get();
if(conn!=null){
try{
conn.commit();
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e);
}
}

}
public static void release() {
Connection conn=t1.get();
if(conn!=null){
try{
conn.close();
t1.remove();
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e);
}
}

}
public static void startTransaction() {
Connection conn=t1.get();
if(conn==null){
// conn=t1.get();这里取的是t1中的Connection
conn=getConnection();
t1.set(conn);
}
try{
conn.setAutoCommit(false);
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e);
}

}
public static void rollback() {
Connection conn=t1.get();
if(conn!=null){
try{
conn.rollback();
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e);
}
}

}
}
分享到:
评论

相关推荐

    中小公司人事管理系统

    private static final ThreadLocal&lt;Session&gt; sessionThread=new ThreadLocal&lt;Session&gt;(); private static final ThreadLocal&lt;Transaction&gt; transactionThread=new ThreadLocal&lt;Transaction&gt;(); private static ...

    使用数据连结池jdbc连结

    使用数据连结池jdbc连结private static final ThreadLocal&lt;Connection&gt; tl=new ThreadLocal&lt;Connection&gt;();//泛型为值的类型

    java8源码-ac_babel:一些后端学习笔记整理

    java8 源码 设计模式 java 并发 public class Foo { // SimpleDateFormat ...private static ...ThreadLocal&lt;SimpleDateFormat&gt; ...ThreadLocal&lt;Map&gt;&gt; MAPPING = ThreadLocal.withInitial(HashMap::new); public

    J2EE利用Hibernate采用B/S架构网页设计

    private static final ThreadLocal&lt;Session&gt; threadLocal = new ThreadLocal&lt;Session&gt;(); private static Configuration configuration = new Configuration(); private static org.hibernate.SessionFactory ...

    ActiveMQ_Demo

    ThreadLocal&lt;MessageConsumer&gt; threadLocal = new ThreadLocal&lt;&gt;(); AtomicInteger count = new AtomicInteger(); public void init(){ try { connectionFactory = new ActiveMQConnectionFactory...

    activiti源码分析

    activiti源码分析,详细介绍工作流的基础框架和一些源码

    Android异步消息处理机制实现原理详解

    消息处理机制主要对象:Looper,Handler,Message(还有Message...static final ThreadLocal&lt;Looper&gt; sThreadLocal = new ThreadLocal&lt;Looper&gt;(); private static Looper sMainLooper; // guarded by Looper.class final

    深入理解ThreadLocal工作原理及使用示例

    主要介绍了深入理解ThreadLocal工作原理及使用示例,涉及ThreadLocal&lt;T&gt; 简介和使用示例及ThreadLocal&lt;T&gt;的原理等相关内容,具有一定参考价值,需要的朋友可以了解下。

    UniqueNumClient:UniqueNumberService的客户端

    UniqueNumClientUniqueNumberService的客户端内部实现使用threadlocal和LinkedBlockingQueue作为buffer线程安全多线程安全性能大约8000万每秒使用初始化Set&lt;Long&gt; set=new HashSet&lt;Long&gt;();LinkedList&lt;ServerBean&gt; ...

    springboot feign+Hystrix实现简单 微服务之间的调用 熔断的功能

    &lt;groupId&gt;org.springframework.cloud&lt;/groupId&gt; &lt;artifactId&gt;spring-cloud-starter-openfeign&lt;/artifactId&gt; &lt;version&gt;2.0.0.RELEASE&lt;/version&gt; &lt;/dependency&gt; 项目启动后 访问 http://127.0.0.1:8764/ 来实现...

    dsl-platform-json-example

    DSL 平台 - JSON 示例 说明使用 DSL 平台的 JSON(反)序列化的小示例。 要构建和运行,请使用build-and... 对于每线程重用,使用类似ThreadLocal&lt;JsonWriter&gt; 更喜欢.toStream(OutputStream)而不是.toByteArray() .t

    ThreadLocal应用示例及理解

    ThreadLocal应用示例及理解,这个写了相关的示例,可以参考一下。

    ThreadLocal

    ThreadLocal入门教程。 讲解了线程安全和ThreadLocal的使用的基本知识。

    ThreadLocal.pdf

    ThreadLocal

    理解ThreadLocal

    理解ThreadLocal 理解ThreadLocal 理解ThreadLocal 理解ThreadLocal

    使用ThreadLocal解决代码分层问题

    javaee开发常见的模式有MVC模式,在C层中常常会再次分层,如:servlet(web层)、service(业务逻辑层)、dao(数据访问层),其中service和dao最容易混在一起,如转...所以,使用ThreadLocal可以解决这样的分层问题。

    ThreadLocal详解.md

    学习ThreadLocal,了解其中的原理,以及学习其中的优点!避免坑点!!

    ThreadLocal:可移植和实现可配置的c ++ 11,例如线程本地

    线程本地 可移植,实现可配置,并且与c++11 thread_local兼容。 使用宏THREADL_LOCA(T)的相同代码支持由宏USE_STD_THREAD_LOCAL控制的不同实现。...c++11 thread_local不适用于vs2013,macOS &lt;10&gt; )必须具有静态

    正确理解ThreadLocal.pdf

    正确理解ThreadLocal.pdf

Global site tag (gtag.js) - Google Analytics