打赏

was not registered for synchronization because synchronization is not active

报SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7862f70e] was not registered for synchronization because synchronization is not active,网上各种查找原因没找到,于是深入到org.apache.ibatis.session.defaults.DefaultSqlSession类与org.mybatis.spring.SqlSessionUtils类查看源码(mybatis-3.2.8.jar),TransactionSynchronizationManager.isSynchronizationActive()返回false时报出的这个异常。

翻译过来同步未激活,之前都好好的,为什么今天不能激活呢?是不是数据库连接没成功所以没激活?

但若连接数据库不成功不是报连接失败吗?今天没报,怀疑着查看了一下数据库配置,果然之前连的一个局域网今天没开启。

修改成正确的数据库之后错误消失。可是仍不明白为啥没报数据库连接失败

20180530:昨天在数据库连接正常的情况下仍然报这个异常,发现未将事物配置切面

    <!-- 面向切面配置 -->
    <aop:config>
        <!-- 定义切入点 -->
        <aop:pointcut expression="execution(* service..*.*(..) )" id="pointCut"/>
        <!-- pointcut和advice的配置器。是将advice注入程序中pointcut位置的代码 -->
        <aop:advisor advice-ref="txAdvice" pointcut-ref="pointCut"/>
    </aop:config>

其中txAdice定义了对事物的支持

    <!-- 定义哪些方法需要事物支持 -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <!-- 传播行为 -->
            <tx:method name="save*" propagation="REQUIRED" />
            <tx:method name="insert*" propagation="REQUIRED" />
            <tx:method name="add*" propagation="REQUIRED" />
            <tx:method name="create*" propagation="REQUIRED" />
            <tx:method name="delete*" propagation="REQUIRED" />
            <tx:method name="update*" propagation="REQUIRED" />
            <tx:method name="find*" propagation="SUPPORTS" read-only="true" />
            <tx:method name="select*" propagation="SUPPORTS" read-only="true" />
            <tx:method name="get*" propagation="SUPPORTS" read-only="true" />
        </tx:attributes>
    </tx:advice>

 

posted @ 2018-04-08 11:04  每天都要学一点  阅读(52114)  评论(1编辑  收藏  举报