目录
0. 相关文章链接
1. 开发目的
2. 导入依赖
3. 代码
4. Hikari连接池各配置说明
0. 相关文章链接
开发随笔文章汇总
1. 开发目的
在使用SpringBoot后端开发中,我们如果需要对数据库(比如MySQL)进行增删查改,可以很方便的使用Mybatis进行 *** 作。但是在大数据中,如果想要对数据库进行 *** 作,就没有那么方便,虽然大数据组件中有各种连接源和写入源,比如Spark读取MySQL数据库,flink写入MySQL数据库等。但是也有很多需要 *** 作其他数据库,或者在中途读取维度数据的情况,比如Flink将数据写入到Doris中,这样就不方便 *** 作了,此时一个较为方便的工具类能方便很多使用。
2. 导入依赖
如下依赖是以华为GaussDBForDWS为案例
com.huaweicloud.dws
huaweicloud-dws-jdbc
log4j
log4j
provided
org.slf4j
slf4j-api
provided
org.slf4j
slf4j-log4j12
provided
com.alibaba
fastjson
commons-beanutils
commons-beanutils
provided
com.google.guava
guava
provided
org.springframework.boot
spring-boot-starter-jdbc
${springboot.version}
com.zaxxer
HikariCP
2.6.1
对应的版本号:
8
8
2.11
2.11.8
1.10
1.10.0
1.4.0
1.2.17
1.7.21
8.0.21
1.2.75
8.1.0
1.9.4
29.0-jre
3.6.0
2.0.2.RELEASE
UTF-8
1.10.0
3. 代码
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.google.common.base.CaseFormat;
import com.google.common.collect.Lists;
import com.zaxxer.hikari.HikariDataSource;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.*;
/**
* @date: 2021/6/9
* @author: yangshibiao
* @desc: GaussDB中DWS服务的工具类
*/
public class GaussDBUtil {
public static Logger logger = LoggerFactory.getLogger(GaussDBUtil.class);
/**
* jdbcTemplate
*/
private static JdbcTemplate jdbcTemplate;
/**
* 使用单例模式获取实时数仓的GaussDB的jdbcTemplate
*
* @return jdbcTemplate
*/
public static JdbcTemplate getJdbcTemplate() {
if (jdbcTemplate == null) {
synchronized (GaussDBUtil.class) {
if (jdbcTemplate == null) {
try {
Properties props = new Properties();
props.put("batchMode", "OFF");
HikariDataSource ds = new HikariDataSource();
ds.setDriverClassName("org.postgresql.Driver");
ds.setJdbcUrl(ModelUtil.getConfigValue("gaussdb.realtime.dw.url"));
ds.setUsername(ModelUtil.getConfigValue("gaussdb.realtime.dw.username"));
ds.setPassword(ModelUtil.getConfigValue("gaussdb.realtime.dw.password"));
ds.setMaximumPoolSize(2);
ds.setMinimumIdle(1);
ds.setDataSourceProperties(props);
jdbcTemplate = new JdbcTemplate(ds);
logger.info("使用HikariPool连接池初始化JdbcTemplate成功,其中最大连接大小为:{} , 最小连接大小为:{} ;", ds.getMaximumPoolSize(), ds.getMinimumIdle());
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("创建GaussDB数据库的jdbcTemplate失败,抛出的异常信息为:" + e.getMessage());
}
}
}
}
return jdbcTemplate;
}
/**
* 处理传入数据中的特殊字符(例如: 单引号)
*
* @param object 传入的数据对象
* @return 返回的结果
*/
public static String disposeSpecialCharacter(Object object) {
String result = null;
if (object instanceof String) {
result = object.toString();
} else {
result = JSON.parseObject(JSON.toJSONString(object)).toString();
}
return result.replace("'", "''");
}
/**
* 如果传入的clz中的属性又包含对象,会报错,此时传入JSONObject对象即可
*
* @param sql 执行的查询语句
* @param clz 返回的数据类型
* @param underScoreToCamel 是否将下划线转换为驼峰命名法
* @param 样例类
* @return 样例类集合
*/
public static List queryList(String sql, Class clz, boolean underScoreToCamel) {
try {
List
4. Hikari连接池各配置说明
# Hikari will use the above plus the following to setup connection pooling
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
#最小空闲连接,默认值10,小于0或大于maximum-pool-size,都会重置为maximum-pool-size
spring.datasource.hikari.minimum-idle=5
#最大连接数,小于等于0会被重置为默认值10;大于零小于1会被重置为minimum-idle的值
spring.datasource.hikari.maximum-pool-size=15
#自动提交从池中返回的连接,默认值为true
spring.datasource.hikari.auto-commit=true
#空闲连接超时时间,默认值600000(10分钟),大于等于max-lifetime且max-lifetime>0,会被重置为0;不等于0且小于10秒,会被重置为10秒。
#只有空闲连接数大于最大连接数且空闲时间超过该值,才会被释放
spring.datasource.hikari.idle-timeout=30000
#连接池名称,默认HikariPool-1
spring.datasource.hikari.pool-name=Hikari
#连接最大存活时间.不等于0且小于30秒,会被重置为默认值30分钟.设置应该比mysql设置的超时时间短;单位ms
spring.datasource.hikari.max-lifetime=55000
#连接超时时间:毫秒,小于250毫秒,会被重置为默认值30秒
spring.datasource.hikari.connection-timeout=30000
#连接测试查询
spring.datasource.hikari.connection-test-query=SELECT 1
注:其他相关文章链接由此进 -> 开发随笔文章汇总
评论列表(0条)