2016-06-15 13 views
1

私は、複数のHTTPサービスを呼び出す理由があるSpringブートアプリケーションを構築しています。さまざまなオプションを使用してクライアントを設定できるようにしたいと考えています。ソケットのタイムアウトに加えて、デフォルトを持っています。デフォルトと複数のオーバーライドを持つSpring構成Bean

理想的には、私はこのようなプロパティを指定することができます。

client.default.socket-timeout=500ms 
client.slow-service.socket-timeout=1000ms # it's a bit slower 
client.fast-service.socket-timeout=100ms 

のような単純なクラスを行います。その後、

class ClientConfiguration { 
    @Value("${client.<client-name>.socket-timeout:${client.default.socket-timeout:30}}") 
    int socketTimeout; 
} 

と注入することができる:通常

@Inject 
public MyService(@Named("slow-service") ClientConfiguration slowServiceConfig) { ... } 

私は設定します私の設定は@Value経由ですが、鍵をパラメータ化する方法はないようですses。特にBeanの名前に基づいていません。私は、キー名を作成してまたは他の手動アプローチからそれを取得するために、大量のボイラープレートを書くのは避けたいです。

このユースケースに対処するには、Spring(4.3.0)またはSpring Boot(1.4.0.M3)には良いパターンがありますか?

+1

あなたが今持っているものと期待しているものの例を追加してください。 – reos

答えて

0

同様の要件がある場合は、コード全体に個別の@Valueを使用する代わりに、キーグループごとに構成サービスを作成しました。

@Service 
public class SlowClientConfigurationService { 

    @Value("${client.slow.property.key}") 
    private String slowValue; 

    // getters, setters, sanity checks and so on... 
} 

、あなたがゲッター/セッターメソッドを介して複数のキー値を提供することができ、低速クライアント構成を、必要とする今までにこのサービスを、注入し、そしてまた、それはきれいなコードを保持します。

@Service 
public class YourService{ 

    @Autowire 
    private SlowClientConfigurationService configurationService ; 

    //... 
} 
+0

はい、これは素晴らしいですが、「遅い」と「速い」または必要な特殊化のために毎回このコードを複製する必要があります。コードを一度書いて再利用したいと思います。 –

関連する問題