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


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!