总有人间一两风,填我十万八千梦

Tomcat JSP/Servlet 使用局部数据库连接池(mysql)

JAVA/JSP Zero、J 3704℃ 0评论

由于基于Http协议的web程序是无状态的,因此在应用程序中使用JDBC时,每次处理客户端请求都会重建数据库连接,如果客户端的请求频繁,将会消耗非常多的资源,因此tomcat服务器提供了一种数据库连接优化技术–数据库连接池技术,连接池负责分配、管理和释放数据库的连接,它允许应用程序重复使用一个现有的连接,而不需要重新创建一个新的连接。在使用完一个连接之后将连接归还数据库连接池,以备其他请求使用。

配置局部数据库连接池

打开Web工程的META-INF文件夹,在其内部创建一个名称为context.xml的配置文件,并写入如下的配置:

<Context path="/ServletDemo" docBase="ServletDemo" debug="1">
<Resource name="jdbc/ServletdemoDbRC" auth="Container"
 type="javax.sql.DataSource"
 driverClassName="com.mysql.jdbc.Driver"
 url="jdbc:mysql://localhost:3306/servletdemo?characterEncoding=utf8"
 username="root"
 password="123456"
 maxActive="500"
 maxIdle="50" 
 maxWait="3000"/> 
</Context>

其中ServletDemo表示的是Web工程目录,ServletdemoDbRC是这个资源的名称,在代码中使用此名称可以获取到相关的连接。url中的servletdemo是相关的数据库名称,username和password是数据库的用户名称和密码,maxActive表示连接池中最大的连接数,maxIdle表示最大的空闲连接数,maxWait表示等待连接的最大时间(毫秒)。

获取连接代码

上述配置完成之后在Servlet中使用如下的代码可以获取到连接。

 PrintWriter out = response.getWriter();
 response.setContentType("text/html;charset=UTF-8");
 try{
 
 javax.naming.Context ctx = new javax.naming.InitialContext();
 //使用资源的名称进行引用[ServletdemoDbRC]
 javax.sql.DataSource ds = (javax.sql.DataSource)ctx.lookup("java:/comp/env/jdbc/ServletdemoDbRC");
 //获取到连接
 Connection conn = ds.getConnection();
 //简单的数据库查询
 PreparedStatement pstmt = conn.prepareStatement("select * from test");
 ResultSet RS = pstmt.executeQuery();
 while(RS.next()){
 out.print(RS.getString("id")+"<br>");
 }
 pstmt.close();
 
 }catch(Exception e){
 out.println(e.getMessage());
 }

上面的代码是在doGet中的一个测试,其中test是一个只有字段id的表,执行上述的Servlet结果如下图所示:

apache_mysql_pool

图 连接池测试结果

转载请注明:悠然品鉴 » Tomcat JSP/Servlet 使用局部数据库连接池(mysql)

喜欢 (2)or分享 (0)
发表我的评论
取消评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址