Pregunta

Estoy en el proceso de eliminar todos los valores codificados en una biblioteca Java y me preguntaba qué marco sería el mejor (en términos de configuración cero o cercana a cero) para manejar la configuración en tiempo de ejecución.Preferiría archivos de configuración basados ​​en XML, pero no es esencial.

Responda únicamente si tiene experiencia práctica con un marco.No busco ejemplos, sino experiencia...

¿Fue útil?

Solución

Si sus valores codificados son simplemente pares clave-valor simples, debería mirar java.util.Properties.Es mucho más simple que xml, más fácil de usar y tremendamente trivial de implementar.

Si está trabajando con Java y los datos que está almacenando o recuperando del disco se modelan como un par clave-valor (que parece serlo en su caso), entonces realmente no puedo imaginar una solución mejor.

He usado archivos de propiedades para una configuración simple de paquetes pequeños en un proyecto más grande y como una configuración más global para un proyecto completo, y nunca he tenido problemas con eso.

Por supuesto, esto tiene la gran ventaja de no requerir el uso de bibliotecas de terceros.

Otros consejos

Configuración de Apache Commons Funciona genial.Admite tener la configuración almacenada en una amplia gama de formatos en el backend, incluidas propiedades, XML, JNDI y más.Es fácil de usar y ampliar.Para obtener la mayor flexibilidad, utilice un fábrica para obtener la configuración y simplemente usar el Interfaz de configuración después.

Dos características de Commons Configuration que lo diferencian de un archivo de propiedades simple es que admite la conversión automática a tipos comunes (int, float, matrices de cadenas) y admite la sustitución de propiedades:

server.host=myHost
server.url=http://${server.host}/somePath

Aquí hay varias opciones:

Quizás quieras leer Comparación de la configuración común con JFig y JConfig y Configurando sus aplicaciones usando JFig para obtener comentarios de varios usuarios.

Personalmente, he usado jConfig y fue una buena experiencia.

Configuración común

Estamos usando esto.Los archivos de propiedades por sí solos son mucho más fáciles de manejar, pero si necesita representar una configuración común de datos más compleja, puede hacerlo y leer también sus archivos de propiedades.

Si no está haciendo nada complicado, me limitaré a los archivos de propiedades.

Si quieres hacer algo avanzado (y seguro para escribir), quizás quieras echarle un vistazo a esto: http://www.ibm.com/developerworks/java/library/j-configint/index.html

la herramienta de utilización inteligente de parámetros (Aporte, página) permite externalice casi cualquier decisión (codificada) como parámetro en un archivo de configuración basado en XML. Se inició a principios de 2012 como respuesta a las deficiencias percibidas en las herramientas de configuración existentes con respecto a la generalidad y la separación de preocupaciones.

InPUT es probablemente más potente de lo que requieren la mayoría de los casos de uso, ya que permite la formulación independiente del lenguaje de programación de datos experimentales (entrada – salida), con características como la definición de descriptor complejo para asignaciones de clases, o generación y validación de configuraciones aleatorias basadas en rangos de valores predefinidos (para pruebas e investigaciones, p. ej.Simulaciones de Montecarlo).Puede definir parámetros con subparámetros, restricciones relativas sobre los valores de los parámetros (parámetro numérico a > parámetro b) etc..

Todavía está en versión beta, pero es bastante estable. Lo uso para mi investigación, para configuración y documentación de experimentos, y con fines didácticos.Una vez que esté disponible para otros lenguajes (adaptador de C++ en proceso), otros investigadores/profesionales pueden reutilizar los descriptores ejecutando sus implementaciones de los mismos algoritmos en C++ (usando el concepto de mapeo de código).De esa manera, Los resultados experimentales se pueden validar/los programas se pueden migrar más fácilmente..La documentación todavía está en proceso de trabajo, pero un par de hay ejemplos disponibles en la pagina.La entrada es fuente abierta software.

Para aquellos interesados, el Trabajo de investigación conceptual.

tiendo a usar java.util.Properties (o clases similares en otros lenguajes y marcos) envuelto en una clase de configuración específica de la aplicación la mayor parte del tiempo, pero estoy muy interesado en alternativas o variaciones de esto.Sobre todo porque las cosas pueden volverse un poco complicadas si se trata de cuadros de diálogo de configuración gráfica o múltiples vistas de los datos de configuración.

Desafortunadamente, no tengo ninguna experiencia con bibliotecas específicas para Java (excepto con las que he escrito yo mismo), pero agradecería cualquier sugerencia.

Actualizar

DE ACUERDO.Eso no era del todo cierto, tres es el Proyecto de configuración de Spring Java.

I escribió Hablamos de esto hace un par de semanas y llegué a la conclusión de que XML es una de las notaciones más utilizadas.

¿Es el mejor?No lo creo, me gusta mucho JSON, pero las herramientas aún no están a la altura de XML, así que supongo que tendremos que esperar y ver.

Puedes probar Frijoles Yaml.De esta manera, escribe las clases que desea que contengan sus datos de configuración, luego puede escribirlas y leerlas automáticamente hacia y desde YAML.

YAML es un formato de datos legible por humanos.Tiene más poder expresivo que java.util.Properties.Puede tener listas, mapas, anclajes, datos escritos, etc.

Por favor, eche un vistazo a esta URL: http://issues.apache.org/jira/browse/CONFIGURATION-394

El marco de configuración que estamos buscando es algo adicional a la configuración de Apache Commons y debe admitir problemas de concurrencia, problemas de JMX y la mayoría de las tiendas (por ejemplo, archivos .properties, archivos .xml o PreferencesAPI).

Es interesante lo que proporciona el equipo de weblogic en la 'Consola de administración', ya que a través de ella puede tener actualizaciones transaccionales (atómicas) en las configuraciones para que los oyentes registrados sean notificados.

¡Los chicos de Apache insisten en que este proyecto está fuera del alcance de Commons Configuration, tal vez!

He adjuntado un marco de configuración simple, eche un vistazo, por favor.

Acabo de publicar un breve fragmento de código sobre el uso de ClassPathResource de Spring como alternativa a IoC.ClassPathResource le permite colocar archivos de propiedades en cualquier lugar del classpath (por ejemplo, todos en un solo lugar o como pares del código que configuran).Mi ejemplo solo usa java.util.Properties, por lo que puedes usar el estilo de texto sin formato "nombre=valor" o su formato XML.

Los archivos de propiedades son muy simples, si necesita algo más funcional, puede formatear algunos de sus archivos de configuración como clases Java.Estos se pueden colocar en un paquete/módulo diferente y se pueden precompilar o cargar en tiempo de ejecución con una biblioteca como BeanShell.

Nota:En el caso más simple (precompilado), no necesita bibliotecas adicionales.

Con respecto a las sugerencias para usar java.util.Properties, a partir de jdk 1.5, la API de Preferencias (java.util.prefs) parece ser la alternativa preferida al uso de la API de Propiedades.

Razones:mayor escalabilidad, neutralidad de back-end, etc.

Podrías echarle un vistazo a lo recién anunciado. herramientas4j-config cuya misión es permitirle manejar fácilmente la configuración en tiempo de ejecución.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top