2017-10-03 5 views
2

ブール値に基づいて、そのメソッドに@Transactionalを適用する必要があるような構成可能なトランザクション動作を持つメソッドがあります。Spring @メソッドレベルの条件に基づく取引

@Transactional(if myBooleanVariable is true) 
public boolean executeQueries(List<String> queries) { 
    Iterator<String> it = queries.iterator(); 
} 

答えて

4

はい、注入豆は条件付きで可能ですか?しかし、多くの方法がありますが、プロファイルを使用することをお勧めします。

これにより、プロファイルに基づいて同じ時間に無名のBeanをさらに持つことができます。

@Bean 
@Profile("!dev") 
public class MyClass1 implements MyInterface {} 

@Bean 
@Profile("dev") 
public class MyClass2 implements MyInterface {} 

は、Java Configurationクラスで使用してプロファイルを設定することができます。

@Configuration 
public class MyWebApplicationInitializer implements WebApplicationInitializer { 

    @Override 
    public void onStartup(ServletContext servletContext) throws ServletException { 
     servletContext.setInitParameter("spring.profiles.active", "dev"); 
    } 
} 

その後注釈@Autowiredがアクティブプロファイルに基づいて注入するための適切な実施を見つけるでしょう。 Baeldung's websizeで詳細を読んでください。ここで私は例を取りました。


第二の方法は、条件付き実装インタフェースConditionの復帰方法に基づいて、豆を注入注釈@Conditionalを使用することです。ここで

@Bean 
@Conditional(MyClass1Condition.class) 
public class MyClass1 implements MyInterface {} 

@Bean 
@Conditional(MyClass2Condition.class) 
public class MyClass2 implements MyInterface {} 

は、実装スケルトンは次のようになります方法です:

public class MyClass1Condition implements Condition { 

    @Override 
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { 
     // perform your logic 
    } 
} 
+0

私は、メソッドレベルで何かを行うことができますか? – masSdev

+0

私は自分の答えを編集しました。 –

関連する問題