# application.properties
spring.main.lazy-initialization=true
-
延迟所有Bean的初始化直到首次使用 -
减少启动时的I/O操作和依赖解析
// 对特定Bean禁用延迟初始化
@Bean
@Lazy(false)
public CriticalBean criticalBean() {
return new CriticalBean();
}
-
电商应用:启动时间从8.2s → 5.1s(降低38%) -
微服务网关:启动时间从12s → 7.3s(降低39%)
@SpringBootApplication(
scanBasePackages = {"com.your.package.service", "com.your.package.controller"}
)
// 使用@ComponentScan的excludeFilters
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.REGEX, pattern = "com.external.*"),
@Filter(type = FilterType.ANNOTATION, classes = Repository.class)
})
-
某金融系统排除20个不必要的自动配置类 -
启动时间从6.5s → 4.2s(降低35%)
java -XX:TieredStopAtLevel=1 \
-Xverify:none \
-XX:+AlwaysPreTouch \
-XX:MetaspaceSize=128m \
-XX:MaxMetaspaceSize=128m \
-jar your-app.jar
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@SpringBootApplication
public class MyApp {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(MyApp.class);
app.setBannerMode(Banner.Mode.OFF);
// 打印自动配置报告
app.setAdditionalProfiles("debug");
app.run(args);
}
}
@EnableAutoConfiguration(exclude = {
DataSourceAutoConfiguration.class,
HibernateJpaAutoConfiguration.class,
RabbitAutoConfiguration.class
})
-
IoT平台排除15个自动配置类 -
启动时间从7.8s → 4.6s(降低41%)
# 使用JDK自带工具
java -verbose:class -jar your-app.jar | grep "loaded"
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
# 在Maven构建中添加Jar索引
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<index>true</index>
</archive>
</configuration>
</plugin>
@Configuration
public class LazyDataSourceConfig {
@Bean
@Lazy
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
}
# HikariCP配置
spring.datasource.hikari.initialization-fail-timeout=30000
spring.datasource.hikari.connection-timeout=5000
spring.datasource.hikari.maximum-pool-size=5
// 使用@PostConstruct确保启动后再初始化
@Bean
public CommandLineRunner initData(MyRepository repo) {
return args -> {
// 启动后执行数据操作
};
}
# 安装GraalVM
gu install native-image
# 构建原生镜像
mvn -Pnative package
# 开发环境使用快速编译
-Dspring.aot.enabled=false -XX:TieredStopAtLevel=1
# 生产环境使用完整优化
-Dspring.aot.enabled=true -XX:TieredStopAtLevel=4
-
启动时间:14.6秒 -
内存占用:1.2GB -
类加载数量:8,732
-
应用延迟初始化(节省3.2s) -
精确配置组件扫描(节省2.8s) -
优化JVM参数(节省1.9s) -
排除12个自动配置类(节省2.1s) -
精简依赖项(节省1.3s) -
延迟数据库连接(节省0.9s) -
采用分层编译(节省2.4s)
-
启动时间:4.3秒(降低70.5%) -
内存占用:680MB(降低43%) -
类加载数量:5,211(减少40%)
-
启用延迟初始化 -
精确配置组件扫描范围 -
优化JVM启动参数 -
排除不必要的自动配置 -
分析并精简依赖 -
延迟非关键资源连接 -
考虑AOT编译或分层编译
往期推荐
两天开发一个管理系统...
几行代码就能实现复杂的 Excel 导入导出,这个工具类真心强大!
SpringBoot多数据源终极方案:定制Druid + 动态切换,轻松管理复杂配置!
Redis分布式锁故障,我忍不住想爆粗...
SpringBoot3+SpringSecurity6+JWT打造企业级权限系统
SpringBoot 3.x 集成 Flowable 7.x:流程设计、部署、启动及完成实战

