欢迎光临散文网 会员登陆 & 注册

JNDI数据库连接池

2021-12-06 23:23 作者:CSDN首席喷子  | 我要投稿

PHP事实上是没有真正意义上的连接池的。在使用传统的PHP API时,Quercus也不例外。为了利用JDBC连接池,有如下选择:

(1)使用DBCP等Java连接池,但是这样必须在PHP代码中使用import语句。

(2)编写一个Java DAO,然后暴露给Quercus,但这样调试、修改都不方便。

(3)使用JNDI配合PDO。

第三种方法和Native PHP的PDO行为最为接近,且不需要在代码中显式配置。将来如果换用Native PHP,仅更改连接字符串即可。


首先需要在Tomcat的context.xml中添加如下配置:

<Context>

...

<Resource name="jndischool" auth="Container" type="javax.sql.DataSource"

maxActive="100" minIdle="10" maxWait="10000" initialSize="10"

username="dba" password="123456" driverClassName="org.postgresql.Driver"

url="jdbc:postgresql://127.0.0.1:5432/school" factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"

validationQuery="SELECT 1" validationInterval="30000"

timeBetweenEvictionRunsMillis="30000" removeAbandonedTimeout="60"

removeAbandoned="true" logAbandoned="true" minEvictableIdleTimeMillis="30000"

jmxEnabled="true" jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer" />

...

</Context>


然后在应用的web.xml下添加配置如下:

<web-app>

...

<resource-ref>

<description>Datasource of school.</description>

<res-ref-name>jndischool</res-ref-name>

<res-type>javax.sql.DataSource</res-type>

<res-auth>Container</res-auth>

</resource-ref>


此时即可在Quercus中使用这个数据源,Tomcat的JNDI数据源格式为java:comp/env/jndiname。

$connectionString = "java:comp/env/jndischool";

$conn = new PDO($connectionString);

...




JNDI数据库连接池的评论 (共 条)

分享到微博请遵守国家法律