web-dev-qa-db-ja.com

ガイドと一般的なアプリケーション構成

Javaで記述された監視ソフトウェアの場合、DIプロバイダーとしてGoogle Guiceを使用することを検討します。プロジェクトは外部リソース(ファイルまたはデータベース)から構成をロードする必要があります。アプリケーションはスタンドアロンで実行するように設計されていますモードまたはサーブレットコンテナ内。

現時点では、構成には依存性注入のバインディングやパラメーターは含まれていません。一部のグローバルアプリケーション設定(JDBC接続定義および関連するデータベース管理/監視オブジェクト)のみが含まれています。

2つのオプションがあります。

  • 別のライブラリを使用するには、たとえば Apache Commons Configuration 、ファイルおよびJDBC構成ソース(および他の多く)をサポートします

または

  • guice-xml-config のようなGuiceのファイルベースのアドオンを使用して、アプリケーションオプションを保存します(これにより、必要に応じて後でDIパーツを構成できます)。

両方のタスクにGuiceを使用することをお勧めしますか、それとも一般的なアプリケーション構成を依存性注入とは別にしておくことをお勧めしますか?どの長所と短所を最も重要だと思いますか?

20
mjn

Guiceモジュールでプロパティファイルをスラップするのは簡単です。

_public class MyModule extends AbstractModule {

  @Override
  protected void configure() {
    try {
        Properties properties = new Properties();
        properties.load(new FileReader("my.properties"));
        Names.bindProperties(binder(), properties);
    } catch (IOException ex) {
        //...
    }
  }
} 
_

後で、プロパティから他の構成ソースに簡単に切り替えることができます。

[編集]

ところで、@Named("myKey")で注釈を付けることで、注入されたプロパティを取得できます。

33
Landei

試してください Guice構成 Maven Centralで利用可能で、プロパティ、HOCON、JSON形式をサポートしています。

ファイルapplication.confからサービスに次のようにプロパティを挿入できます。

@BindConfig(value = "application")
public class Service {

    @InjectConfig
    private int port;

    @InjectConfig
    private String url;

    @InjectConfig
    private Optional<Integer> timeout;

    @InjectConfig("services")
    private ServiceConfiguration services;
}

モジュールConfigurationModuleを次のようにインストールする必要があります

public class GuiceModule extends AbstractModule {
    @Override
    protected void configure() {
        install(ConfigurationModule.create());
        requestInjection(Service.class);
    }
}
4
Yves Galante

ガバナライブラリを確認します。

https://github.com/Netflix/governator/wiki/Configuration-Mapping

@Configurationアノテーションといくつかの構成プロバイダーを取得します。コードでは、使用されている構成パラメーターがどこにあるかを確認するのに役立ちます。

@Configuration("configs.qty.things")
private int   numberOfThings = 10;

また、起動時にニース構成レポートが表示されます。

https://github.com/Netflix/governator/wiki/Configuration-Mapping#configuration-documentation

3
EIIPII

私は自分のプロジェクトで同じ問題に遭遇しました。私たちはすでにDIフレームワークとしてGuiceを選択しており、物事を単純にするために、構成でも使用したいと考えていました。

Apache Commons Configuration を使用してプロパティファイルから構成を読み取り、Guice FAQ 構成パラメーターを挿入するにはどうすればよいですか? ?

@Override public void configure() {
    bindConstant().annotatedWith(ConfigurationAnnotation.class)
        .to(configuration.getString("configurationValue"));    
}

Commons Configurationでサポートされている構成の再読み込みも、Guiceインジェクションに非常に簡単に実装できます。

@Override public void configure() {
    bind(String.class).annotatedWith(ConfigurationAnnotation.class)
        .toProvider(new Provider<String>() {
            public String get() {
                return configuration.getString("configurationValue");
            }
    });    
}
1
reap