了解Apache Tomcat连接池

时间:2017-07-16 08:37:02

标签: java tomcat jdbc

我正在尝试实现Apache Tomcat的内置JDBC连接池。但我对很多事情感到困惑。

官方页面中提到了两种初始化连接池的方法。 一个使用JNDI查找,另一个使用java PoolProperty类。

对于JNDI查找,我们必须向context.xmlserver.xml添加条目并在java代码中初始化它。这需要硬编码数据库连接细节。

对于池属性,我们必须使用datasource对象在PoolProperty类中设置各种连接属性。是否需要实例化工厂? (org.apache.tomcat.jdbc.pool.DataSourceFactory

每当尝试使用池属性时,我都会收到错误:

  

严重:无法创建池的初始连接。   java.sql.SQLException:调用时的无效参数   oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)

我检查并确认所有属性都是正确的。一旦我使用xml方法,就会出现此错误。有人可以帮助我在没有xml的情况下配置池的正确方法吗?

这个独立的java代码给了我错误:      PoolProperties p = new PoolProperties();

     String dburl="jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCP)(HOST=hostname) (PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=shostname2)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=Service)))";

     p.setUrl(dburl);
    p.setDriverClassName("oracle.jdbc.OracleDriver");
    p.setUsername(username);
    p.setPassword(pwd);
    p.setJmxEnabled(true);
    p.setTestWhileIdle(false);
    p.setTestOnBorrow(true);
    p.setValidationQuery("SELECT 1 from dual");
    p.setTestOnReturn(false);
    p.setValidationInterval(30000);
    p.setTimeBetweenEvictionRunsMillis(30000);
    p.setMaxActive(100);
    p.setInitialSize(10);
    p.setMaxWait(10000);
    p.setRemoveAbandonedTimeout(600);
    p.setMinEvictableIdleTimeMillis(30000);
    p.setMinIdle(10);
    p.setLogAbandoned(true);

    p.setRemoveAbandoned(true);
    p.setJdbcInterceptors(
            "org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;"
            + "org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer;"
            + "org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer");

    p.setLogValidationErrors(true);   datasource = new org.apache.tomcat.jdbc.pool.DataSource(  );
    datasource.setPoolProperties(p); 

当我将一个全局资源添加到Server.xml时,它正在工作。

  

资源验证="容器" description ="可以是用户数据库   更新并保存"   工厂=" org.apache.tomcat.jdbc.pool.DataSourceFactory"   名称=" JDBC /数据库"类型=" javax.sql.DataSource中" />

请帮助我理解,正确的实施方式是什么。

0 个答案:

没有答案