1

2 つのプロファイル「デモ」と「ローカル」の両方がアクティブな場合にのみ作成する必要がある Bean があります。Java ベースの Spring 構成でこれを達成する最良の方法は何ですか。

これまでに思いついたのは、次のような Bean を作成することです。

@Profile("demo")
@Bean("isDemoActive")
public Boolean isDemoActive(){ return true;}

そして、Bean 作成メソッドに注入されたものを取得し、それらの Bean に対して if 条件を実行します。

この種のことを行うためのより良い/より簡単な方法はありますか?

4

2 に答える 2

4

上記の私のコメントによると、ここに私の提案があります:

import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;

public class DoubleProfilesCondition implements Condition {
    public boolean matches(ConditionContext context,AnnotatedTypeMetadata metadata) {

        String[] activeProfiles = context.getEnvironment().getActiveProfiles();

        int counter = 0;
        for (int i = 0; i < activeProfiles.length; i++) {
            String profile = activeProfiles[i];
            if (profile.equals("profile1") || profile.equals("profile2")) {
                counter++;
            }
        }

        if (counter == 2)
            return true;
        return false;
   }
}

そして、どの Bean が作成されるかを指示するクラス:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;

@Configuration
@Conditional(DoubleProfilesCondition.class)
public class MyConfig {

    public @Bean
    ExampleService service() {
        ExampleService service = new ExampleService();
        service.setMessage("hello, success!");
        return service;
    }
}
于 2014-06-19T11:03:23.363 に答える