spring管理durid事务,如何配置?

丰行 发布于 2015/01/08 13:25
阅读 7K+
收藏 1
有谁是用spring管理过durid的事务,初次接触durid数据库源,不知道怎么配置其事务管理,请高手帮忙看看,提点一下
加载中
0
JillLiu
JillLiu
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">  
        <!--  基本属性 url、user、password -->
        <property name="url" value="${connection.url}" />  
        <property name="username" value="${connection.username}" />  
        <property name="password" value="${connection.password}" />  
        <!-- 配置初始化大小、最小、最大 -->
        <property name="maxActive" value="${connection.maxPoolSize}" />  
        <property name="initialSize" value="${connection.initialPoolSize}" />  
        <property name="minIdle" value="1" />  
        <!-- 配置获取连接等待超时的时间 -->
        <property name="maxWait" value="60000" />  
        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="3000" />  
        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="300000" />  
        <property name="validationQuery" value="SELECT id FROM account" />  
        <property name="testWhileIdle" value="true" />  
        <property name="testOnBorrow" value="false" />  
        <property name="testOnReturn" value="false" />  
        <!-- mysql 不支持 poolPreparedStatements   -->
        <property name="poolPreparedStatements" value="true" />  
        <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />  
  
        <!-- 开启Druid的监控统计功能   -->
        <property name="filters" value="stat" />  
  
    </bean>  
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>


<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref bean="dataSource" />
</property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<aop:config>
<aop:pointcut expression="execution(* com.abc.service..*.*(..))" id="productServiceMethods" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="productServiceMethods" />
</aop:config>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="modify*" propagation="REQUIRED" />
<tx:method name="insert*" propagation="REQUIRED" />
<tx:method name="remove*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="find*" propagation="REQUIRED" read-only="true" />
<tx:method name="get*" propagation="REQUIRED" read-only="true" />
<tx:method name="*" />
</tx:attributes>
</tx:advice>
0
狮城蜗牛
狮城蜗牛

<!-- 配置事务管理器 -->

<bean id="transactionManager"

class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<property name="dataSource" ref="dataSource" />

</bean>


<!-- 注解方式配置事物 -->

<!-- <tx:annotation-driven transaction-manager="transactionManager" /> -->


<!-- 拦截器方式配置事物 -->

<tx:advice id="transactionAdvice" transaction-manager="transactionManager">

<tx:attributes>

<tx:method name="add*" propagation="REQUIRED" />

<tx:method name="append*" propagation="REQUIRED" />

<tx:method name="insert*" propagation="REQUIRED" />

<tx:method name="save*" propagation="REQUIRED" />

<tx:method name="update*" propagation="REQUIRED" />

<tx:method name="modify*" propagation="REQUIRED" />

<tx:method name="edit*" propagation="REQUIRED" />

<tx:method name="delete*" propagation="REQUIRED" />

<tx:method name="remove*" propagation="REQUIRED" />

<tx:method name="repair" propagation="REQUIRED" />

<tx:method name="delAndRepair" propagation="REQUIRED" />


<tx:method name="get*" propagation="SUPPORTS" />

<tx:method name="find*" propagation="SUPPORTS" />

<tx:method name="load*" propagation="SUPPORTS" />

<tx:method name="search*" propagation="SUPPORTS" />

<tx:method name="datagrid*" propagation="SUPPORTS" />


<tx:method name="*" propagation="SUPPORTS" />

</tx:attributes>

</tx:advice>

<aop:config>

<aop:pointcut id="transactionPointcut"

expression="execution(* com.domain.project.service..*Impl.*(..))" />

<aop:advisor pointcut-ref="transactionPointcut"

advice-ref="transactionAdvice" />

</aop:config>

0
丰行
丰行
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" 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}" />
 
<property name="filters" value="mergeStat" />
</bean>


<!-- 事务 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!--事务控制属性 -->
<tx:attributes>
<tx:method name="query*" read-only="true" />
<tx:method name="get*" read-only="true" />
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="create*" propagation="REQUIRED" />
<tx:method name="*" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="serviceMethod" expression="execution(* com.windy.member.service.impl.*Impl.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod" />
</aop:config>
<!-- 定义sessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath*:META-INF/mybatis/*-mapping.xml" />

</bean>

	

这么配置,事务还是不生效

日志里会有 

org.springframework.jdbc.datasource.DataSourceUtils: Fetching JDBC Connection from DataSource

org.mybatis.spring.transaction.SpringManagedTransaction: JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@19b7c62] will not be managed by Spring

0
zbbmaster
zbbmaster
druid 只是配置数据源用的   你上面的配置就对着了
0
丰行
丰行

但是事务不起作用。

这是我的目标方法

0
蔡熙伟
蔡熙伟

你在逗我们吧<aop:pointcut expression="execution(* com.abc.service..*.*(..))" 

你的切面貌似跟你的service包位置不行吧,所以这个方法没有在事务配置里面

丰行
丰行
我的这个切面怎么配了?
0
丰行
丰行

很感谢各位的解答,目前我的问题已经解决,事务不起作用的原因是在管理bean时,我采用了注解的方式,但是我在application-context.xml中和spring-servlet.xml中都配置了相同的扫描路径,导致事务失效。即:<context:component-scan base-package="com.windy.*" />

正确的应该是在  在application-context.xml文件中只配置关于dao和service等非action层的扫描路径  ,

<context:component-scan base-package="com.windy.*.service.*,com.windy.*.dao,com.windy.mybatis.*" />

在spring-servlet.xml文件中只配置关于action层的扫描路径 <context:component-scan base-package="com.windy.fxshop.*.action" />

其余上面的配置基本上都是正确的。还有切面的配置是

<aop:pointcut id="serviceMethod" expression="execution(* com.windy.*.service..*.*(..))" />

感谢上面几位对问题的解答。谢谢!

酷毙的程序员
谢谢题主解决问题后的总结
返回顶部
顶部