Merge pull request #8709 from dataease/pr@dev@fixconn

fix(数据源): 停止应用时,释放数据源链接
This commit is contained in:
taojinlong 2024-03-26 16:51:03 +08:00 committed by GitHub
commit da5ebe55d6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 24 additions and 4 deletions

View File

@ -1,6 +1,7 @@
package io.dataease.listener;
import io.dataease.commons.utils.LogUtil;
import io.dataease.service.datasource.DatasourceService;
import net.sf.ehcache.CacheManager;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -8,17 +9,23 @@ import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextClosedEvent;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component
public class ApplicationCloseEventListener implements ApplicationListener<ContextClosedEvent> {
@Autowired(required = false)
CacheManager cacheManager;
@Resource
DatasourceService datasourceService;
@Override
public void onApplicationEvent(ContextClosedEvent event) {
if (ObjectUtils.isNotEmpty(cacheManager))
cacheManager.shutdown();
datasourceService.releaseDsconnections();
LogUtil.info("DataEase is stopping");
}
}

View File

@ -10,10 +10,7 @@ import io.dataease.commons.constants.DePermissionType;
import io.dataease.commons.constants.RedisConstants;
import io.dataease.commons.constants.SysAuthConstants;
import io.dataease.commons.model.AuthURD;
import io.dataease.commons.utils.AuthUtils;
import io.dataease.commons.utils.BeanUtils;
import io.dataease.commons.utils.CommonThreadPool;
import io.dataease.commons.utils.LogUtil;
import io.dataease.commons.utils.*;
import io.dataease.controller.ResultHolder;
import io.dataease.controller.datasource.request.UpdataDsRequest;
import io.dataease.controller.request.DatasourceUnionRequest;
@ -43,6 +40,7 @@ import io.dataease.plugins.common.request.datasource.DatasourceRequest;
import io.dataease.plugins.common.util.SpringContextUtil;
import io.dataease.plugins.datasource.entity.JdbcConfiguration;
import io.dataease.plugins.datasource.entity.Status;
import io.dataease.plugins.datasource.provider.DefaultJdbcProvider;
import io.dataease.plugins.datasource.provider.Provider;
import io.dataease.plugins.datasource.provider.ProviderFactory;
import io.dataease.provider.datasource.ApiProvider;
@ -654,4 +652,15 @@ public class DatasourceService {
datasourceMapper.updateByPrimaryKeyWithBLOBs(datasource);
}
public void releaseDsconnections(){
List<DefaultJdbcProvider> providers = (List<DefaultJdbcProvider>)SpringContextUtil.getApplicationContext().getBeansOfType(DefaultJdbcProvider.class).values();
providers.forEach(provider ->{
provider.getJdbcConnection().values().forEach(druidDataSource -> {
try {
druidDataSource.close();
}catch (Exception e){}
});
});
}
}

View File

@ -23,6 +23,10 @@ import java.sql.*;
import java.util.*;
public abstract class DefaultJdbcProvider extends Provider {
public Map<String, DruidDataSource> getJdbcConnection() {
return jdbcConnection;
}
protected Map<String, DruidDataSource> jdbcConnection = new HashMap<>();
protected ExtendedJdbcClassLoader extendedJdbcClassLoader;
private Map<String, ExtendedJdbcClassLoader> customJdbcClassLoaders = new HashMap<>();