私はスプリングブートアプリケーションの側面を使ってトランザクションを使用したいと思っていますが、これまでほとんどの場合、より一般的な設定に役立っていました...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
を使用したstacktraceの側面を見ることができます。少なくともこれが機能しています。
また、本当に奇妙である何、問題は、私は第二のエンティティを追加した後にのみ開始 - 最初のものは問題なく働いていたが、今、私はこのエラーを抱えている:私が気づいた何たBeanFactoryから
org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread
することですinvokeWithinTransaction
がTransactionAspectSupport
上で実行されているnull
- しかし、それは豆の作成時に設定されています(と、TransactionManager
を得ることができないので、beanFactory
がnull
TransactionAspectSupport
あるとき私は、デバッグで見てきたものから、トランザクションを開始しません)。私はTransactionAspectSupport
の非豆のインスタンスがある時点で作成されていると私の問題の理由かもしれないと思う(しかし、どのように、なぜ?)?
更新:
私は@Transactional
は、1つのケースでは、しかし、別の中JtaAnnotationTransactionAspect
によってAnnotationTransactionAspect
によって処理されます気づいてきたものから。
アイデアは何ですか?おそらく私が設定すべきいくつかの魔法の特性? [OK]を
<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>
現在のセッションコンテキストを設定する必要はありません。これはすでにSpringで行われているためです。また、単純な休止状態またはJPAを使用していますか?また、アプリケーションの起動方法を投稿することもできます。 –
まあ...私は主なメソッドと注釈で言及されている 'SpringApplication.run(Application.class、args);'を持つメインクラスを実行するだけです。必要最低限の変更を維持しようとするので、何も気にしない。編集:また、私は2つのジャガラント、問題の説明に設定とそれを実行します。 – korda