我想用用方面在春季啓動aplication完成交易,但到目前爲止,我主要是發現更多的「普通」的設置幫助...如何配置spring引導應用程序以使用aspectj事務?
我已經成功地設置了這麼遠?
我已經有了主類中的這些註釋:
@SpringBootApplication
@EnableTransactionManagement(mode=AdviceMode.ASPECTJ)
@EnableLoadTimeWeaving(aspectjWeaving=AspectJWeaving.ENABLED)
而這在我的屬性:與Java代理彈簧儀器和AspectJ的織工和
spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext
我開始申請我可以在堆棧跟蹤中看到使用@Transactional
的方面,所以至少這是可行的。
此外,什麼是真奇怪,問題開始後,才加入第二實體 - 第一個工作沒有問題,但現在我有這個錯誤:
org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread
從我所注意到的beanfactory是null
當invokeWithinTransaction
正在對TransactionAspectSupport
運行 - 但bean創建過程中它被設置(從我已經看到在調試時beanFactory
是因爲它是不是能夠得到TransactionManager
null
TransactionAspectSupport
不會啓動一個事務)。我猜想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>
您不需要設置當前會話上下文,因爲這已經在春季完成了。你也使用普通的休眠或JPA?你還可以發佈你如何啓動應用程序。 –
嗯......我只是簡單地運行帶有'SpringApplication.run(Application.class,args);'主要方法和註釋中提到的主類的問題。沒有什麼奇特的,因爲我試圖保持我的修改到最低要求。編輯:另外,我運行它與兩個-javaagent,如問題所述設置。 – korda