JNDI和在tomcat中配置DBCP连接池

JNDI技术简介

JNDI(Java Naming and Directory Interface),Java命名和目录接口,它对应于J2SE中的javax.naming包,

这套API的主要作用在于:

  它可以把DataSource对象放在一个Tomcat容器中(JNDI容器),并为容器中的DataSource对象取一个名称,以后程序想获得DataSource对象,只需通过名称检索即可。

  其核心API为Context,它代表JNDI容器,其lookup方法为检索容器中对应名称的对象。

JNDI和在tomcat中配置DBCP连接池

配置Tomcat数据源-Tomcat配置DBCP池,默认不配置,就没有DBCP连接池

  ——apache-tomcat-7.0.32\conf\context.xml

  

JNDI和在tomcat中配置DBCP连接池

<?xml version='1.0' encoding='utf-8'?>

<Context>

<WatchedResource>WEB-INF/web.xml</WatchedResource>

<Resource
name = "tomcatDS"
auth = "Container"
username = "root"
password = "123456"
driverClassName = "com.mysql.jdbc.Driver"
url = "jdbc:mysql://localhost:3306/mydb2"
maxActive = "8"
minIdle = "4"
/>

</Context>

JNDI和在tomcat中配置DBCP连接池

1

2

3

Context initCtx = new InitialContext();

Context envCtx = (Context) initCtx.lookup("java:comp/env");

dataSource = (DataSource)envCtx.lookup(" tomcatDS ");

特别提醒:此种配置下,驱动jar文件需放置在tomcat的lib下

 总结:

a)JNDI是Java命名和目录接口,不同的Web服务器有着不同的实现
b)不同进程之间,可不同机器之间访问,叫远程访问
c)JNDI和JDBC一样,都属于JavaEE规则之一
d)基于tomcat如何配置DBCP连接池
  >>修改tomcat/conf/context.xml文件
  >>加入DB相关的jar包到tomcat/lib目录下
  >>重新启动tomcat服务器
e)访问tomcat服务器的JNDI代码如下,是固定的:

   Context tomcatContext = (Context) context.lookup("java:comp/env"); 

 

配置成功后,控制台运行时会出现如下代码:

1

2

3

4

5

6

四月 072013 8:29:13 下午 com.mchange.v2.log.MLog <clinit>

信息: MLog clients using java 1.4+ standard logging.

四月 072013 8:29:13 下午 com.mchange.v2.c3p0.C3P0Registry banner

信息: Initializing c3p0-0.9.1.2 [built 21-May-2007 15:04:56; debug? true; trace: 10]

四月 072013 8:29:13 下午 com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource getPoolManager

信息: Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, dataSourceName -> ynkkf88t1re52u9jiycic|48ff68, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> com.mysql.jdbc.Driver, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> ynkkf88t1re52u9jiycic|48ff68, idleConnectionTestPeriod -> 0, initialPoolSize -> 3, jdbcUrl -> jdbc:mysql://127.0.0.1:3306/mydb2, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 0, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 15, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 3, numHelperThreads -> 3, numThreadsAwaitingCheckoutDefaultUser -> 0, preferredTestQuery -> null, properties -> {user=******, password=******}, propertyCycle -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false ]