spring boot - example - Frascos de carga de arranque de resorte(dependencias de aplicaciones y archivos de sistema externos)
spring boot env variables (2)
El PropertiesLauncher
fue diseñado para trabajar con frascos de grasa, por lo que debería poder mantener el frasco de grasa y agregar tantas dependencias adicionales como desee en una ubicación externa, por ejemplo, con loader.path=/opt/app/lib:lib
. Supongo que esa es tu opción 2? Si no funciona, podemos analizarlo en un problema de github.
Estoy tratando de averiguar cuál es la mejor manera de configurar una aplicación de inicio de primavera de manera que tenga sus propias dependencias jar pero se agreguen jar adicionales a classpath en tiempo de ejecución cuando se ejecuta como comando java -jar. Qué enfoque tiene más sentido
Utilice el archivo jar original (sin dependencias añadidas) y coloque todos los archivos jar (aplicación y tiempo de ejecución) en una carpeta en el sistema de archivos y use PropertiesLauncher para especificar la carpeta loader.path to jars.
Utilice el frasco de grasa (con los frascos de aplicación) coloque los frascos adicionales en el sistema de archivos y de alguna manera los incluya como frascos adicionales que deben agregarse a classpath. No estoy seguro de cómo se puede hacer esto.
¿Hay alguna otra forma mejor de hacer esto?
Resolví este problema usando la siguiente configuración spring-boot-maven-plugin , tuve que construir mi jar de Uber sin artefactos excluidos para crear mi directorio "lib" externo, luego agregué mis artefactos excluidos nuevamente y empaqué mi jar de Uber con mi aplicación dependencias específicas solamente.
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.3.1.RELEASE</version>
<configuration>
<layout>ZIP</layout>
<executable>true</executable>
<excludeArtifactIds>
<!-- My libs which will be packaged with my Uber jar-->
<!-- core,data-feeder,engine,lightspeed-tcp-api,order-manager,store,strategies,utils,viewer -->
<!-- Other libs -->
antlr,aopalliance,aspectjrt,aspectjweaver,classmate,commons-lang,
dom4j,h2,hibernate-commons-annotations,hibernate-core,hibernate-entitymanager,
hibernate-jpa-2.1-api,hibernate-validator,jackson-annotations,jackson-core,jackson-databind,
jandex,javassist,javax.transaction-api,jboss-logging,jboss-logging-annotations,jcl-over-slf4j,
jul-to-slf4j,log4j-over-slf4j,logback-classic,logback-core,mysql-connector-java,slf4j-api,
snakeyaml,spring-aop,spring-aspects,spring-beans,spring-boot,spring-boot-autoconfigure,
spring-boot-starter,spring-boot-starter-aop,spring-boot-starter-data-jpa,spring-boot-starter-jdbc,
spring-boot-starter-logging,spring-boot-starter-tomcat,spring-boot-starter-web,
spring-boot-starter-websocket,spring-context,spring-core,spring-data-commons,spring-data-jpa,
spring-expression,spring-jdbc,spring-messaging,spring-orm,spring-tx,spring-web,spring-webmvc,
spring-websocket,tomcat-embed-core,tomcat-embed-el,tomcat-embed-logging-juli,tomcat-embed-websocket,
tomcat-jdbc,tomcat-juli,validation-api,xml-apis
</excludeArtifactIds>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
Luego, agregué la siguiente propiedad a mi "application.properties" que dentro de mi directorio jar "resources /" para especificar mi directorio "lib" para Spring Properties Launcher donde puse el directorio "lib" junto con mi jar en el mismo directorio.
loader.path=lib/
Finalmente, ejecuté mi jar usando el siguiente comando
java -jar back-tester-0.0.1-beta-01.jar
Además, puede agregar la propiedad "loader.path" a su línea de comando sin ponerlo en su "application.properties" como el siguiente comando, pero de esta manera no funcionó conmigo ya que empaqué mi jar como ejecutable que Me estoy ejecutando como servicio de Linux.
java -Dloader.path="lib/" -jar back-tester-0.0.1-beta-01.jar
Ahora, reduje con éxito el tamaño de mi jar de 29 M a solo 1 M jar que contiene solo mis libs específicas de la aplicación y funciona de la caja.