JNDI + DBCP
tomcat下面的配置:
<Context docBase="${catalina.home}/server/webapps/LoginDemo" path="/LoginDemo"
crossContext="true" debug="5" reloadable="true">
<!-- Tomcat5.5的DBCP設定方式寫法與之前版本完全不同 -->
<Resource
name="jdbc/xsmp"
auth="Container"
factory="org.apache.commons.dbcp.BasicDataSourceFactory"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1521:ora9i"
username="test"
password="test"
maxIdle="10"
maxWait="1000"
maxActive="100"/>
webapps/WEB-INF/下的web.xml
<!-- 指定log4j設定檔位置 -->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>
<!-- 指定spring設定檔位置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/beans-config.xml</param-value>
</context-param>
<!-- 一定要在ContextLoaderListener設定之前加上Log4jConfigListener設定,如此一來ContextLoaderListener才可以正常運作 -->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 指定此項Filter可使Spring取回的DomainObject在JSP(View層)作完所有的事情後,才將Hiberante Session給Close -->
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 指定JNDI JDBC DataSource,如果使用了Spring注入,无须此项配置 -->
<resource-ref>
<description>JNDI JDBC DataSource</description>
<res-ref-name>java:comp/enc/jdbc/scott</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
中略
</web-app>
Spring 下面的配置:
使用Spring自带的DriverManagerDataSource
<bean id=”dataSource” class=”org.springframework.jdbc.datasource.DriverManagerDataSource”>
<!—使用SQL Server数据库—>
<property name=”driverClassName”>
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</property>
<property name=”url”>
<value>jdbc:Microsoft:sqlserver://localhost:1433/stdb</value>
</property>
<property name=”name”>
<value>admin</value>
</property>
<property name=”msg”>
<value>admin</value>
</property>
</bean>
使用Tomcat提供的JNDI(推荐)
<bean id="dataSource"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/scott</value>
</property>
</bean>
使用DBCP连接池
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName"
value="oracle.jdbc.driver.OracleDriver">
</property>
<property name="url"
value="jdbc:oracle:thin:@127.0.0.1:1521:zxin">
</property>
<property name="username" value="test"></property>
<property name="password" value="test"></property>
</bean>
Exception1:Cannot create JDBC driver of class "" for connect
解决:
1、<context>元素必须放在<host></host>之间.
2、自Tomcat5.5以后,<context>元素的<Resoucepram>元素取消,原参数元素都以Resouce的属性出现.
<Context path="" docBase="ROOT" debug="5" reloadable="true" crossContext="true">
<Resource name="jdbc/mysqltest" scope="Shareable" type="javax.sql.DataSource"
username="root" password="admin123" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/test" maxWait="3000" maxIdle="100" maxActive="10"/>
</Context>
Exception2:unable to get connection :no suitable driver
解决:
从eclipse中启动tomcat,发现启动时找不到org.apache.commons.dbcp.BasicDataSourceFactory,于是把Resouce元素中的factory="org.apache.commons.dbcp.BasicDataSourceFactory"删去,于是错误解决。