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<Session> sessionThread=new ThreadLocal<Session>(); private static final ThreadLocal<Transaction> transactionThread=new ThreadLocal<Transaction>(); private static ...
使用数据连结池jdbc连结private static final ThreadLocal<Connection> tl=new ThreadLocal<Connection>();//泛型为值的类型
java8 源码 设计模式 java 并发 public class Foo { // SimpleDateFormat ...private static ...ThreadLocal<SimpleDateFormat> ...ThreadLocal<Map>> MAPPING = ThreadLocal.withInitial(HashMap::new); public
private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>(); private static Configuration configuration = new Configuration(); private static org.hibernate.SessionFactory ...
ThreadLocal<MessageConsumer> threadLocal = new ThreadLocal<>(); AtomicInteger count = new AtomicInteger(); public void init(){ try { connectionFactory = new ActiveMQConnectionFactory...
activiti源码分析,详细介绍工作流的基础框架和一些源码
消息处理机制主要对象:Looper,Handler,Message(还有Message...static final ThreadLocal<Looper> sThreadLocal = new ThreadLocal<Looper>(); private static Looper sMainLooper; // guarded by Looper.class final
主要介绍了深入理解ThreadLocal工作原理及使用示例,涉及ThreadLocal<T> 简介和使用示例及ThreadLocal<T>的原理等相关内容,具有一定参考价值,需要的朋友可以了解下。
UniqueNumClientUniqueNumberService的客户端内部实现使用threadlocal和LinkedBlockingQueue作为buffer线程安全多线程安全性能大约8000万每秒使用初始化Set<Long> set=new HashSet<Long>();LinkedList<ServerBean> ...
<groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>2.0.0.RELEASE</version> </dependency> 项目启动后 访问 http://127.0.0.1:8764/ 来实现...
DSL 平台 - JSON 示例 说明使用 DSL 平台的 JSON(反)序列化的小示例。 要构建和运行,请使用build-and... 对于每线程重用,使用类似ThreadLocal<JsonWriter> 更喜欢.toStream(OutputStream)而不是.toByteArray() .t
ThreadLocal应用示例及理解,这个写了相关的示例,可以参考一下。
ThreadLocal入门教程。 讲解了线程安全和ThreadLocal的使用的基本知识。
ThreadLocal
理解ThreadLocal 理解ThreadLocal 理解ThreadLocal 理解ThreadLocal
javaee开发常见的模式有MVC模式,在C层中常常会再次分层,如:servlet(web层)、service(业务逻辑层)、dao(数据访问层),其中service和dao最容易混在一起,如转...所以,使用ThreadLocal可以解决这样的分层问题。
学习ThreadLocal,了解其中的原理,以及学习其中的优点!避免坑点!!
线程本地 可移植,实现可配置,并且与c++11 thread_local兼容。 使用宏THREADL_LOCA(T)的相同代码支持由宏USE_STD_THREAD_LOCAL控制的不同实现。...c++11 thread_local不适用于vs2013,macOS <10> )必须具有静态
正确理解ThreadLocal.pdf