如果我有
Closeable
资源DataSource
我的选择是什么?
首先,我考虑过使用ThreadLocal
,但ThreadLocal
和Thread
似乎都没有在线程死亡时提供通知。 servlet api提供了许多生命周期方法,但不适用于线程。
这通常是怎么做的?
答案 0 :(得分:1)
根据您对我提出的澄清问题的回答,我建议开发一个类似于连接池的资源池。主要用例是:
您已经可以使用Apache的通用资源池API来实现此功能,Apache Commons Pool。
答案 1 :(得分:0)
这实际上取决于资源的性质......
如果它是数据源,管理(打开和关闭)不应该是servlet的 - 它应该是容器。
其他资源可能更适合每个servlet使用一个实例,因此不必担心线程安全。
如果没有进一步的信息,我只能建议servlet听起来不应该负责资源管理。也许您可以声明一个Servlet Context侦听器,它在应用程序启动时创建资源,并在应用程序停止时关闭它?
http://docs.oracle.com/javaee/7/api/index.html?javax/servlet/ServletContextListener.html
答案 2 :(得分:0)
有一个简单的解决方案: 使用对象池。 Apache Commons提供了一个符合您要求的简单实现(参见示例here)。 我们的想法是让一个池管理您的对象。 可以请求,使用然后返回对象。您可以在请求开始时获取实例,并在结束时将其返回池中。 这就是数据库连接池正在执行的过程。