在我的spring-jdbc项目中,我有一个名为DBStuff
的类,用于连接数据库并进行简单的数据库操作。这是一个Web项目,并有用户,所以自然我使用会话机制。当我需要在DBStuff
类检索请求数据,我使用这行代码如下:RequestContextHolder线程安全吗?
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
但是,没有解释,如果RequestContextHolder
是线程安全与否。即使春天的官方forum也没有答案。由于使用servlet,我需要为用户提供线程安全性。
根据定义RequestContextHolder
定义为“Holder类以线程绑定RequestAttributes
对象的形式公开Web请求。”但我不确定是否“线程绑定”代表线程安全。
这是线程安全的,但你为什么你的数据访问层绑定到你的web层...这是一种代码异味,你做错了一个信号。 –
我的DataAccess层和Web层是独立的,但每个用户请求都保留其登录数据,这在数据库操作中起着巨大的作用。我应该将DataAccess类更改为原型吗?但是,如果我这样做,是不是会为我的系统花费太多内存和性能? –
不,他们没有分开...你的数据层依赖于web层。你不能把你的dbaccess类放到非web启用的服务器上,因为它与Spring的'javax.servlet'和Web相关的包紧密耦合。因此,网络和数据访问之间的耦合。如果你需要的话,或者在方法参数中传递这些东西,或者将它存储在一个'ThreadLocal'中,但是不要泄漏Web绑定类中的其他任何东西。 –