【问题标题】:Spring boot @Transactional春季启动@Transactional
【发布时间】:2015-09-18 20:19:30
【问题描述】:

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

我有这个配置

<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>

即使我删除了该配置,事务仍然有效。

编辑:

这是我的数据源配置

<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>

【问题讨论】:

  • 是什么让你有这种感觉?
  • 我已经编辑了问题。
  • 我在这里没有看到任何控制器代码。是什么让您认为当您禁用事务建议时,控制器会自动执行事务中的代码?

标签: spring spring-boot spring-data spring-transactions


【解决方案1】:

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

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

将此添加到您的 application.properties 将关闭它:

spring.jpa.open-in-view=false

【讨论】:

  • 我讨厌弹簧靴
猜你喜欢
  • 2020-02-02
  • 2015-01-22
  • 2017-09-25
  • 2015-12-11
  • 2015-10-06
  • 2013-11-12
  • 2017-09-11
  • 2015-04-18
  • 2017-06-24
相关资源
最近更新 更多