Javaで記述された監視ソフトウェアの場合、DIプロバイダーとしてGoogle Guiceを使用することを検討します。プロジェクトは外部リソース(ファイルまたはデータベース)から構成をロードする必要があります。アプリケーションはスタンドアロンで実行するように設計されていますモードまたはサーブレットコンテナ内。
現時点では、構成には依存性注入のバインディングやパラメーターは含まれていません。一部のグローバルアプリケーション設定(JDBC接続定義および関連するデータベース管理/監視オブジェクト)のみが含まれています。
2つのオプションがあります。
または
両方のタスクにGuiceを使用することをお勧めしますか、それとも一般的なアプリケーション構成を依存性注入とは別にしておくことをお勧めしますか?どの長所と短所を最も重要だと思いますか?
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")
で注釈を付けることで、注入されたプロパティを取得できます。
試してください 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);
}
}
ガバナライブラリを確認します。
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
私は自分のプロジェクトで同じ問題に遭遇しました。私たちはすでに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");
}
});
}