diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/SaManager.java b/sa-token-core/src/main/java/cn/dev33/satoken/SaManager.java index a2dea029..1fb7c22e 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/SaManager.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/SaManager.java @@ -103,9 +103,12 @@ public class SaManager { } private static void setSaTokenDaoMethod(SaTokenDao saTokenDao) { if (SaManager.saTokenDao != null) { - SaManager.saTokenDao.onChange(); + SaManager.saTokenDao.destroy(); } SaManager.saTokenDao = saTokenDao; + if (SaManager.saTokenDao != null) { + SaManager.saTokenDao.init(); + } } public static SaTokenDao getSaTokenDao() { if (saTokenDao == null) { diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/dao/SaTokenDao.java b/sa-token-core/src/main/java/cn/dev33/satoken/dao/SaTokenDao.java index 75a46cd4..571b9874 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/dao/SaTokenDao.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/dao/SaTokenDao.java @@ -201,11 +201,18 @@ public interface SaTokenDao { List searchData(String prefix, String keyword, int start, int size, boolean sortType); - // --------------------- 实例相关 --------------------- + // --------------------- 生命周期 --------------------- /** - * 当 SaManager.saTokenDao 变更时,调用该方法 + * 当此 SaTokenDao 实例被装载时触发 */ - default void onChange() { + default void init() { } + + /** + * 当此 SaTokenDao 实例被卸载时触发 + */ + default void destroy() { + } + } diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/dao/SaTokenDaoDefaultImpl.java b/sa-token-core/src/main/java/cn/dev33/satoken/dao/SaTokenDaoDefaultImpl.java index eae8d6e9..c4be1998 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/dao/SaTokenDaoDefaultImpl.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/dao/SaTokenDaoDefaultImpl.java @@ -40,14 +40,6 @@ public class SaTokenDaoDefaultImpl implements SaTokenDao { * 存储数据过期时间的集合(单位: 毫秒), 记录所有 key 的到期时间 (注意存储的是到期时间,不是剩余存活时间) */ public Map expireMap = new ConcurrentHashMap<>(); - - /** - * 构造函数 - */ - public SaTokenDaoDefaultImpl() { - initRefreshThread(); - } - // ------------------------ String 读写操作 @@ -261,11 +253,20 @@ public class SaTokenDaoDefaultImpl implements SaTokenDao { this.refreshThread.start(); } + /** - * 结束定时任务,不再定时清理过期数据 + * 组件被安装时,开始刷新数据线程 */ @Override - public void onChange() { + public void init() { + initRefreshThread(); + } + + /** + * 组件被卸载时,结束定时任务,不再定时清理过期数据 + */ + @Override + public void destroy() { this.refreshFlag = false; } }