package com.querydsl.example.sql.guice; import javax.inject.Inject; import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException; public class ConnectionContext { private final DataSource dataSource; private final ThreadLocal<Connection> connectionHolder = new ThreadLocal<Connection>(); @Inject public ConnectionContext(DataSource dataSource) { this.dataSource = dataSource; } public Connection getConnection(boolean create) { Connection connection = connectionHolder.get(); if (!create || connection != null) { return connection; } try { connection = dataSource.getConnection(); } catch (SQLException e) { throw new RuntimeException(e); } connectionHolder.set(connection); return connection; } public Connection getConnection() { return connectionHolder.get(); } public void removeConnection() { connectionHolder.remove(); } }