diff --git a/core/backend/src/main/java/io/dataease/listener/ApplicationCloseEventListener.java b/core/backend/src/main/java/io/dataease/listener/ApplicationCloseEventListener.java index 4fde79311f..51f090b877 100644 --- a/core/backend/src/main/java/io/dataease/listener/ApplicationCloseEventListener.java +++ b/core/backend/src/main/java/io/dataease/listener/ApplicationCloseEventListener.java @@ -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 { @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"); + } } diff --git a/core/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java b/core/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java index 631993b57f..5d37aab823 100644 --- a/core/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java +++ b/core/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java @@ -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 providers = (List)SpringContextUtil.getApplicationContext().getBeansOfType(DefaultJdbcProvider.class).values(); + providers.forEach(provider ->{ + provider.getJdbcConnection().values().forEach(druidDataSource -> { + try { + druidDataSource.close(); + }catch (Exception e){} + }); + }); + } + } diff --git a/sdk/dataease-plugin-datasource/src/main/java/io/dataease/plugins/datasource/provider/DefaultJdbcProvider.java b/sdk/dataease-plugin-datasource/src/main/java/io/dataease/plugins/datasource/provider/DefaultJdbcProvider.java index 38a7ede59c..3ce1e28613 100644 --- a/sdk/dataease-plugin-datasource/src/main/java/io/dataease/plugins/datasource/provider/DefaultJdbcProvider.java +++ b/sdk/dataease-plugin-datasource/src/main/java/io/dataease/plugins/datasource/provider/DefaultJdbcProvider.java @@ -23,6 +23,10 @@ import java.sql.*; import java.util.*; public abstract class DefaultJdbcProvider extends Provider { + public Map getJdbcConnection() { + return jdbcConnection; + } + protected Map jdbcConnection = new HashMap<>(); protected ExtendedJdbcClassLoader extendedJdbcClassLoader; private Map customJdbcClassLoaders = new HashMap<>();