【问题标题】:Use of pooling for my web App in servlet?在 servlet 中为我的 Web 应用程序使用池化?
【发布时间】:2019-10-21 10:47:34
【问题描述】:

我正在使用谷歌应用引擎 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。所以也许我想错了方向

【问题讨论】:

  • 你的问题到底是什么?
  • 我想我找到了一个解决方案,我只需要回到谷歌示例的路径(over there)。但无论如何,除了使用servletContext之外,我找不到另一种方法来查找/初始化池并在servlet中使用。还有其他方法吗?提前致谢

标签: java google-app-engine servlets hikaricp


【解决方案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();
    }
}

【讨论】:

  • 感谢您的回答。如果连接丢失或超时怎么办?不确定是否理解其中的逻辑。提前致谢
猜你喜欢
  • 2013-10-30
  • 2012-03-04
  • 1970-01-01
  • 1970-01-01
  • 2011-12-03
  • 2011-02-17
  • 2016-02-01
  • 2018-01-17
  • 1970-01-01
相关资源
最近更新 更多