Hibernate4.1配置数据库连接池 org.hibernate.service.jndi.JndiException:Unable to lookup JNDI name java:comp/env...
数据库连接池技术的基本原理:
由Web容器(如Tomcat)提供数据源对象,在程序中使用 JNDI 技术获得该对象。一般如果自己创建连接的话,用下面的代码获取数据源对象:
Context context = new InitialContext();
DataSource dataSource = (DataSource)context.lookup("java://comp/env/jdbc/mydb");
Connection conn = dataSource.getConnection();
这里mydb是要连接到的数据库名,一定要注意 java: 后面有双斜线,否则就会报出异常:
org.hibernate.service.jndi.JndiException:Unable to lookup JNDI name java:comp/env...
但其实如果使用Hibernate框架的话,就不用这样费事了。按照下面的步骤一步步来就OK了:
1. 找到tomcat安装目录,以 D:\Program Files\Apache Software Foundation\Tomcat 6.0\conf 为例,在 context.xml 文件中的<Context>标签下添加代码:
1 <!--Resource 设置数据库连接池的核心--> 2 <!--属性 name 数据源的名字 属性 auth 表示验证方式 type 资源的类型 --> 3 <Resource name="jdbc/struts" auth="Container" type="javax.sql.DataSource" 4 maxActive="100" maxIdle="30" maxWait="10000" 5 username="root" password="****" 6 driverClassName="com.mysql.jdbc.Driver" 7 url="jdbc:mysql://192.168.1.173:3306/struts"/>
我的数据库名称为struts,所以这里配置的名字也是struts。
2. 将JDBC的驱动jar包放到 tomcat 的 lib 文件夹下,如 D:\Program Files\Apache Software Foundation\Tomcat 6.0\lib。
3. 在项目的 web.xml 文件中添加如下代码:
1 <resource-ref> 2 <description>struts datasource</description> 3 <res-ref-name>jdbc/struts</res-ref-name> 4 <res-type>javax.sql.DataSource</res-type> 5 <res-auth>Container</res-auth> 6 </resource-ref>
这里的各配置要和在 context.xml 文件中的配置一致。
4. 配置 hibernate.cfg.xml。可以使用视图直接选择 Use JNDI DataSource 选项,然后在DataSource栏中填入 "java://comp/env/jdbc/struts"。生成的代码:
1 <?xml version='1.0' encoding='UTF-8'?> 2 <!DOCTYPE hibernate-configuration PUBLIC 3 "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 4 "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 5 <!-- Generated by MyEclipse Hibernate Tools. --> 6 <hibernate-configuration> 7 8 <session-factory> 9 <property name="connection.datasource"> 10 java://comp/env/jdbc/struts 11 </property> 12 <property name="dialect"> 13 org.hibernate.dialect.MySQLDialect 14 </property> 15 16 <property name="show_sql">true</property> 17 18 <mapping resource="com/entity/Users.hbm.xml" /> 19 </session-factory> 20 21 </hibernate-configuration>
5. 使用MyEclipse插件添加的Hibernate框架的话,会生成一个 HibernateSessionFactory 类,直接调用这个类的静态函数 getSession() 就能获取到 Session 的一个实例。接下来的操作就跟没使用连接池是一样的了。