- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Jetty 和 HttpServlet 创建一个简单的 API 后端。我读过here和 here关于 HttpServlet 线程安全的详细信息 普遍的共识似乎是,这是处理 HttpServlert 中变量访问的正确方法:
public class MyServlet extends HttpServlet {
private static Object thisIsNotThreadsafe;
private Object thisIsAlsoNotThreadsafe;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Object thisIsThreadsafe;
thisIsNotThreadsafe = request.getParameter("foo"); // BAD! Shared among all requests.
thisIsAlsoNotThreadsafe = request.getParameter("foo"); // BAD! Shared among all requests.
thisIsThreadsafe = request.getParameter("foo"); // Good.
}
}
我想做的是创建一个新的 MongoClient :
MongoClient mongoClient = new MongoClient("localhost", 27017);
我可以将其设为“全局变量”,但这不是线程安全的。每次调用 doGet 或 doPost 时,我都可以创建一个新实例。但 MongoDB 的 Java 驱动程序文档似乎也建议不要这样做:
A MongoDB client with internal connection pooling. For most applications, you should have one MongoClient instance for the entire JVM.
解决这个问题的最佳方法是什么?
最佳答案
如果 MongoClient
实例是线程安全的,并且可以由多个线程共享而不会成为并发瓶颈,那么您可以为共享的 MongoClient
实例实现 Singleton 包装器。
根据 Mongo 文档的说法,这将是“最正确”的方法,特别是如果您有/可能有多个 servlet 类。
如果 MongoClient
实例不是线程安全的,等等,那么您需要为 MongoClient
实例实现某种(线程安全)连接池。
如果您使用的框架支持依赖注入(inject) (DI),那么还有其他解决方案可以避免显式单例和池的一些问题。
关于java - HtppServlet 和 MongoClient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39928153/
我正在尝试使用 Jetty 和 HttpServlet 创建一个简单的 API 后端。我读过here和 here关于 HttpServlet 线程安全的详细信息 普遍的共识似乎是,这是处理 HttpS
我是一名优秀的程序员,十分优秀!