2

我试着:

  1. 从 JNDI 中读取 MySQL 数据源
  2. 使用此 JNDI 数据源来配置 DBCP 连接池以及我的 JDBC 连接
  3. 使用 JDBC 触发 SQL 语句
  4. 礼貌地关闭(释放连接回池,关闭其他任何东西等)

这段代码会被大量触发(它是一个简单的应用程序日志系统),因此任何可以在多个 SQL 执行中保持打开状态的东西都最好保持打开状态(以减少打开/关闭内容等的开销)。

这是我最好的尝试:

    try {
        // 1. Obtain the dbLogger datasource from JNDI.
        Context context = new InitialContext();
        DataSource logDatabaseDS = (DataSource)context.lookup(logDatabaseJNDI);

        // 2. Configure the connection pool with my JNDI datasource.
        // HOW?

        // 3. Obtain a connection from the pool.
        // HOW?

        // 4. Use this connection to fire a JDBC INSERT.
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection("urlFromJNDI", 
                "userFromJNDI", "passwordFromJNDI");

        PreparedStatement statement = conn.prepareStatement(InsertSQL);
        statement.setString(1, appName);
        statement.setLong(2, timestamp);
        statement.setString(3, logLevel);

        statement.executeUpdate();

        // 5. Release the borrowed connection back to the pool.
        // HOW?
    } catch (SQLException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (NamingException e) {
        e.printStackTrace();
    } 

相信我的基本设置是正确的。只是不确定:

  1. 如何使用 JNDI 设置的属性(如 、 等)配置maxIdleDBCPmaxWait
  2. 以有效的方式从 DBCP 池中借用连接(因此此代码每秒可以触发数十/数百次并且不会泄漏资源)
  3. 将来自 JNDI 数据源的连接字符串 URL、用户名和密码注入DriverManager.getConnection(...)方法中
  4. 礼貌/正确地将连接释放回池中。

而且,如果我没有正确设置此过程,请先纠正我的一般方法!再次感谢!

4

0 回答 0