此问题已在此处有答案:
How should I connect to JDBC database / datasource in a servlet based application?(2个答案)
Is it safe to use a static java.sql.Connection instance in a multithreaded system?(2个答案)
9天前关闭
在阅读了servlet体系结构、Tomcat机制和DB池之后,我想知道我是否真的应该在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>
网站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()并信任池机制吗?如果我两个都用呢
1条答案
按热度按时间ccrfmcuu1#
如果你在Init中打开一个连接,然后在Destroy中关闭它,你几乎肯定会遇到问题。
Servlet是多线程的。只有一个servlet示例处理多个线程。
例如,假设您插入一条记录,然后检索last_insert_id()。如果你只有一个线程在运行,它会工作得很好。如果你有两个或更多的线程在运行,你的一些线程将得到错误的引用。
到目前为止,最好的方法是在请求时从池中获取连接,并在完成时在finally块中释放它。