springBoot 优化(上)

Spring Boot可以轻松的创建独立“运行”的程序,基于Spring构建的应用程序。 我们对Spring平台和第三方库融合一体,所以你可以轻松快速的开发。 大多数Spring Boot应用程序只需要很少Spring的配置。


spring boot 特征

1、创建独立的Spring应用程序

2、直接嵌入Tomcat,Jetty或Undertow(不需要部署WAR文件),一般小程序建议使用jetty即可,tomcat相对耗资源比较多。

3、提供简单的“启动”POM来简化您的Maven配置。

4、尽可能可伸缩的自动化配置。

5、提供生产就绪功能,如指标,运行状况检查和外部化配置。

6、基于代码配置或注解,也不需要XML配置。


springboot简单案例

1、执行maven命令 生成maven骨架

mvn archetype:generate -DgroupId=springboot -DartifactId=springboot-helloworld -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

1、引入pom


    org.springframework.boot

    spring-boot-starter-parent

    1.5.6.RELEASE

   

        org.springframework.boot

        spring-boot-starter-web

           

               spring-boot-starter-tomcat

               org.springframework.boot

           

     

     

          spring-boot-starter-jetty 

          org.springframework.boot

       

       

1.1、这里去除了springboot自带的tomcat,自己添加jetty的依赖。


2、引用启动类


 /**

 * Spring Boot应用启动类

 */

@SpringBootApplication

public class ApplicationRun {

    public static void main(String[] args) {

        SpringApplication.run(ApplicationRun .class,args);

    }

}

 @SpringBootApplication:Spring Boot 应用的标识

2. Application很简单,一个main函数作为主入口。SpringApplication引导应,并将Application本身作为参数传递给run方法。具体run方法会启动嵌入式的jetty并初始化Spring环境及其各Spring组件。


3、控制类

 @RestController

@RequestMapping("/hello")

public class HelloWorldController {

    @RequestMapping("/sayHello")

    public String sayHello() {

        return "Hello,World!";

    }

 @RestController和@RequestMapping注解是来自SpringMVC的注解,它们不是SpringBoot的特定部分。

1. @RestController:提供实现了REST API,可以服务JSON,XML或者其他。这里是以String的形式渲染出结果。

2. @RequestMapping:提供路由信息,”hello/sayHello“路径的HTTP Request都会被映射到sayHello方法进行处理。



4、以上案例及其简单,没有任何复杂的功能,但是该程序启动过程耗时比较长和消耗内存都是比较大的。启动耗时一般都要20秒左右,内存一般都是4~500M左右。

一个这么简单的程序为什么会启动这么慢,耗内存这么大呢?

因为我们大家都默认采用了@SpringBootApplication该注解,该注解包含了@Configuration,@EnableAutoConfiguration,@ComponentScan这仨,其目的也是为了简化运用。

采用@SpringBootApplication 注解时是通过读取spring-boot-1.5.2.RELEASE.jar中的META-INF/spring.factories文件中定义好的基础类,我们可以看看里面定义了那些类,分别又有什么作用:

# PropertySource Loaders 默认导入资源配置

org.springframework.boot.env.PropertySourceLoader=\

org.springframework.boot.env.PropertiesPropertySourceLoader,\

org.springframework.boot.env.YamlPropertySourceLoader

# Run Listeners默认导入启动监听

org.springframework.boot.SpringApplicationRunListener=\

org.springframework.boot.context.event.EventPublishingRunListener

# Application Context Initializers 默认到程序启动容器上下文初始化

org.springframework.context.ApplicationContextInitializer=\

org.springframework.boot.context.ConfigurationWarningsApplicationContextInitializer,\

org.springframework.boot.context.ContextIdApplicationContextInitializer,\

org.springframework.boot.context.config.DelegatingApplicationContextInitializer,\

org.springframework.boot.context.embedded.ServerPortInfoApplicationContextInitializer

# Application Listeners 导入监听程序包

org.springframework.context.ApplicationListener=\

org.springframework.boot.ClearCachesApplicationListener,\

org.springframework.boot.builder.ParentContextCloserApplicationListener,\

org.springframework.boot.context.FileEncodingApplicationListener,\

org.springframework.boot.context.config.AnsiOutputApplicationListener,\

org.springframework.boot.context.config.ConfigFileApplicationListener,\

org.springframework.boot.context.config.DelegatingApplicationListener,\

org.springframework.boot.liquibase.LiquibaseServiceLocatorApplicationListener,\

org.springframework.boot.logging.ClasspathLoggingApplicationListener,\

org.springframework.boot.logging.LoggingApplicationListener

# Environment Post Processors 导入环节配置

org.springframework.boot.env.EnvironmentPostProcessor=\

org.springframework.boot.cloud.CloudFoundryVcapEnvironmentPostProcessor,\

org.springframework.boot.env.SpringApplicationJsonEnvironmentPostProcessor

# Failure Analyzers

org.springframework.boot.diagnostics.FailureAnalyzer=\

org.springframework.boot.diagnostics.analyzer.BeanCurrentlyInCreationFailureAnalyzer,\

org.springframework.boot.diagnostics.analyzer.BeanNotOfRequiredTypeFailureAnalyzer,\

org.springframework.boot.diagnostics.analyzer.BindFailureAnalyzer,\

org.springframework.boot.diagnostics.analyzer.ConnectorStartFailureAnalyzer,\

org.springframework.boot.diagnostics.analyzer.NoUniqueBeanDefinitionFailureAnalyzer,\

org.springframework.boot.diagnostics.analyzer.PortInUseFailureAnalyzer,\

org.springframework.boot.diagnostics.analyzer.ValidationExceptionFailureAnalyzer

# FailureAnalysisReporters

org.springframework.boot.diagnostics.FailureAnalysisReporter=\

org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter

以上这些都是springboot默认加载的,如果我们有自己第一的监听或者熟悉配置等等类都可以在这里添加,使其通过@SpringBootApplication默认加载到环境中。

你可能感兴趣的:(springBoot 优化(上))