我在我的JAX REST服务中使用RavenDB,我想将数据库连接设置代码从服务方法移到自己的ServletContextListener中,这样它只能在Tomcat服务器启动时执行一次;之后,每个服务调用应由已存在的连接处理。 (This文章描述了如何设置连接池 - 但我不确定它是否仍适用,已有9年......)
关于设置数据库连接的“昂贵”操作,它们是哪些 - 用于:
try (DocumentStore store = ravenDBStore)
{
store.parseConnectionString(ravenLocation);
store.initialize();
IDocumentSession currentSession = store.openSession();
...
}
我怀疑它是initialize()方法,这种方法很昂贵,应该从服务调用代码中移出;怎么样openSession()?是否 - 甚至在理论上 - 可以在REST方法的服务调用之间共享/重用? BTW,this article是我要重新计算数据库连接代码的原因。
谢谢!
答案 0 :(得分:1)
DocumentStore应该被视为一个单例(每个应用程序一个实例), 阅读this。 Initialize方法创建与服务器的连接,然后在初始化之前,您无法打开新会话。 然后移动DocumentStore的创建及其初始化。
我建议您根据请求打开会话,考虑到这是一项服务,无论如何打开新会话都不会对性能产生重大影响