You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					99 lines
				
				3.4 KiB
			
		
		
			
		
	
	
					99 lines
				
				3.4 KiB
			| 
											3 years ago
										 | package com.ynxbd.common.config.db;
 | ||
|  | 
 | ||
|  | import com.alibaba.druid.pool.DruidDataSource;
 | ||
|  | import com.ynxbd.common.helper.ProperHelper;
 | ||
|  | import com.ynxbd.common.helper.common.FileHelper;
 | ||
|  | import org.slf4j.Logger;
 | ||
|  | import org.slf4j.LoggerFactory;
 | ||
|  | 
 | ||
|  | import java.sql.Connection;
 | ||
|  | import java.sql.SQLException;
 | ||
|  | import java.util.List;
 | ||
|  | import java.util.Properties;
 | ||
|  | 
 | ||
|  | public class LisDB {
 | ||
|  |     private final static Logger log = LoggerFactory.getLogger(LisDB.class);
 | ||
|  | 
 | ||
|  |     private static DruidDataSource dataSource;
 | ||
|  | 
 | ||
|  |     static {
 | ||
|  |         dataSource = init();
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     private static synchronized DruidDataSource init() {
 | ||
|  |         if (dataSource != null) {
 | ||
|  |             return dataSource;
 | ||
|  |         }
 | ||
|  |         final DruidDataSource dataSource = new DruidDataSource();
 | ||
|  | 
 | ||
|  |         ProperHelper config = DataBase.getConfig();
 | ||
|  | 
 | ||
|  |         dataSource.setDriverClassName(config.getString("lis.driverClassName"));
 | ||
|  |         dataSource.setUrl(config.getString("lis.jdbcUrl"));
 | ||
|  |         dataSource.setUsername(config.getString("lis.username"));
 | ||
|  |         dataSource.setPassword(config.getString("lis.password"));
 | ||
|  |         // 连接池配置
 | ||
|  |         Integer min = config.getInteger("lis.minIdle");
 | ||
|  |         if (min != null) {
 | ||
|  |             dataSource.setMinIdle(min);
 | ||
|  |         }
 | ||
|  |         Integer max = config.getInteger("lis.maxActive");
 | ||
|  |         if (max != null) {
 | ||
|  |             dataSource.setMaxActive(max);
 | ||
|  |         }
 | ||
|  |         Integer initialSize = config.getInteger("lis.initialSize");
 | ||
|  |         if (initialSize != null) {
 | ||
|  |             dataSource.setInitialSize(initialSize);
 | ||
|  |         }
 | ||
|  | 
 | ||
|  |         dataSource.setMaxWait(60 * 1000); // 60s
 | ||
|  |         // 异步初始化连接
 | ||
|  |         dataSource.setAsyncInit(true);
 | ||
|  |         dataSource.setValidationQuery("SELECT 1");
 | ||
|  |         // 安全性
 | ||
|  |         dataSource.setTestWhileIdle(true);
 | ||
|  |         dataSource.setTestOnBorrow(false);
 | ||
|  |         dataSource.setTestOnReturn(false);
 | ||
|  |         // 打开PSCache,并且指定每个连接上PSCache的大小
 | ||
|  |         dataSource.setPoolPreparedStatements(true);
 | ||
|  |         dataSource.setMaxPoolPreparedStatementPerConnectionSize(120);
 | ||
|  |         // 连接泄露检查
 | ||
|  |         dataSource.setRemoveAbandonedTimeoutMillis(300000);
 | ||
|  |         // 关闭连接时输出错误日志,这样出现连接泄露时可以通过错误日志定位忘记关闭连接的位置
 | ||
|  |         dataSource.setLogAbandoned(true);
 | ||
|  |         dataSource.setMinEvictableIdleTimeMillis(300000);
 | ||
|  |         // 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
 | ||
|  |         dataSource.setTimeBetweenConnectErrorMillis(60000);
 | ||
|  | 
 | ||
|  |         return dataSource;
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     /**
 | ||
|  |      * 获取连接
 | ||
|  |      */
 | ||
|  |     public static Connection getConnection() {
 | ||
|  |         Connection conn = null;
 | ||
|  |         try {
 | ||
|  |             if (dataSource == null) {
 | ||
|  |                 dataSource = init();
 | ||
|  |             }
 | ||
|  |             conn = dataSource.getConnection();
 | ||
|  |         } catch (SQLException e) {
 | ||
|  |             log.error("Lis数据库连接失败!{}, {}", dataSource.getUrl(), e.getMessage());
 | ||
|  |             if (dataSource != null) {
 | ||
|  |                 dataSource.close();
 | ||
|  |                 dataSource = null;
 | ||
|  |             }
 | ||
|  |         }
 | ||
|  |         return conn;
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public static <T> List<T> select(String sql, Class<T> clazz, DataBase.IPS ips) {
 | ||
|  |         return DataBase.select(getConnection(), sql, clazz, ips);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public static <T> List<T> select(String sql, Class<T> clazz) {
 | ||
|  |         return DataBase.select(getConnection(), sql, clazz, null);
 | ||
|  |     }
 | ||
|  | }
 |