我在 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();
}
}