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); } }