【发布时间】:2013-10-26 13:19:52
【问题描述】:
我正在使用一个自定义拦截器,它创建一个新的数据库连接,并在执行操作之前将此连接设置为当前操作。之后,拦截器关闭连接。
我正在寻找一种便捷的方式来与该操作使用的其他类/静态方法(例如模型)共享此数据库连接。例如,我可以调用像User.get( id ) 或User.getEmail( id ) 这样的静态方法,而不必分别将数据库连接传递给每个方法。
我可以将 db 连接从拦截器设置到 ActionContext,方法是:
ServletActionContext.getActionContext().put("db", db );
然后我可以通过静态方法访问这个数据库连接,例如:
public class User implements Model
{
public static String getEmail(int id)
{
Connection db =
(Connection) ServletActionContext.getActionContext().get("db");
//...
}
}
我的问题是,是否会为每个给定的请求生成一个新的ActionContext,所以我可以确定每次都会使用一个新的数据库连接?例如,如果我有 500 个人访问 mysite.com/fooAction,我能否确定这 500 个请求中的每一个都生成一个唯一的 ActionContext,并且每次调用 User.getEmail() 将只访问给定请求所特有的数据库连接?
谢谢。
【问题讨论】:
标签: java servlets struts2 thread-local actioncontext