2015-12-15 18 views
6

我想用用方面在春季啓動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是nullinvokeWithinTransaction正在對TransactionAspectSupport運行 - 但bean創建過程中它被設置(從我已經看到在調試時beanFactory是因爲它是不是能夠得到TransactionManagernullTransactionAspectSupport不會啓動一個事務)。我猜想TransactionAspectSupport的非bean實例正在創建,這可能是我的問題的原因(但後來又如何以及爲什麼?)?

更新:

從我注意到@TransactionalAnnotationTransactionAspect在一個案件處理,而是由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> 
+0

您不需要設置當前會話上下文,因爲這已經在春季完成了。你也使用普通的休眠或JPA?你還可以發佈你如何啓動應用程序。 –

+0

嗯......我只是簡單地運行帶有'SpringApplication.run(Application.class,args);'主要方法和註釋中提到的主類的問題。沒有什麼奇特的,因爲我試圖保持我的修改到最低要求。編輯:另外,我運行它與兩個-javaagent,如問題所述設置。 – korda

回答

1

確定。我是一個白癡,誰沒有看自動進口是幹什麼的。

我在一個地方使用了org.springframework.transaction.annotation.Transactional,在另一個地方使用了javax.transaction.Transactional

在將所有內容更改爲spring後,@Transactional開始工作。

相關問題