1 普通jdbc方式,基本代码如下
还可以直接把配置信息放到hibernate.cfg.xml中,代码如下
2 配置proxool连接池
第一种:spring中配置proxool非常简单,代码如下
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文件大致配置如下:
<?
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还可以这么配置,效果是一样的
< 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 >
<
property
name
="hibernateProperties"
>
< value >
hibernate.dialect=org.hibernate.dialect.SQLServerDialect
hibernate.show_sql=true
hiberante.format_sql=true
</ value >
</ property >
< 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代码如下
class ="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" >
< property name ="configLocations" >
< list >
< value > classpath:hibernate.cfg.xml </ value >
</ list >
</ property >
</ bean >
<?
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 >
<! 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
在根目录下,大致内容如下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 >
<
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文件了,代码如下
< 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 >
<
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方式写一下,否则会报错误,如下
< 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 >
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的配置如下:
class ="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" >
< property name ="configLocations" >
< list >
< value > classpath:hibernate.cfg.xml </ value >
</ list >
</ property >
</ bean >
<
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连接池的配置文件
< 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 >