spring boot 启动更快速

作者: 一个神奇的女码农 | 来源:发表于2018-11-29 16:10 被阅读254次

    1.建立一个spring boot的工程

      这一步就不详细介绍了

    2.搬一个控制器

    @SpringBootApplication

    @RestController

    public class DemoApplication {

    @GetMapping("/")

    public String home() {

    return "Hello";

    }

    public static void main(String[] args) {

    SpringApplication.run(DemoApplication.class, args);

    }

    }

    此时的启动时间是: Started DemoApplication in 3.188 seconds (JVM running for 4.203)

    3.加入webflux依赖

            <dependency>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-starter-webflux</artifactId>

            </dependency>

    此时的启动时间是: Started DemoApplication in 3.977 seconds (JVM running for 7.735)

    好像慢了一点,不太了解webflux是用来干什么的,之前没用到过.查了一下可以在于在固定资源条件下,提高系统吞吐量

    4.spring-context-indexer

    它似乎创建了组件索引。对大项目有很多组件时有效果

            <dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-context-indexer</artifactId>

    <optional>true</optional>

    </dependency>

    此时的启动时间是:Started DemoApplication in 3.913 seconds (JVM running for 4.903)

    看不出来有什么大变化

    5. 惰性初始化

    代码:

    @Configuration

    public class LazyInitBeanFactoryPostProcessor implements BeanFactoryPostProcessor {

        @Override

        public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {

            for (String beanName : configurableListableBeanFactory.getBeanDefinitionNames()) {

                configurableListableBeanFactory.getBeanDefinition(beanName).setLazyInit(true);

            } 

        }

    }

    此时的启动时间是:Started DemoApplication in 3.371 seconds

    仿佛变快了呀

    6.NoVerify

    -noverify 参数作用: 关闭 Java 字节码的校验功能。当 ClassLoader 加载的Java 字节码时,字节码首先接受校验器(verifier)的校验。校验器负责检查那些指令无法执行的明显的破坏性的操作

    此时的启动时间是:Started DemoApplication in 1.175 seconds

    实现了质的飞跃啊!

    配置方法:settings -> maven -> runner -> vm options ->noverify

    7.TieredStopAtLevel

    -XX:TieredStopAtLevel=1 :查了一圈不知道用来干什么的!

    此时的启动时间是:Started DemoApplication in 1.126 seconds

    8.指定 SpringConfigLocation 参数

    运行加 -Dspring.config.location=classpath:/application.properties:

    此时的启动时间是:Started DemoApplication in 1.138 seconds

    9.关闭 JMX

    运行加 -Dspring.jmx.enabled=false:

    此时的启动时间是:Started DemoApplication in 1.123 seconds

    10.取消 Logback

            <dependency>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-starter-webflux</artifactId>

                <exclusions>

                    <exclusion>

                        <artifactId>spring-boot-starter-logging</artifactId>

                        <groupId>org.springframework.boot</groupId>

                    </exclusion>

                </exclusions>

            </dependency>

    此时的启动时间是:Started DemoApplication in 1.103 seconds

    离目标越来越近了!

    11.取消 Jackson

            <exclusion>

                <artifactId>spring-boot-starter-json</artifactId>

                <groupId>org.springframework.boot</groupId>

            </exclusion>

    此时的启动时间是:Started DemoApplication in 1.101 seconds

    仿佛没什么用,取消函数库感觉变化不大,就不做别的取消了

    12.AppCDS

    AppCDS 是JDK 10 以后才有的新特性,我现在用的版本是8,于是我兴冲冲去下了个 jdk 11,发现没有 .exe文件,百度了一圈都是让我找EXE文件进行安装(百度害我),后面发现是免安装的,被自己蠢哭.

    所以你去官网下载之后只要配置你本地的JAVA_HOME就好了.

    然后发现,速度并没有变快,是我的手法有什么问题吗?

    差不多,我能做到的极限好像就是1秒了,但是也比原来快了2秒,也快了不少了

    相关文章

      网友评论

        本文标题:spring boot 启动更快速

        本文链接:https://www.haomeiwen.com/subject/yvgkhftx.html