maven 配置 业务包和依赖包分离
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
<layout>ZIP</layout>
<jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
<includes>
<include>
<groupId>nothing</groupId>
<artifactId>nothing</artifactId>
</include>
</includes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/lib
</outputDirectory>
<excludeScope>provided</excludeScope>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>cn.mhauto.cloud.platform.uaa.spring.UaaApplication</mainClass>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
使用CDS加速
方式一使用spring的类加载器
java --enable-preview -XX:ArchiveClassesAtExit=./application.jsa -Dspring.context.exit=onRefresh -jar target/xxx-0.0.1.jar
java --enable-preview -XX:SharedArchiveFile=application.jsa -jar target/xxx-0.0.1.jar
方式二,使用AppClassloder加载器
java --enable-preview -XX:ArchiveClassesAtExit=./application.jsa -Dspring.context.exit=onRefresh -cp mhauto-tenant-uaa-0.0.1.jar.original cn.mhauto.cloud.platform.uaa.spring.UaaApplication
java --enable-preview -XX:SharedArchiveFile=application.jsa -cp mhauto-tenant-uaa-0.0.1.jar.original cn.mhauto.cloud.platform.uaa.spring.UaaApplication
总结
- 两种方式都能使用cds加速
- 虽然使用的Spring 的类加载器, 但依然还有性能提升。
- 提升启动速度大约45%
- 启动时的cpu占用降低30%