package com.zheytech.common.util;
import com.zaxxer.hikari.HikariDataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class DataConnectUtil {
private static final Logger logger = LoggerFactory.getLogger(DataConnectUtil.class);
private static Map<String, HikariDataSource> sourceMap = new HashMap<>();
private static HikariDataSource getSource(){
HikariDataSource dataConfig = new HikariDataSource();
dataConfig.setMaximumPoolSize(3);
dataConfig.setMinimumIdle(1);
dataConfig.setAutoCommit(true);
dataConfig.setConnectionTimeout(10000L);
dataConfig.setMaxLifetime(600000L);
dataConfig.setConnectionTestQuery("SELECT 1 FROM DUAL");
dataConfig.addDataSourceProperty("cachePrepStmts", "true");
dataConfig.addDataSourceProperty("prepStmtCacheSize", "250");
dataConfig.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
dataConfig.setDriverClassName("oracle.jdbc.driver.OracleDriver");
return dataConfig;
}
public static <T> List<T> customDataSource(String id, String url, String username, String password, String query, Class<T> clazz) {
HikariDataSource dataConfig = sourceMap.get(id);
if(null == sourceMap.get(id)){
dataConfig = getSource();
dataConfig.setJdbcUrl(url);
dataConfig.setUsername(username);
dataConfig.setPassword(password);
sourceMap.put(id, dataConfig);
}
try {
JdbcTemplate dtl = new JdbcTemplate(dataConfig);
return dtl.query(query, new BeanPropertyRowMapper<>(clazz));
} catch (Exception e){
e.printStackTrace();
logger.error("数据库连接异常:{}", e.getMessage());
}
return null;
}
}