在Servlet中为我的Web应用程序使用池化?

时间:2019-06-05 22:12:03

标签: java google-app-engine servlets hikaricp

我正在使用Google App Engine JAVA 8和Servlet 3.1,并希望使用HikariCP进行池化。

为了更好的理解,我将用伪代码编写逻辑。

此时,当用户连接到servlet时,每次都会创建到数据库的新连接。

所以我的servlet看起来像这样

doGet(){
  DatabaseObject db = new DatabaseObject()
  Connection conn = db.getConnection()
  db.createTable(conn)
  db.readData(conn)
  ...
  conn.close()
}

现在,我已经看到许多像this one这样的池化示例 但是首先我不确定这是我要实现的目标,我也不是很了解整个过程

任何示例,欢迎解释,因为我尝试搜索网络并且找不到一些servlet。所以也许我在想错方向

1 个答案:

答案 0 :(得分:1)

该示例看起来像是将池存储在应用程序(servlet)上下文中。

我做了不同的事情。通常我创建一个类,将其称为MyDb。然后,我向其中添加了各种方法来访问数据。其中有一个getConnection()方法。

在内部,MyDb具有自己的连接池。 getConnection()只是从池中返回一个连接。创建第一个MyDb时初始化池。

这样的事情(这是针对应用引擎的,因此未指定端口):

private static DataSource pool = null;

public MyDb( String dbhost, String dbdsn, String dbuid, String dbpwd )
{
    try
    {
        if( MyDb.pool == null )
        {
            String dbconn = null;
            String dbclassname = null;

            HikariConfig config = new HikariConfig();

            dbconn = "jdbc:google:mysql://" + dbhost + "/" + dbdsn;
            dbclassname = "com.mysql.jdbc.GoogleDriver";

            config.setJdbcUrl( dbconn );
            config.setUsername( dbuid );
            config.setPassword( dbpwd );

            MyDb.pool = new HikariDataSource( config );
        }
        catch( Exception e )
        {
            logger.error( e.getMessage() );
        }
    }

    protected Connection getConnection() throws Exception
    {
        return pool.getConnection();
    }
}