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:
- para utilizar otra biblioteca, por ejemplo, la configuración de Apache Commons , que admite fuentes de configuración de archivos y JDBC (y muchas otras)
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?
Compruebe la biblioteca del gobernador:
https://github.com/Netflix/governator/wiki/Configuration-Mapping
Obtendrá una anotación @Configuration y varios proveedores de configuración. En el código ayuda a ver dónde se utilizan los parámetros de configuración:
@Configuration("configs.qty.things")
private int numberOfThings = 10;
Además, obtendrá un buen informe de configuración en el inicio:
https://github.com/Netflix/governator/wiki/Configuration-Mapping#configuration-documentation
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);
}
}