From 33b93cbdb2aece8a7c6203fd2254f1ee9b6b2941 Mon Sep 17 00:00:00 2001
From: Raod <1130305001@qq.com>
Date: Tue, 6 Jul 2021 16:10:27 +0800
Subject: [PATCH] druid
---
report-core/pom.xml | 6 +++
.../dataSource/pool/util/JdbcUtil.java | 38 +++++++++----------
.../service/impl/DataSourceServiceImpl.java | 18 ++++++++-
3 files changed, 42 insertions(+), 20 deletions(-)
diff --git a/report-core/pom.xml b/report-core/pom.xml
index 3e60344d..3eec9398 100644
--- a/report-core/pom.xml
+++ b/report-core/pom.xml
@@ -93,6 +93,12 @@
4.4.5
+
+ com.alibaba
+ druid
+ 1.2.6
+
+
diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataSource/pool/util/JdbcUtil.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataSource/pool/util/JdbcUtil.java
index e8a72bc0..ecaeed9f 100644
--- a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataSource/pool/util/JdbcUtil.java
+++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataSource/pool/util/JdbcUtil.java
@@ -1,5 +1,6 @@
package com.anjiplus.template.gaea.business.modules.dataSource.pool.util;
+import com.alibaba.druid.pool.DruidDataSource;
import com.anjiplus.template.gaea.business.modules.dataSource.controller.dto.DataSourceDto;
import com.anjiplus.template.gaea.business.modules.dataSource.pool.datasource.PooledDataSource;
import com.anjiplus.template.gaea.business.modules.dataSource.pool.datasource.UnPooledDataSource;
@@ -9,6 +10,7 @@ import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
@@ -18,33 +20,34 @@ import java.util.concurrent.locks.ReentrantLock;
@Slf4j
public class JdbcUtil {
- private static Lock lock = new ReentrantLock();
-
- private static Lock deleteLock = new ReentrantLock();
-
//所有数据源的连接池存在map里
- static Map map = new HashMap<>();
+ static Map map = new ConcurrentHashMap<>();
- public static PooledDataSource getJdbcConnectionPool(DataSourceDto dataSource) {
+ public static DruidDataSource getJdbcConnectionPool(DataSourceDto dataSource) {
if (map.containsKey(dataSource.getId())) {
return map.get(dataSource.getId());
} else {
- lock.lock();
try {
- log.debug(Thread.currentThread().getName() + "获取锁");
if (!map.containsKey(dataSource.getId())) {
- PooledDataSource pool = new PooledDataSource();
- pool.setJdbcUrl(dataSource.getJdbcUrl());
- pool.setUser(dataSource.getUsername());
+ DruidDataSource pool = new DruidDataSource();
+ pool.setUrl(dataSource.getJdbcUrl());
+ pool.setUsername(dataSource.getUsername());
pool.setPassword(dataSource.getPassword());
- pool.setDriverClass(dataSource.getDriverName());
- pool.init();
+ pool.setDriverClassName(dataSource.getDriverName());
+
+ //下面都是可选的配置
+ pool.setInitialSize(10); //初始连接数,默认0
+ pool.setMaxActive(30); //最大连接数,默认8
+ pool.setMinIdle(10); //最小闲置数
+ pool.setMaxWait(2000); //获取连接的最大等待时间,单位毫秒
+ pool.setPoolPreparedStatements(true); //缓存PreparedStatement,默认false
+ pool.setMaxOpenPreparedStatements(20); //缓存PreparedStatement的最大数量,默认-1(不缓存)。大于0时会自动开启缓存PreparedStatement,所以可以省略上一句代码
+
map.put(dataSource.getId(), pool);
log.info("创建连接池成功:{}", dataSource.getJdbcUrl());
}
return map.get(dataSource.getId());
} finally {
- lock.unlock();
}
}
}
@@ -54,18 +57,15 @@ public class JdbcUtil {
* @param id
*/
public static void removeJdbcConnectionPool(Long id) {
- deleteLock.lock();
try {
- PooledDataSource pool = map.get(id);
+ DruidDataSource pool = map.get(id);
if (pool != null) {
map.remove(id);
}
} catch (Exception e) {
log.error(e.toString());
} finally {
- deleteLock.unlock();
}
-
}
/**
@@ -75,7 +75,7 @@ public class JdbcUtil {
* @throws SQLException
*/
public static Connection getPooledConnection(DataSourceDto dataSource) throws SQLException {
- PooledDataSource pool = getJdbcConnectionPool(dataSource);
+ DruidDataSource pool = getJdbcConnectionPool(dataSource);
return pool.getConnection();
}
diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataSource/service/impl/DataSourceServiceImpl.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataSource/service/impl/DataSourceServiceImpl.java
index f1bd601b..a4fb8141 100644
--- a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataSource/service/impl/DataSourceServiceImpl.java
+++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataSource/service/impl/DataSourceServiceImpl.java
@@ -3,8 +3,10 @@ package com.anjiplus.template.gaea.business.modules.dataSource.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
+import com.anji.plus.gaea.constant.BaseOperationEnum;
import com.anji.plus.gaea.constant.Enabled;
import com.anji.plus.gaea.curd.mapper.GaeaBaseMapper;
+import com.anji.plus.gaea.exception.BusinessException;
import com.anji.plus.gaea.exception.BusinessExceptionBuilder;
import com.anji.plus.gaea.utils.GaeaAssert;
import com.anjiplus.template.gaea.business.code.ResponseCode;
@@ -379,5 +381,19 @@ public class DataSourceServiceImpl implements DataSourceService {
dto.setBody(body);
}
-
+ /**
+ * 操作后续处理
+ *
+ * @param entity
+ * @param operationEnum 操作类型
+ * @throws BusinessException 阻止程序继续执行或回滚事务
+ */
+ @Override
+ public void processAfterOperation(DataSource entity, BaseOperationEnum operationEnum) throws BusinessException {
+ switch (operationEnum){
+ case DELETE:
+ JdbcUtil.removeJdbcConnectionPool(entity.getId());
+ break;
+ }
+ }
}