1 普通jdbc方式,基本代码如下
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:annotation-config/>
<context:component-scan base-package="com.huaxia.oaapp">
<context:include-filter type="aspectj" expression="com.huaxia.oaapp.service..*"/>
<context:include-filter type="aspectj" expression="com.huaxia.oaapp.entity..*"/>
<context:exclude-filter type="aspectj" expression="com.huaxia.oaapp.action..*"/>
</context:component-scan>
<context:property-placeholder location="classpath:jdbc.properties" />
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hiberante.format_sql">true</prop>
</props>
</property>
<property name="annotatedClasses">
<list>
<value>com.huaxia.oaapp.entity.User</value>
</list>
</property>
<property name="annotatedPackages">
<list>
<value>com.huaxia.oaapp.entity</value>
</list>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<aop:config>
<aop:pointcut id="baseServiceMethods"
expression="execution(* com.huaxia.oaapp.service.*.*(..)),execution(* com.huaxia.oaapp.aop.*.*(..))" />
<aop:advisor advice-ref="txAdvice"
pointcut-ref="baseServiceMethods" />
</aop:config>
<aop:aspectj-autoproxy />
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="select*" read-only="true" propagation="REQUIRED"/>
<tx:method name="find*" read-only="true" propagation="REQUIRED"/>
<tx:method name="save*" propagation="REQUIRED" isolation="REPEATABLE_READ"/>
<tx:method name="update*" propagation="REQUIRED" isolation="REPEATABLE_READ"/>
<tx:method name="add*" propagation="REQUIRED" isolation="REPEATABLE_READ" />
<tx:method name="delete*" propagation="REQUIRED" isolation="REPEATABLE_READ"/>
</tx:attributes>
</tx:advice>
</beans>
上面hibernateProperties还可以这么配置,效果是一样的
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.SQLServerDialect
hibernate.show_sql=true
hiberante.format_sql=true
</value>
</property>
还可以直接把配置信息放到hibernate.cfg.xml中,代码如下
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="configLocations">
<list>
<value>classpath:hibernate.cfg.xml</value>
</list>
</property>
</bean>
hibernate.cfg.xml代码如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory name="sessionFactory">
<property name="hibernate.connection.driver_class">
com.microsoft.sqlserver.jdbc.SQLServerDriver
</property>
<property name="hibernate.connection.password">123456</property>
<property name="hibernate.connection.url">
jdbc:sqlserver://localhost:1433; DatabaseName=oadb
</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.dialect">
org.hibernate.dialect.SQLServerDialect
</property>
<property name="hibernate.show_sql">true</property>
<property name="hiberante.format_sql">true</property>
<property name="hibernate.cache.provider_class">
org.hibernate.cache.EhCacheProvider
</property>
<property name="hibernate.connection.autocommit">false</property>
<mapping class="com.huaxia.oaapp.entity.User" />
</session-factory>
</hibernate-configuration>
2 配置proxool连接池
第一种:spring中配置proxool非常简单,代码如下
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.SQLServerDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hiberante.format_sql">true</prop>
<prop key="hibernate.proxool.pool_alias">myDataSource</prop>
<prop key="hibernate.proxool.xml">Proxool.xml</prop>
</props>
</property>
</bean>
其中
Proxool.xml在根目录下,大致内容如下
<something-else-entirely>
<proxool>
<alias>myDataSource</alias>
<driver-url>
jdbc:sqlserver://localhost:1433; DatabaseName=test
</driver-url>
<driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
<driver-properties>
<property name="user" value="sa"/>
<property name="password" value="123456"/>
</driver-properties>
<house-keeping-sleep-time>1000</house-keeping-sleep-time>
<maximum-connection-count>2</maximum-connection-count>
<house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
</proxool>
</something-else-entirely>
第二种:上面是嵌入了proxool.xml文件,其实也可以直接嵌入proxool属性,这样就不用再建立Proxool.xml文件了,代码如下
<bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource" destroy-method="close">
<property name="alias" value="test"></property>
<property name="delegateProperties">
<value>user=${jdbc.username},password=${jdbc.password}</value>
</property>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="driver" value="${jdbc.driverClassName}"/>
<property name="driverUrl" value="${jdbc.url}"/>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hiberante.format_sql">true</prop>
</props>
</property>
</bean>
此处说明一下:属性中的user和password不起任何作用,需要用delegateProperties方式写一下,否则会报错误,如下
org.springframework.transaction.CannotCreateTransactionException:
Could not open JDBC Connection for transaction; nested exception is
com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user
''. The user is not associated with a trusted SQL Server connection.
但是user和password还不能被去掉。
除了上面的用delegateProperties之外,还可以将用户名和密码直接写在url后面。
proxool属性的说明,在这里写的比较详细
http://www.cnblogs.com/wllyy189/archive/2008/10/15/1311560.html
第三种:在hibernate.cfg.xml中配置proxool连接池,代码如下
applicationContext.xml文件大致配置如下:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="configLocations">
<list>
<value>classpath:hibernate.cfg.xml</value>
</list>
</property>
</bean>
hibernate.cfg.xml的配置如下:
<hibernate-configuration>
<session-factory name="sessionFactory">
<property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
<property name="show_sql">true</property>
<property name="connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</property>
<property name="proxool.pool_alias">myDataSource</property>
<property name="proxool.xml">Proxool.xml</property>
<property name="connection.autocommit">=true </property>
<property name="jdbc.batch_size">20</property>
<property name="default_schema">dbo</property>
<mapping class="com.huaxia.oaapp.entity.User" />
<mapping class="com.huaxia.oaapp.entity.Document" />
<mapping class="com.huaxia.oaapp.entity.Certificate" />
</session-factory>
</hibernate-configuration>
其中
Proxool.xml就是要加入的proxool连接池的配置文件