example commons java configuration guice apache-commons-config

java - example - commons configuration



Guice y configuraciĆ³n general de la aplicaciĆ³n. (4)

Para un software de monitoreo escrito en Java considero usar Google Guice como proveedor de DI. El proyecto necesita cargar su configuración desde un recurso externo (archivo o base de datos). La aplicación está diseñada para ejecutarse en modo independiente o en un contenedor de servlets.

En este momento, la configuración no contiene enlaces ni parámetros para la inyección de dependencias, solo algunas configuraciones globales de la aplicación (definiciones de conexión JDBC y objetos de monitoreo / administración de bases de datos asociados).

Veo dos opciones:

o

  • usar un complemento basado en archivos para Guice como guice-xml-config para almacenar las opciones de la aplicación (esto permitiría configurar la parte de DI más adelante si fuera necesario).

¿Recomendaría usar Guice para ambas tareas, o mantener la configuración general de la aplicación separada de la inyección de dependencia? ¿Qué ventajas y desventajas consideraría las más importantes?



Es sencillo absorber un archivo de propiedades en un módulo de 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) { //... } } }

Más tarde, es fácil cambiar de Propiedades a otras fuentes de configuración.

[Editar]

Por cierto, puede obtener las propiedades inyectadas @Named("myKey") con @Named("myKey") .


Me encontré con el mismo problema en mi propio proyecto. Ya habíamos elegido Guice como marco DI y para simplificar las cosas quería usarlo también con la configuración.

Terminamos leyendo la configuración del archivo de propiedades usando la configuración de Apache Commons y uniéndolos al inyector de Guice como se sugiere en las preguntas frecuentes de Guice . .

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

La recarga de la configuración admitida por Commons Configuration también es bastante fácil de implementar en la inyección de Guice.

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


Pruebe la configuración de Guice disponible en maven central, es compatible con las propiedades, formato HOCON y JSON.

Puede inyectar propiedades desde el archivo application.conf a su servicio como:

@BindConfig(value = "application") public class Service { @InjectConfig private int port; @InjectConfig private String url; @InjectConfig private Optional<Integer> timeout; @InjectConfig("services") private ServiceConfiguration services; }

Debe instalar los módulos ConfigurationModule como

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