Threadlocal用于初始化java web项目中的变量

时间:2015-07-23 04:47:23

标签: java servlets

我想初始化HttpServletRequest的变量。因为我想检查请求是否已经初始化该变量。我正在使用tomcat服务器

例如: HttpServletRequest要执行DBoperationsconnection次。我可以使用一个HttpServletRequest作为整个Threadlocal。还为不同的请求分配不同的连接。我可以使用var test = "GP0|#9d72d96c-407f-4e45-b2e6-9361faf5808a;L0|#09d72d96c-407f-4e45-b2e6-9361faf5808a|Travel;GTSet|#ac96f075-b7d2-4e90-8dc2-da8875f395fc"; var test2 = "GP0|#15a06b93-f7aa-4dda-b0d6-7bf2d2905f27;L0|#015a06b93-f7aa-4dda-b0d6-7bf2d2905f27|Special Event;GTSet|#ac96f075-b7d2-4e90-8dc2-da8875f395fc"; 执行此操作吗?

1 个答案:

答案 0 :(得分:1)

是的,你可以这样做。像Tomcat或Jetty这样的Java Web服务器是线程池服务器,这意味着每个HttpServletRequest都由来自服务器线程池的线程处理。

使用数据库连接时,应用了两种常见模式:每个操作的连接和每个请求/线程的连接。后者是首选和推荐的,ThreadLocal用于实现,每个线程拥有一个连接来执行一系列操作。

实际上,像Hibernate这样的框架使用ThreadLocalThreadLocalSessionContext)来实现每个请求/线程的连接/会话。 您可以在此处阅读更多内容http://www.ibm.com/developerworks/library/j-threads3/

更新: 您只需创建一个连接并将其存储在共享的ThreadLocal对象中,然后从中获取连接(不与其他线程共享)以用于线程/请求中的所有操作,如清单3"从上面的链接。 希望这有帮助!