## spring boot --- #### 附录 * [源码](https://github.com/spring-projects/spring-boot) * [SpringBoot 组件接入示例](https://github.com/aalansehaiyang/SpringBoot-Learning) * [java autoConfig配置](springboot-javaConfig.md) * [开发过程中代码热部署](springboot-hot-reload.md) * [eclipse中如何跑spring boot的单元测试](springboot-unit.md) #### 学习资料 * http://www.ityouknow.com/spring-boot * https://github.com/JeffLi1993/springboot-learning-example * https://github.com/spring-projects/spring-boot * http://www.jianshu.com/collection/f0cf6eae1754 * http://zh.lucida.me/blog/java-8-lambdas-insideout-language-features/ * 《SpringBoot揭秘--快速构建微服务体系》* --- #### 框架---模块---体系---生态 #### 简介 springboot是基于spring+java+web容器,微服务框架的杰出代表。微服务其实就是将服务粒度做小,使之可以独立承担对外服务的的职责。 ##### 特征 * 遵循“约定胜于配置”的原则,使用spring boot只需要很少的配置,大部分时候可以使用默认配置 * 项目快速搭建,可以配置整合第三方框架 * 可完全不使用xml配置,借助java config * 内嵌Servlet(如 Tomcat)容器,可以jar包运行 * 运行中的应用状态监控 **微服务优势:** * 独立性。每个微服务都是一个独立的项目。可以独立对外提供服务,可以将研发人力资源很好的分摊,避免人力资源密集带来的沟通、协作成本。(低耦合原则) * 稳定性。任何一个微服务的失败都将只影响自己或少量其他微服务,不会影响整个服务运行体系。 SpringApplication将一个典型的spring应用启动的流程“模板化”,默认模板化后执行流程就可以满足需求了,如果有特殊需求,SpringApplication在合适的流程节点开放了一系列不同类型的扩展点,我们可以通过这些扩展点对SpringBoot程序的启动和关闭过程进行扩展。 ``` @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class }) public class Main extends WebMvcConfigurationSupport { public static void main(String[] args) { SpringApplication app = new SpringApplication(Main.class, "classpath*:/spring/*.xml"); app.setShowBanner(false); app.run(args); } } ``` **执行流程:** 1.如果我们使用的是SpringApplication的静态run方法,首先需要创建一个SpringApplication对象实例。 a)使用SpringFactoriesLoader在应用的classpath中查找并加载所有可用的ApplicationContextInitialize b)使用SpringFactoriesLoader在应用的classpath中查找并加载所有可用的ApplicationListener c)设置main方法的定义类 2.开始执行run方法的逻辑,首先遍历执行所有通过SpringFactoriesLoader加载到的SpringApplicationRunListener,调用它们的started()方法,告诉这些SpringApplicationRunListener,SpringBoot应用要开始执行了。 3.创建并配置当前SpringBoot应用将要使用的Environment 4.遍历并调用所有的SpringApplicationRunListener的environmentPrepared()方法,告诉它们,Springboot应用使用的Environment准备好了 5.确定SpringBoot应用创建什么类型的ApplicationContext,并创建完成,然后根据条件决定是否使用自定义的ShutdownHook,是否使用自定义的BeanNameGenerator,是否使用自定义的ResourceLoader,然后将准备好的Environment设置给创建好的ApplicationContext使用 6.ApplicationContext创建完成,SpringApplication调用之前加载的ApplicationContextInitialize的initialize方法对创建好的ApplicationContext进行进一步的处理 7.遍历所有SpringApplicationRunListener的contextPrepared()方法,通知它们,SpringBoot应用使用的ApplicationContext准备好了 8.将之前通过@EnableAutoConfiguration获取的所有配置以及其他形式的Ioc容器配置加载到已经你准备完毕的ApplicationContext 9.遍历所有的SpringApplicationRunListener的contextLoader()方法,告知ApplicationContext已装载完毕 10.调用ApplicationContext的refresh()方法,完成Ioc容器可用的最后一道工序 11.查找当前ApplicationContext中是否注册有CommandLineRunner,如果有,则遍历执行它们 12.遍历所有的SpringApplicationRunListener的finished()方法,告知,“初始化完成” --- **springboot提供了很多“开箱即用”的依赖模块,以"spring-boot-starter-"开头,以解决不同场景问题。** 1.SpringBoot应用将自动使用logback作为应用日志框架, ``` org.springframework.boot spring-boot-starter-logging ``` 2.得到一个直接可执行的web应用,当前项目下直接运行mvn spring-boot:run 就可以直接启动一个嵌入tomcat服务请求的web应用。 默认访问地址:http://localhost:8080 ``` org.springframework.boot spring-boot-starter-web ``` 如果想使用其它容器,可引入spring-boot-starter-jetty 另外可以修改server.port使用自己指定的端口 3.访问数据库依赖此模块。 ``` org.springframework.boot spring-boot-starter-jdbc ``` 4.负责web应用安全,配合spring-boot-starter-web使用 ``` org.springframework.boot spring-boot-starter-security ``` 5.监控,了解应用的运行状态 ``` org.springframework.boot spring-boot-starter-actuator ``` 上面只是介绍一些常用的组件,sping社区还有很多其它优秀的组件,可以根据自己的业务情况研究自取。