La extensión de aplicación basada en la primavera
-
22-09-2019 - |
Pregunta
Tengo un servicio web basado en la primavera. Ahora quiero construir una especie de complemento por ello que se extiende con frijoles. Lo que tengo ahora en web.xml es:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/*-configuration.xml</param-value>
</context-param>
Mi aplicación núcleo tiene main-configuration.xml
que declara sus granos. Mi aplicación plugin tiene plugin-configuration.xml
que declara granos adicionales. Ahora, cuando despliego, mi construcción despliega plugin.jar
en /WEB-INF/lib/
y copias plugin-configuration.xml
en /WEB-INF/classes/
todo bajo main.war
.
Esto es todo muy bien (aunque creo que podría ser una solución mejor), pero cuando desarrollo el plugin, no quiero tener dos proyectos en Eclipse con dependencias. Deseo tener main.jar
que incluyo como una biblioteca. Sin embargo, web.xml
de main.jar
no se descubre de forma automática. ¿Cómo puedo hacer esto? inyección de frijol? descubrimiento de frijol de algún tipo? Algo más?
Nota: espero tener múltiples plugins diferentes en la producción, pero el desarrollo de cada uno de ellos será contra main.jar pura
Gracias.
Solución
Creo que hay un enfoque más simple:
En su programa de control (la aplicación de web) definir algo como el siguiente parámetro contextConfigLocation
:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/META-INF/foo/*-configuration.xml</param-value>
</context-param>
Las partes cruciales son classpath*:
as que se traduce en el análisis de toda la ruta de clase para los archivos de configuración que coinciden con el patrón siguiente. Si sólo utiliza classpath:
la búsqueda se detendrá en el primer archivo encontrado. También JAR no atraviesa si no se actuó correctamente.
La segunda parte crucial está teniendo al menos un BasePath no comodín para las operaciones de búsqueda de trabajo. Esto es debido a los rasgos Classloader
que sólo devuelve de forma fiable todos los recursos si contienen una ruta de la base (consulte el Javadoc en PathMatchingResourcePatternResolver
para más detalles).
Lo que ahora tiene que ver con sus proyectos plugin es su lugar en plugin-configuration.xml
/META-INF/foo/
, paquete que como JAR y el lugar en la ruta de clase (en caso de que construir con Maven sólo tiene que añadir la dependencia).
En la aplicación se inicia ahora también la recogida Todos los archivos de configuración de la primavera de los plugins y construir el ÀpplicationContext` de ellos.
También puede ser que desee pago y envío otro post que hice en la modularidad de aplicaciones con Spring: ¿Cómo se hace una configuración de la primavera de varios módulos?
Otros consejos
En lugar de /WEB-INF/classes/*-configuration.xml
, classpath:*-configuration.xml
intento
También puede los archivos de configuración de la lista, cada uno en una nueva línea.
Usted tendrá que asegurarse de que los extremos main.jar arriba en WEB-INF / lib, si usted no está utilizando Maven se puede hacer esto en Eclipse de que el marcado webapp que depende del proyecto que crea el main.jar , a través de las propiedades del proyecto.