2016-03-25 7 views
2

@Profileに依存して呼び出される必要がある、1つの構成クラスに複数の@PostConstructアノテーション付きメソッドを持たせたいとします。しかし、私はこのアノテーションを付け一つの方法を持つことができます@PostConstructのjavadocのに応じ@Profileに依存して@PostConstructが呼び出されます

@Configuration 
public class SilentaConfiguration { 

    private static final Logger LOG = LoggerFactory.getLogger(SilentaConfiguration.class); 

    @Autowired 
    private Environment env; 

    @PostConstruct @Profile("test") 
    public void logImportantInfomationForTest() { 
     LOG.info("********** logImportantInfomationForTest"); 
    } 

    @PostConstruct @Profile("development") 
    public void logImportantInfomationForDevelopment() { 
     LOG.info("********** logImportantInfomationForDevelopment"); 
    } 
} 

:あなたは、コードは次のように切り取ら想像することができます。 SpringのJira https://jira.spring.io/browse/SPR-12433のオープンな改善があります。

この要件をどのように解決しましたか?私はいつもこの設定クラスを複数のクラスに分けることができますが、もっと良いアイデアや解決策があるかもしれません。

BTW。上記のコードは問題なく実行されますが、プロファイル設定に関係なく両方のメソッドが呼び出されます。

+1

ちょうどそれをやってください。 'Environment'は、プロファイルがアクティブであるかどうかを伝えます。したがって、単純なif文を作成します。 –

+0

またはクラスを2つに分割し、クラスレベルで注釈を付けた適切な@Profileを付けてください。 – Ruben

+0

この問題のメイトの投票:https://jira.spring.io/browse/SPR-12433 –

答えて

3

Environmentでプロフィールを確認することができます。@PostContruct

ifステートメントはトリックを行います。

よろしく、 ダニエル

3

私は@PostConstruct方法ごとに一つのクラスでそれを解決しました。 (これはKotlinですが、ほぼ1:1のJavaに翻訳されています)

@SpringBootApplication 
open class Backend { 

    @Configuration 
    @Profile("integration-test") 
    open class IntegrationTestPostConstruct { 

     @PostConstruct 
     fun postConstruct() { 
      // do stuff in integration tests 
     } 

    } 

    @Configuration 
    @Profile("test") 
    open class TestPostConstruct { 

     @PostConstruct 
     fun postConstruct() { 
      // do stuff in normal tests 
     } 

    } 

} 
+0

ありがとうございます! –

関連する問題