nacos-group / nacos-spring-project

Nacos ECO Project for Spring Framework
https://nacos.io/
Apache License 2.0
756 stars 311 forks source link

CacheableEventPublishingNacosServiceFactory单例缓存BUG #264

Open Skycat opened 3 years ago

Skycat commented 3 years ago

Issue Description

Type: bug report 版本: 1.1.0 CacheableEventPublishingNacosServiceFactory单列缓存导致启动IOC容器关闭后再创建一个IOC容器时会注入 xxxCache中缓存的已销毁的Bean

Describe what happened

我们的业务有特殊需求,先后启动了两次spring容器,第一次启动容器完成业务后关闭容器,这时会销毁如CacheableEventPublishingNacosServiceFactory.namingServicesCache中已创建的Bean并执行destroy生命周期方法(会关闭内部线程池),但是cache实例并未移除,导致第二次启动spring容器时会注入已销毁的Bean,出现线程池已关闭的问题

Describe what you expected to happen

容器关闭时缓存的Bean执行生命周期方法销毁时需要从缓存中移除

How to reproduce it (as minimally and precisely as possible)

1.启动一个IOC容器,某个Bean注入NameService实例,然后关闭IOC容器

  1. 同一进程内再次启动一个IOC容器,某个Bean注入NameService实例,此时调用注入的NameService实例注册服务会抛出线程池关闭异常,实际注入的是第一次启动容器创建的实例

Tell us your environment

Anything else we need to know?

paderlol commented 3 years ago

你的意思每次容器启动应该是一个全新的实例对吗?

Skycat commented 3 years ago

你的意思每次容器启动应该是一个全新的实例对吗?

对,因为第二次容器启动注入的是已经销毁的Bean,只是缓存还引用着

paderlol commented 3 years ago

好的,我们这边看一下

Skycat commented 3 years ago

好的,我们这边看一下

THX

onewe commented 3 years ago

@I will solve it@