Cấu hình Connection Pool trong Tomcat

Trong post trước mình đã giới thiệu về sử dụng JDBC trong Servlet kết nối Database. Thế nhưng trong thực tế việc sử dụng JDBC là rất hiếm gặp mà thay vào đó người ta sẽ sử dụng Connection Pool của Tomcat để quản lý và kết nối vào Database. Vì vậy trong bài viết này mình sẽ giới thiệu Cấu hình Connection Pool trong Tomcat.

Tại sao vậy ? Tại vì khi sử dụng Connection Pool của Tomcat thì :

  • Quản lý Pool hiệu quả
  • Bảo mật hơn
  • Kết nối đơn giản

Thông tin version:

  • Tomcat 8.x
  • Java 1.8x
  • Eclipse 4.4.2
  • Jdbc : com.mysql.jdbc_5.1.5.jar

1. Chuẩn bị thư viện

Copy thư viện Jdbc vào thư mục  {Tomcat}\lib\

Chú ý cần restart lại Tomcat

2. Cấu hình Connection Pool trong tomcat

Tạo class SelectDataMysqlWithConnectionPoolServlet.java

package com.loop.servlet.sql;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

public class SelectDataMysqlWithConnectionPoolServlet extends HttpServlet {

  private static final long serialVersionUID = 1L;

  /**
  * Create by Cuder
  */
  public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
    res.setContentType("text/html; charset=UTF-8");
    PrintWriter out = res.getWriter();
    Connection conn = null;
    try {
      Context initialContext = new InitialContext();
      Context environmentContext = (Context) initialContext.lookup("java:comp/env");
      DataSource dataSource = (DataSource) environmentContext.lookup("jdbc/datasourcePool");
      conn = dataSource.getConnection();
      Statement stm = conn.createStatement();
      ResultSet rs = stm.executeQuery("select * from userlogin");
      while (rs.next()) {
        out.write(rs.getString(1) + " : " + rs.getString(2));
        out.write("");
      }
    } catch (NamingException e1) {
      out.write(e1.getMessage());
    } catch (SQLException e) {
      out.write(e.getMessage());
    } finally {
      try {
        if (conn != null) {
          conn.close();
        }
      } catch (SQLException e) {
        out.write(e.getMessage());
      }
    }
  }
}

Cấu hình file {Tomcat}\conf\context.xml

<Resource name="jdbc/datasourcePool" auth="Container"
type="javax.sql.DataSource"
removeAbandoned="true"
removeAbandonedTimeout="30"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="root"
password="root"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/loopTest"/>

Cấu hình file web.xml

<servlet>
<servlet-name>SelectDataMysqlWithConnectionPoolServlet</servlet-name>
<servlet-class>com.loop.servlet.sql.SelectDataMysqlWithConnectionPoolServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>SelectDataMysqlWithConnectionPoolServlet</servlet-name>
<url-pattern>/SelectDataMysqlWithConnectionPoolServlet/*</url-pattern>
</servlet-mapping>

<resource-ref>
<description>This is a reference to the global Resource for MySQL database connetion.</description>
<res-ref-name>jdbc/datasourcePool</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

3. Kết quả

Servlet kết nối Database
Rate this post
Đinh Thế Hiển
 

Mình là người thích viết lách, chia sẻ các trải nghiệm trong cuộc sống. Thích thể thao đặc biệt là thể hình. Hãy kết nối với mình nhé.

Click Here to Leave a Comment Below 0 comments