了解Apache Tomcat连接池

我正在尝试实现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,如下所示,它正在工作。

资源auth =“容器”description =“可以更新和保存的用户数据库”factory =“org.apache.tomcat.jdbc.pool.DataSourceFactory”name =“jdbc / database”type =“javax.sql.DataSource”/ >

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