在阅读了一些servlet体系结构,tomcat机制和数据库池后,我想知道我是否应该在我的servlet的init中打开一个连接(并在destroy中关闭)? 我的目标是提高性能,所以我想我应该使用连接池。 首先,我使用tomcat的内置DB池机制。
context.xml中
<Context>
<Resource name="jdbc/mytest" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="userxy" password="xy" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mytest"/>
</Context>
web xml:
<resource-ref>
<description>MyTest</description>
<res-ref-name>jdbc/mytest</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
我很确定我可以在s.th.否则如果必要的话。 所以我的问题是:我应该使用名为doGet()的每个请求代替serlet的init()/ destroy()并信任池化机制吗? 什么,如果我同时使用它们?
答案 0 :(得分:2)
如果你在Init中打开一个连接并在Destroy中关闭它,你几乎肯定会遇到问题。
Servlet是多线程的。您只有一个servlet实例处理多个线程。
例如,假设您插入一条记录,然后检索last_insert_id()。如果你只有一个线程运行它将工作正常。如果你有两个或多个线程在运行,你的一些线程将得到错误的引用。
到目前为止,最好的方法是根据请求从池中获取连接,并在完成后在finally块中释放它。