spring配置ibatis的jdbc方式和proxool连接池方式,以sqlserver2005为例,驱动为sqljdbc.jar
jdbc.properties中内容如下
需要加入proxool.jar
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
3 c3p0方式
需要加入c3p0.jar
http://www.blogjava.net/Alpha/archive/2009/03/29/262789.html
jdbc.properties中内容如下
jdbc
.
driverClassName
=
com
.
microsoft
.
sqlserver
.
jdbc
.
SQLServerDriver
jdbc . url = jdbc \: sqlserver \:// localhost \: 1433 ; DatabaseName \= IBATIS
jdbc . username = sa
jdbc . password = 123456
1 直接用jdbc方式(这种方式适合开发阶段,发布的程序强烈要求用连接池),代码如下,这个都知道,没什么可说的
jdbc . url = jdbc \: sqlserver \:// localhost \: 1433 ; DatabaseName \= IBATIS
jdbc . username = sa
jdbc . password = 123456
<?
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:component-scan base-package ="com.mydomain" >
< context:include-filter type ="aspectj" expression ="com.mydomain.spring..*" />
</ 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 ="sqlMapClient" class ="org.springframework.orm.ibatis.SqlMapClientFactoryBean" >
< property name ="configLocation" value ="classpath:com/mydomain/data/SqlMapConfig.xml" />
< property name ="dataSource" ref ="dataSource" />
</ bean >
<!-- 事务管理直接用的DataSourceTransactionManager -->
< bean id ="txManager" class ="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
< property name ="dataSource" ref ="dataSource" />
</ bean >
< aop:config >
< aop:pointcut id ="baseServiceMethods"
expression ="execution(* com.mydomain.spring.*.*(..))" />
< aop:advisor advice-ref ="txAdvice"
pointcut-ref ="baseServiceMethods" />
</ aop:config >
< aop:aspectj-autoproxy />
< tx:advice id ="txAdvice" transaction-manager ="txManager" >
< 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 >
SqlMapConfig.xml内容如下:
< 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:component-scan base-package ="com.mydomain" >
< context:include-filter type ="aspectj" expression ="com.mydomain.spring..*" />
</ 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 ="sqlMapClient" class ="org.springframework.orm.ibatis.SqlMapClientFactoryBean" >
< property name ="configLocation" value ="classpath:com/mydomain/data/SqlMapConfig.xml" />
< property name ="dataSource" ref ="dataSource" />
</ bean >
<!-- 事务管理直接用的DataSourceTransactionManager -->
< bean id ="txManager" class ="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
< property name ="dataSource" ref ="dataSource" />
</ bean >
< aop:config >
< aop:pointcut id ="baseServiceMethods"
expression ="execution(* com.mydomain.spring.*.*(..))" />
< aop:advisor advice-ref ="txAdvice"
pointcut-ref ="baseServiceMethods" />
</ aop:config >
< aop:aspectj-autoproxy />
< tx:advice id ="txAdvice" transaction-manager ="txManager" >
< 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 >
<!
DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-config-2.dtd" >
< sqlMapConfig >
< sqlMap resource ="com/mydomain/data/Account.xml" />
</ sqlMapConfig >
2 用proxool连接池方式,只有datasource发生变化,其他的无变动
"http://www.ibatis.com/dtd/sql-map-config-2.dtd" >
< sqlMapConfig >
< sqlMap resource ="com/mydomain/data/Account.xml" />
</ sqlMapConfig >
需要加入proxool.jar
<
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}" />
< property name ="houseKeepingTestSql" value ="select CURRENT_DATE" ></ property >
<!--此处继续增加proxool属性,详细见proxool文档-->
</ 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}" />
< property name ="houseKeepingTestSql" value ="select CURRENT_DATE" ></ property >
<!--此处继续增加proxool属性,详细见proxool文档-->
</ 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
3 c3p0方式
需要加入c3p0.jar
<
bean
id
="dataSource"
class
="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method
="close"
>
< property name ="driverClass" >
< value > ${jdbc.driverClassName} </ value >
</ property >
< property name ="jdbcUrl" >
< value > ${jdbc.url} </ value >
</ property >
< property name ="user" >
< value > ${jdbc.username} </ value >
</ property >
< property name ="password" >
< value > ${jdbc.password} </ value >
</ property >
<!--此处继续增加c3p0 属性-->
</ bean >
关于c3p0的属性说明请参见:
< property name ="driverClass" >
< value > ${jdbc.driverClassName} </ value >
</ property >
< property name ="jdbcUrl" >
< value > ${jdbc.url} </ value >
</ property >
< property name ="user" >
< value > ${jdbc.username} </ value >
</ property >
< property name ="password" >
< value > ${jdbc.password} </ value >
</ property >
<!--此处继续增加c3p0 属性-->
</ bean >
http://www.blogjava.net/Alpha/archive/2009/03/29/262789.html