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