在会话中以小规模Web应用程序存储数据库连接

时间:2009-09-20 13:09:43

标签: database session jdbc java-ee connection

我有一个j2ee网络应用程序,由20-30人内部使用。

用户数量无法显着增长。

根据我的理解,在为webapp发出的每个请求之间打开一个新的数据库连接(代价高昂,但在使用数据库时不会阻止其他用户),使用单例模式之间存在权衡(不不打开新连接,但一次只允许一个用户。)

我认为,因为我知道只有30个用户会同时使用我的webapp,也许最简单和最好的解决方案是将连接存储为会话属性,从而将开放量减少到最少,同时仍然为每个用​​户分配一个连接。 你觉得怎么样?

3 个答案:

答案 0 :(得分:3)

  

据我所知,有一个   在打开新数据库之间进行权衡   每个请求的连接   webapp

这就是连接池的用途。如果在应用程序中使用连接池,则池初始化后,将负责在需要时提供在应用程序中使用的连接。在适当调整的连接池中,将在保留时创建足够的连接,可以提供给应用程序,从而减少仅在应用程序请求时才创建和打开连接的需要。

  我认为,因为我只知道   30位用户将使用我的webapp   同时,也许是最简单的   最好的解决方案是存储   连接作为会话属性

每个用户的连接并不是一个好主意,主要是在涉及Web应用程序时。在Web应用程序中,用户完全可以向服务器发起多个请求(想想多标签浏览)。在这种情况下,除非您同步访问连接,否则每个用户使用单个连接将导致奇怪的应用程序行为。

还必须考虑将瞬态属性放入会话的副作用 - 连接对象不可序列化,因此必须标记为瞬态。如果会话在某个时刻被反序列化,则必须考虑Connection对象不可用的事实,并且必须重新初始化。

答案 1 :(得分:1)

我认为你正在进入过早优化,特别是考虑到应用程序的规模。打开一个新连接并不是那么昂贵,就像Makach所说的那样,大多数现代RDBMS都处理连接池,并为后续请求保持连接打开。你可以尝试编写比编译器更好的代码,可以这么说。

答案 2 :(得分:0)

没有。不要那样做。每次需要时都可以重新连接到数据库。我认为任何数据库管理系统都会自己进行连接池缓存。

如果你想尝试保持开放式连接,你将难以置信,以安全,无错误,安全等方式管理它。