hibernate – 如何配置spring boot应用程序以使用aspectj事务?

我想在 spring-boot应用程序中使用各方面完成的事务,但到目前为止,我主要找到更多“普通”设置的帮助……

到目前为止我成功建立了什么?

我在主要课上有这些注释:

@SpringBootApplication
@EnableTransactionManagement(mode=AdviceMode.ASPECTJ)
@EnableLoadTimeWeaving(aspectjWeaving=AspectJWeaving.ENABLED)

这在我的属性中:

spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext

我正在使用java代理spring-instrument和aspectj-weaver启动应用程序,我可以在stacktrace中看到我使用@Transactional的方面,所以至少这是有效的.

另外,真正奇怪的是,问题在我添加第二个实体后开始 – 第一个工作没有问题,但现在我遇到了这个错误:

org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread

从我注意到,当在TransactionAspectSupport上运行invokeWithinTransaction时,beanFactory为null – 但它是在bean创建期间设置的(并且在beanFactory为null时我在调试中看到的内容)TransactionAspectSupport不会启动事务,因为它不是能够获得TransactionManager).我想在某些时候正在创建TransactionAspectSupport的非bean实例,这可能是我的问题的原因(但那么如何以及为什么?)?

更新:

从我注意到@Transactional在一种情况下由AnnotationTransactionAspect处理,但在另一种情况下由JtaAnnotationTransactionAspect处理.

我缺少什么想法?也许我应该设置一些神奇的属性?

哦,这是我的依赖,如果这很重要:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-freemarker</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
    </dependency>
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>18.0</version>
    </dependency>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.4</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-instrument</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>1.8.7</version>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.8.7</version>
    </dependency>
</dependencies>
好.我是个白痴,不看自动进口是做什么的.

我在一个地方使用过org.springframework.transaction.annotation.Transactional而在另一个地方使用了javax.transaction.Transactional.

将所有内容更改为spring后提供@Transactional它开始工作.

相关文章
相关标签/搜索