package com.metazion.jgd.util; import java.io.FileInputStream; import java.io.InputStream; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties; import javax.sql.DataSource; import org.apache.commons.dbcp2.BasicDataSourceFactory; import com.metazion.jm.util.FileUtil; public class DbUtil { private static ThreadLocal<Connection> connLocal = new ThreadLocal<Connection>(); private static Properties properties = new Properties(); private static DataSource dataSource = null; public static boolean init() { String path = FileUtil.getAbsolutePath("data/config/db.properties"); try { InputStream is = new FileInputStream(path); properties.load(is); is.close(); connect(); } catch (Exception e) { JgdLogger.getLogger().error("DbUtil init failed: file[{}] exception[{}]", path, e.toString()); return false; } return true; } public static Connection openConnection() { Connection conn = null; try { conn = connLocal.get(); if (conn == null || conn.isClosed()) { conn = dataSource.getConnection(); connLocal.set(conn); } } catch (Exception e) { try { connect(); conn = connLocal.get(); if (conn == null || conn.isClosed()) { conn = dataSource.getConnection(); connLocal.set(conn); } } catch (Exception e1) { JgdLogger.getLogger().error("DbUtil open connection failed: exception[{}]", e.toString()); } } return conn; } public static void closeConnection(ResultSet rs, PreparedStatement pst) { Connection conn = connLocal.get(); try { if (rs != null) { rs.close(); } if (pst != null) { pst.close(); } if (conn != null && !conn.isClosed()) { conn.close(); connLocal.set(null); } } catch (SQLException e) { JgdLogger.getLogger().error("DbUtil close connection failed: exception[{}]", e.toString()); } } private static void connect() throws Exception { dataSource = BasicDataSourceFactory.createDataSource(properties); } }