2015-12-15 7 views
6

私はスプリングブートアプリケーションの側面を使ってトランザクションを使用したいと思っていますが、これまでほとんどの場合、より一般的な設定に役立っていました...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 

することですinvokeWithinTransactionTransactionAspectSupport上で実行されているnull - しかし、それは豆の作成時に設定されています(と、TransactionManagerを得ることができないので、beanFactorynullTransactionAspectSupportあるとき私は、デバッグで見てきたものから、トランザクションを開始しません)。私は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> 
+0

現在のセッションコンテキストを設定する必要はありません。これはすでにSpringで行われているためです。また、単純な休止状態またはJPAを使用していますか?また、アプリケーションの起動方法を投稿することもできます。 –

+0

まあ...私は主なメソッドと注釈で言及されている 'SpringApplication.run(Application.class、args);'を持つメインクラスを実行するだけです。必要最低限​​の変更を維持しようとするので、何も気にしない。編集:また、私は2つのジャガラント、問題の説明に設定とそれを実行します。 – korda

答えて

1

:それが重要な場合

ああ、ここでは、私の依存関係です。私は、自動入力が何をしているのか見ていないばかだ。

私はorg.springframework.transaction.annotation.Transactionalを1か所で使用し、javax.transaction.Transactionalを別の場所で使用しました。

春にすべてを変えた後、@トランザクションが提供され始めました。

関連する問題