gpt4 book ai didi

spring - 如何在 Spring 应用程序中拥有每个线程但可重用的对象 (PubNub)?

转载 作者:行者123 更新时间:2023-12-04 11:00:47 24 4
gpt4 key购买 nike

我在 Spring Boot 应用程序中连接到 PubNub。 From the documentation, it's ok to re-use PubNub objects但最好每个线程有一个。在 Spring Boot 中为每个线程存储和检索一个对象的适当方法是什么?

最佳答案

这是使用 ThreadLocal 在 Spring 中为每个线程存储和检索对象的方式。 ,这个例子是基于Spring自己的ThreadLocalSecurityContextHolderStrategy用于存储 SecurityContext每个线程。

另外,看看InheritableThreadLocal特别是如果您的代码启动新线程,例如 Spring 的@Async注释,它具有在创建子线程时传播现有或创建新线程本地值的机制。

import org.springframework.util.Assert;

final class ThreadLocalPubNubHolder {

private static final ThreadLocal<PubNub> contextHolder = new ThreadLocal<PubNub>();

public void clearContext() {
contextHolder.remove();
}

public PubNub getContext() {
PubNub ctx = contextHolder.get();

if (ctx == null) {
ctx = createEmptyContext();
contextHolder.set(ctx);
}

return ctx;
}

public void setContext(PubNub context) {
Assert.notNull(context, "Only non-null PubNub instances are permitted");
contextHolder.set(context);
}

public PubNub createEmptyContext() {
// TODO - insert code for creating a new PubNub object here
return new PubNubImpl();
}
}

关于spring - 如何在 Spring 应用程序中拥有每个线程但可重用的对象 (PubNub)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46835282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com