kor*_*rda 10 hibernate transactions aspectj spring-boot
我想在spring-boot应用程序中使用各方面完成的事务,但到目前为止,我主要找到更多"普通"设置的帮助......
到目前为止我设法建立了什么?
我在主要课上有这些注释:
@SpringBootApplication
@EnableTransactionManagement(mode=AdviceMode.ASPECTJ)
@EnableLoadTimeWeaving(aspectjWeaving=AspectJWeaving.ENABLED)
Run Code Online (Sandbox Code Playgroud)
这在我的属性中:
spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext
Run Code Online (Sandbox Code Playgroud)
我正在使用java代理spring-instrument和aspectj-weaver开始应用程序,我可以在stacktrace中看到我使用过的方面,@Transactional所以至少这是有用的.
另外,真正奇怪的是,问题在我添加第二个实体后开始 - 第一个工作没有问题,但现在我遇到了这个错误:
org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread
Run Code Online (Sandbox Code Playgroud)
从我所注意到的beanfactory是null当invokeWithinTransaction正在运行TransactionAspectSupport-但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>
Run Code Online (Sandbox Code Playgroud)
好的。我是个白痴,没有看自动导入在做什么。
org.springframework.transaction.annotation.Transactional我在一个地方和javax.transaction.Transactional另一个地方都用过。
将所有内容更改为 spring 提供的 @Transactional 后,它开始工作。
| 归档时间: |
|
| 查看次数: |
3652 次 |
| 最近记录: |