Java 播放框架:启动后存储连接?
我正在使用Play框架编写一个RESTful API,在应用程序启动时有一些引导操作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
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;
}
}