关于java:在不同的servlet之间共享资源

sharing a resource among different servlets

假设我有一个特定的资源(例如一个使用文件系统的奇怪的数据库),并且我有一个Java类R来管理这个资源(它支持高级API并管理诸如使用S时必需的并发性的东西)。现在我有一个约束,如果R的一个实例管理S,那么R的任何其他实例都不能同时访问S。

现在,假设我有一个servlet v1需要通过r访问s,我想让很多用户同时使用v1,因为容器会给每个用户分配一个新的v1线程,所以我想让r是静态的,在in it()方法中初始化它,以便在线程之间共享。这样行吗?

案例二:现在我有了不同的servletv1,…,vm,每个都可以从许多用户访问。现在,我希望所有这些servlet都可以有一个对s的rw访问权。我必须通过r访问s,并且不能简单地为每个servlet使用r的一个实例,因为一次只有一个实例可以处理s。是否有任何方法在所有servlet的所有线程中共享r?

在我的例子中,ps.r是像neo4j这样的嵌入式数据库。


您可以在r上有一个静态初始值设定项来创建r的唯一实例,并将其存储在某个静态字段中(通过静态getter访问)。

您还可以通过实现ServletContextListener来创建和初始化R的一个实例。Web应用程序启动时调用contextInitialized方法。