吐血总结!!!
第一步:
在tomcate自动生成的context.xml中添加如下代码:
<!-- 配置连接池信息 -->
<Resource name="emp" auth="Container" type="javax.sql.DataSource"
maxActive="10" maxIdle="3" maxWait="10000" username="root" password="cuichen975541045"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/rentcar"/>
第二步.
右键新项目,在java-ee tools中选择Update EAR Lirbries,会在WebContent中的WEB-INF下创建web.xml
在web.xml中输入如下代码:
<!-- 配置连接池信息 -->
<resource-ref>
<res-ref-name>emp</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
第三步.
在工具类DbUtil中的静态代码块static{}中写入如下代码:
static{
try {
//获取数据源的对象
Context ct = new InitialContext();
//获取数据源,java:comp/env/是固定的,后面的是自定义的名字
DataSource ds = (DataSource) ct.lookup("java:comp/env/emp");
//从数据源中获取一个连接即可
con = ds.getConnection();
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
PS:
java:comp/env/是固定的,后面的是自定义的名字,但必须和context.xml中设置的name名字一致!!!
如果配置不当,服务会崩溃,所有程序都无法运行!!!
自救方法:
删除Servers项目,关闭正在运行的服务并删除,重新创建Servers项目.重新进行上面的配置
1.直接删除
2.关闭并删除
JDBC和JNDI连接池和DBCP连接池:
JNDI连接池:(Java Naming and Directory Interface,Java命名和目录接口)
java获取tomcat服务资源的一种技术
JNDI不单单是用来连接数据库的,它是通过命名服务来找到数据库并返回数据库连接,当然JNDI还可以管理当前应用服务器上的其他资源,如网页,文件等,它用来连接数据库时和JDBC最大的区别就是它是通过应用服务器配置(如Tomcat)的配置文件context.xml来找数据库驱动的,其次就是JDBC连接能承受的同时请求数太低了,JNDI连接池连接与之相比会好很多。
DBCP连接池(javaSE连接池)
JDBC:(JAVA操作数据库连接)
通过java程序去找数据库驱动,然后来连接数据库。是java亲自去连数据库。
JDBC和JNDI总结:
- 1.请求资源的主动性不一样。JDBC是通过java程序主动去连接数据库获得连接,而JNDI是通过请求命名服务器返回数据库连接。
- 2.功能范围不一样。JDBC只能用来做一件事那就是连接数据库,而命名JNDI除了能和JDBC做同样的事以外还能管理当前应用服务器上的其他资源,如网页,文件等
- 3.请求连接数不同.JNDI连接池数高于JDBC