首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring boot @Transactional

Spring boot @Transactional
EN

Stack Overflow用户
提问于 2015-07-01 23:15:55
回答 1查看 2.4K关注 0票数 3

spring boot会在控制器层自动添加@Transactional注释吗?我尝试将@Transactional放在服务层,但似乎控制器层覆盖了注释。

我有这个配置

代码语言:javascript
复制
<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="find*" read-only="true" isolation="READ_COMMITTED"
            propagation="NOT_SUPPORTED" />
        <tx:method name="load*" read-only="true" isolation="READ_COMMITTED"
            propagation="NOT_SUPPORTED" />
        <tx:method name="get*" read-only="true" isolation="READ_COMMITTED"
            propagation="NOT_SUPPORTED" />
        <tx:method name="*" timeout="30" propagation="REQUIRED" />
    </tx:attributes>
</tx:advice>

<aop:config proxy-target-class="true">
    <aop:advisor advice-ref="txAdvice"
        pointcut="execution(* *..service.*Service*.*(..))" order="1" />
</aop:config>

而且,即使我删除了该配置,事务仍然可以工作。

编辑:

下面是我的数据源配置

代码语言:javascript
复制
<bean id="msDataSource" class="org.apache.tomcat.jdbc.pool.DataSource"
    destroy-method="close">
    <property name="driverClassName" value="${jdbc.main.driverClass}" />
    <property name="url" value="${jdbc.main.url}" />
    <property name="username" value="${jdbc.main.username}" />
    <property name="password" value="${jdbc.main.password}" />

</bean>


<bean id="msPUM"
    class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
    <property name="defaultDataSource" ref="msDataSource" />
</bean>

<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceUnitManager" ref="msPUM" />
    <!--<property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
        <property name="database" value="ORACLE"/> <property name="generateDdl" value="false"/> 
        <property name="showSql" value="true" /> </bean> </property> -->
</bean>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
EN

回答 1

Stack Overflow用户

发布于 2015-07-11 04:23:43

我只是在猜测,但我假设你在这里试图问的是为什么你能够在你的控制器中加载你的实体上的惰性集合?

Spring Boot将以下应用程序属性spring.jpa.open-in-view配置为默认值"true“。基本上,这将为整个请求打开一个会话,允许您在@Transactional之外执行上述操作。

将此代码添加到您的application.properties会将其关闭:

spring.jpa.open-in-view=false

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31165326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档