elasticsearch,Java,Session,Caching,Playframework,elasticsearch" /> elasticsearch,Java,Session,Caching,Playframework,elasticsearch" />

Java 播放框架:启动后存储连接?

Java 播放框架:启动后存储连接?,java,session,caching,playframework,elasticsearch,Java,Session,Caching,Playframework,elasticsearch,我正在使用Play框架编写一个RESTful API,在应用程序启动时有一些引导操作 Client transClient = new TransportClient(settings) .addTransportAddress(new InetSocketTransportAddress(ESHost, 9300)); 这是非常基本的,我建立了到ElasticSearch集群的连接。现在,我希望跨包/控制器/etc访问transClient,一个解决方法是缓存.set

我正在使用Play框架编写一个RESTful API,在应用程序启动时有一些引导操作

Client transClient = new TransportClient(settings)
            .addTransportAddress(new InetSocketTransportAddress(ESHost, 9300));
这是非常基本的,我建立了到
ElasticSearch
集群的连接。现在,我希望跨
包/控制器/etc
访问
transClient
,一个解决方法是
缓存.set(“ES”,transClient)
,这当然是不对的


我在网上找不到任何关于此的文档。最好的方法是什么?

最简单的方法是单身。您甚至不必在全局onStart方法中引导它

tl;dr


在我当前的项目中,我们使用Guice singleton作用域来解决此类问题。因此,我们可以轻松地向控制器或服务注入任何内容。这种解决方案有很多优点,尤其是在测试期间。如果您的项目中没有任何依赖注入框架,那么一个简单的单例将完成这项工作。解决线程安全问题取决于您。

这是迄今为止我遇到的最好的解决方案。谢谢
public class ConnectionHolder {

    private static ConnectionHolder holder;
    private Client transClient = new TransportClient(settings).addTransportAddress(new InetSocketTransportAddress(ESHost, 9300));

    private ConnectionHolder() {   }

    static ConnectionHolder getInstance() {
        return holder == null ? holder = new ConnectionHolder() : holder;
    }

    public Client getClient() {
        return transClient;
    }

}