我们正在使用spring-cloud-starter-hystrix和spring-cloud-starter-archaius,一旦战争未部署,我们就无法停止archaius的poolingconfigurationSource线程。但是spring-cloud-starter-archaius在没有hystrix的情况下工作正常,一旦战争未部署,线程就会停止。
答案 0 :(得分:1)
尝试在Spring应用程序关闭之前重置Hystrix
@EnableCircuitBreaker
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@PreDestroy
public void cleanUp() {
Hystrix.reset();
}
}
答案 1 :(得分:1)
**Issue resolved permanently.**
**There are 2 approach :**
1) Create ContextListener in Servlet and in destroy method , copy below code.
2) If you are using Histrix + Spring Boot + Archaius then on main spring application java file , copy below code in method annonated with @PreDestory annotations.
**Solution :**
try {
if (ConfigurationManager.getConfigInstance() instanceof DynamicConfiguration) {
DynamicConfiguration config = (DynamicConfiguration) ConfigurationManager.getConfigInstance();
config.stopLoading();
} else if (ConfigurationManager.getConfigInstance() instanceof ConcurrentCompositeConfiguration) {
ConcurrentCompositeConfiguration configInst = (ConcurrentCompositeConfiguration) ConfigurationManager
.getConfigInstance();
List<AbstractConfiguration> configs = configInst.getConfigurations();
if (configs != null) {
for (AbstractConfiguration config : configs) {
if (config instanceof DynamicConfiguration) {
((DynamicConfiguration) config).stopLoading();
break;
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
答案 2 :(得分:0)
Davin提出的解决方案可以部分修复名为pollingConfigurationSource
的一些线程的存在。您还需要确保在类路径中没有任何名为config.properties
的文件,因为com.netflix.config.sources.URLConfigurationSource
(在所有情况下查看源代码)将搜索常见的patsh并启动一个exectutor线程。代码中有多个路径导致启动线程“pollingConfigurationSource”上的执行器服务(不总是停止)。在我的情况下删除“config.properties”解决了这个泄漏
我知道的其他泄漏是由Hystrix / RjJava引起的。这不会调用Histrix.reset
调用rx.schedulers.Schedulers.shutdown();
,而是强制线程“RxIoScheduler-”退出。