一、安装JDBC Driver
将数据库的驱动jar文件放至{Tomcat_install}\common\lib目录下
二、配置Connection Pool
1.配置全局的连接池,Tomcat里的任何Web应用都能使用该配置的连接池。
在Tomcat的server.xml文件中的GlobalNamingResources结点下面添加,连接池设置
<Resource
name="jdbc/MSSQLDS"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="sa"
password="sa"
driverClassName="net.sourceforge.jtds.jdbc.Driver"
url="jdbc:jtds:sqlserver://localhost:1433;DatabaseName=pubs" />
jtds驱动:
<Resource
name="jdbc/MSSQLDS"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="sa"
password="sa"
driverClassName="net.sourceforge.jtds.jdbc.Driver"
url="jdbc:jtds:sqlserver://localhost:1433;DatabaseName=pubs" />
注意:name为连接池的全局JNDI全称
下面两个xml配置文件,不进行设置仍然可以连接数据源!
在$TOMCAT_HOME$/conf目录下:
在context.xml里面设置全局访问的名称:
<ResourceLink
global="jdbc/MSSQLDS"
name="jdbc/MSSQLDS"
type="javax.sql.DataSource"/>
在web.xml里面设置全局参考数据源:
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/MSSQLDS</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
2.配置局部的连接池(推荐)
在$TOMCAT_HOME$/conf/Catalina/localhost/目录下新建一个xml文件,该xml文件要与你发布的Web应用目录名称相同,假如为webappname.xml,加入以下内容(配置Tomcat的外部虚拟目录也是在这里搞定的,哈!)
<?xml version='1.0' encoding='utf-8'?>
<Context path="/webappname" docBase="webappname" debug="0"
reloadable="true" crossContext="true">
<Resource
name="jdbc/MSSQLDS"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="sa"
password="sa"
driverClassName="net.sourceforge.jtds.jdbc.Driver"
url="jdbc:jtds:sqlserver://localhost:1433;DatabaseName=pubs"/>
<ResourceLink global="jdbc/MSSQLDS" name="jdbc/MSSQLDS"
type="javax.sql.DataSource"/>
</Context>
配置Tomcat\webapps\webappname\WEB-INF\web.xml,设置参考数据源
<resource-ref>
<description>my DB Connection</description>
<res-ref-name>jdbc/MSSQLDS</res-ref-name> the same as server.xml
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
配置\Tomcat\webapps\webappname\META-INF\context.xml,设置数据源连接 如下:
<?xml version='1.0' encoding='utf-8'?>
<Context path="/webappname" docBase="webappname" debug="5"
reloadable="true" crossContext="true">
<ResourceLink name="jdbc/MSSQLDS" global="jdbc/MSSQLDS"
type="javax.sql.DataSource"/>
</Context>
使用代码:
Context ctx= (Context) new InitialContext().lookup("java:comp/env");
DataSource ds = (DataSource)ctx.lookup("jdbc/MSSQLDS");
Connection conn = ds.getConnection();
conn.close();
别忘了对Connection对象调用close()方法,注意:这里不会关闭这个
Connection,而是将这个Connection放回数据库连接池。
------------------------------------------------------------------------------------
还可以用注入方式来调用连接池,即在Hibernate的配置文件hibernate.cfg.xml中调用,在JSP容器中配置好连接池以后,再在Hibernate的配置文件中调用系统的连接池设置,关键代码摘录如下:
<session-factory>
<property name="connection.datasource">java:comp/env/jdbc/MSSQLDS</property>
<property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
</session-factory>
PS:今天测试了下突然无法访问了,一直提示:
ERROR - Could not obtain initial context
javax.naming.NoInitialContextException: Cannot instantiate class:
在网上查了半天,换了好几种类都不行。
原来是MyEclipse在hibernate.cfg.xml中生成了:
<property name="connection.username">sa</property>
<property name="connection.password">sa</property>
<property name="jndi.url">jdbc:jtds:sqlserver://localhost:1433;DatabaseName=pubs</property>
<property name="jndi.class">net.sourceforge.jtds.jdbc.Driver</property>
这几个属性。去掉后一切正常,浪费了大半天的时间~~~