数据库开发四:JDBC数据库开发进阶三(JDBC工具类-JNDI配置)
程序员文章站
2022-05-28 11:35:01
...
当前软件版本tomcat8jdk8
tomcat的jndi之jdbc官方文档详解
tomcat的jndi之jdbc官方文档详解
0简介
Tomcat 为每个在其上运行的 Web 应用都提供了一个 JNDI 的 InitialContext 实现实例
Tomcat中的默认数据源支持基于Commons 项目中的DBCP 1.x连接池,也可以使用实现任何其他连接池
1安装您的JDBC驱动程序
驱动程序的JAR文件安装到$CATALINA_HOME/lib目录
2声明您的资源需求
修改Web应用程序部署描述符(/WEB-INF/web.xml)
<resource-ref>
<res-ref-name>jdbc/myc3p0</res-ref-name> <!--与context.xml下的Resources的name属性一致-->
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
3编写应用程序对此资源的使用代码
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource)
envCtx.lookup("jdbc/EmployeeDB");
Connection conn = ds.getConnection();
... use this connection to access the database ...
conn.close();
4配置Tomcat的资源工厂
请在Web应用程序的元素中添加一个这样的元素。
<Context ...>
...
<Resource name="jdbc/EmployeeDB"
auth="Container"
type="javax.sql.DataSource"
username="dbusername"
password="dbpassword"
driverClassName="org.hsql.jdbcDriver"
url="jdbc:HypersonicSQL:database"
maxActive="8"
maxIdle="4"/>
...
</Context>
请注意,资源名称(此处为jdbc/EmployeeDB)必须与Web应用程序部署描述符中指定的值匹配。
学习过程中的问题
学习过程中的问题
1注意不同连接池的参数名是不一致的检查清楚
2配置的未生效,需要配置在conf/context.xml内
我尝试过以下方式(均失败-有成功的希望留言给份代码观摩一下啊)
该Context单独创建为xml,配置在localhost目录下文件名为工程同名(对项目有效),
Context内容配置在server.xml的host结构下(对主机有效),
Context内容在server.xml配置文件GlobalNamingResources节点中(全局有效)
3为什么配置的javax.sql.DataSource,获取的连接实现是dbcp的,因为默认数据源支持基于Commons 项目中的DBCP 1.x连接池
4相关驱动jar未放置在tomcat的lib目录
配置参考
dbcp配置
<Resource name="jdbc/mysql"
auth="Container"
type="javax.sql.DataSource"
username="root"
password="mysql"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8"/>
<Resource name="mydbcp"
type="org.apache.commons.dbcp2.BasicDataSource"
factory="org.apache.naming.factory.BeanFactory"
username="root"
password="mysql"
driverClassName="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8"
maxIdleTime="3"
maxWait="5000"
maxActive="5"
initialSize="3"/>
c3p0配置
<Resource name="jdbc/myc3p0"
auth="Container"
user="root"
password="mysql"
type="com.mchange.v2.c3p0.ComboPooledDataSource"
factory="org.apache.naming.factory.BeanFactory"
driverClass="com.mysql.cj.jdbc.Driver"
jdbcUrl="jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8"/>