一、問題現(xiàn)象
在使用Hibernate的項目中,在一個定時任務(wù)中,執(zhí)行某段代碼,滿足條件后,更新表數(shù)據(jù)。
程序在執(zhí)行到更新表數(shù)據(jù)的時候,報錯如下:
Could not obtain transaction-synchronized Session for current thread
二、解決方案
在 spring-config.xml 配置事務(wù) 切入點 和 切入方法
<!-- 配置事務(wù)管理 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 指定使用cglib -->
<aop:aspectj-autoproxy proxy-target-class="true" />
<!-- 配置事務(wù)的傳播特性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="dispose*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
<!-- 配置事務(wù)的切入點 -->
<aop:config>
<aop:pointcut id="targetMethodSchedule" expression="execution(* com.miracle.luna.mock.schedule.*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="targetMethodSchedule" />
</aop:config>
[說明]
1、<tx:method name=“dispose*” propagation=“REQUIRED” /> 表示對dispose 開頭的方法有效;
2、<aop:pointcut id=“targetMethodSchedule” expression=“execution(* com.miracle.luna.mock.schedule..(…))” /> 可以模糊匹配 schedule 目錄下的多個服務(wù)層。注意此處,不管schedule目錄下有沒有細分 service 和 impl層,必須是 schedule..(…)) ,否則會報如下錯誤。文章來源:http://www.zghlxwxcb.cn/news/detail-477513.html
Caused by: java.lang.IllegalArgumentException: warning no match for this type name: com.miracle.luna.mock.schedule [Xlint:invalidAbsoluteTypeName]
at org.aspectj.weaver.tools.PointcutParser.parsePointcutExpression(PointcutParser.java:315)
at org.springframework.aop.aspectj.AspectJExpressionPointcut.buildPointcutExpression(AspectJExpressionPointcut.java:217)
at org.springframework.aop.aspectj.AspectJExpressionPointcut.checkReadyToMatch(AspectJExpressionPointcut.java:190)
at org.springframework.aop.aspectj.AspectJExpressionPointcut.getClassFilter(AspectJExpressionPointcut.java:169)
at org.springframework.aop.support.AopUtils.canApply(AopUtils.java:220)
at org.springframework.aop.support.AopUtils.canApply(AopUtils.java:279)
at org.springframework.aop.support.AopUtils.findAdvisorsThatCanApply(AopUtils.java:311)
at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findAdvisorsThatCanApply(AbstractAdvisorAutoProxyCreator.java:119)
at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findEligibleAdvisors(AbstractAdvisorAutoProxyCreator.java:89)
at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.getAdvicesAndAdvisorsForBean(AbstractAdvisorAutoProxyCreator.java:70)
at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:346)
at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:298)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:423)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1633)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
... 149 more
文章來源地址http://www.zghlxwxcb.cn/news/detail-477513.html
到了這里,關(guān)于解決問題 Could not obtain transaction-synchronized Session for current thread的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!