Spring Boot学习(一)
1.Spring Boot入门1.1Spring Boot 简介脚手架简化Spring应用开发的一个框架整个Spring技术栈的一个大整合J2EE开发的一站式解决方案优点快速创建独立运行的spring项目以及与主流框架集成使用嵌入式的Servlet容器应用无需打成war包内嵌TomcatStarters自动依赖和版本控制大量的自动装配简化开发也可以修改默认值无需配置XML无代码生成开箱即用准生产环境的运行时应用监控与云计算的天然集成1.2Spring Cloud微服务治理方案1.2.1微服务简介微服务是指开发单个小型的但有业务功能的服务每个服务都有自己处理和轻量通讯机制可以部署在单个或多个服务器上。微服务也指一种种松耦合的有一定的有界上下文的面向服务架构。一个应用应该是一组小型服务可以通过HTTP的方式进行互通微服务每一个功能元素最终都是一个可独立替换和独立升级的软件单元微服务文档Microservices1.2.2微服务优点每一个微服务都很小这样能聚焦一个指定的业务功能或业务需求。微服务能够被小团队单独开发这个小团队是2到5人的开发人员组成。微服务是松耦合的是有功能意义的服务无论是开发阶段或是部署阶段都是独立的。微服务能够使用不同的语言开发。微服务允许容易且灵活的方式集成自动部署通过持续集成工具一个团队的新成员能够更快投入生产。微服务易于被一个开发人员理解修改和维护这样小团队能够更关注自己的工作成果微服务能够即时被要求扩展。微服务能够部署中低端配置的服务。易于和第三方集成。每个微服务都有自己的存储能力可以有自己的数据库也可以有统一的数据库。1.2.3微服务缺点微服务架构可能带来过多的操作可能双倍的努力分布式系统可能复杂难以管理因为分布部署跟踪问题难当服务量增加管理复杂性增加2.Spring Boot HelloWorldmaven项目改变成springboot项目2.1创建 Maven 工程打包方式选 jar2.2导入spring boot相关的依赖parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version2.0.2.RELEASE/version /parent dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency /dependencies2.3编写一个主程序启动Spring Boot应用SpringBootApplication public class HelloWorldMainApplication { public static void main(String[] args) { SpringApplication.run(HelloWorldMainApplication.class, args); } }2.4编写相关ControllerController public class HelloController { ResponseBody RequestMapping(/hello) public String hello() { return Hello World!; } }2.5运行主程序访问http://localhost:8080/hello即可看到Hello World!。2.6简化部署添加 Spring Boot Maven 插件打包为可执行 JARbuild plugins plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId /plugin /plugins /build3.Hello World探究3.1父项目parent groupIdorg.springframework.boot/groupId artifactIdspring‐boot‐starter‐parent/artifactId version1.5.9.RELEASE/version /parent 他的父项目是 parent groupIdorg.springframework.boot/groupId artifactIdspring‐boot‐dependencies/artifactId version1.5.9.RELEASE/version relativePath../../spring‐boot‐dependencies/relativePath /parent 他来真正管理Spring Boot应用里面的所有依赖版本 Spring Boot的版本仲裁中心 以后我们导入依赖默认是不需要写版本没有在dependencies里面管理的依赖自然需要声明版本号3.2启动器dependency groupIdorg.springframework.boot/groupId artifactIdspring‐boot‐starter‐web/artifactId /dependencyspring-boot-starterspring-boot场景启动器帮我们导入了web模块正常运行所依赖的组件Spring Boot将所有的功能场景都抽取出来做成一个个的starters启动器只需要在项目里面引入这些starter相关场景的所有依赖都会导入进来。要用什么功能就导入什么场景的启动器。3.3主程序类主入口类/** * SpringBootApplication 来标注一个主程序类说明这是一个Spring Boot应用 */ SpringBootApplication public class HelloWorldMainApplication { public static void main(String[] args) { // Spring应用启动起来 SpringApplication.run(HelloWorldMainApplication.class,args); } }Target(ElementType.TYPE) Retention(RetentionPolicy.RUNTIME) Documented Inherited SpringBootConfiguration EnableAutoConfiguration ComponentScan(excludeFilters { Filter(type FilterType.CUSTOM, classes TypeExcludeFilter.class), Filter(type FilterType.CUSTOM, classes AutoConfigurationExcludeFilter.class) }) public interface SpringBootApplication {AutoConfigurationPackage Import(EnableAutoConfigurationImportSelector.class) public interface EnableAutoConfiguration3.3.1SpringBootApplication:Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类SpringBoot就应该运行这个类的main方法来启动SpringBoot应用3.3.2SpringBootConfiguration:Spring Boot的配置类标注在某个类上表示这是一个Spring Boot的配置类3.3.3Configuration:配置类上来标注这个注解配置类-----配置文件配置类也是容器中的一个组件Component3.3.4EnableAutoConfiguration开启自动配置功能以前我们需要配置的东西Spring Boot帮我们自动配置EnableAutoConfiguration告诉SpringBoot开启自动配置功能这样自动配置才能生效3.3.5AutoConfigurationPackage自动配置包3.3.6Import(AutoConfigurationPackages.Registrar.class)Spring的底层注解Import给容器中导入一个组件导入的组件AutoConfigurationPackages.Registrar.class将主配置类SpringBootApplication标注的类的所在包及下面所有子包里面的所有组件扫描到Spring容器3.3.7Import(EnableAutoConfigurationImportSelector.class)给容器中导入组件EnableAutoConfigurationImportSelector导入哪些组件的选择器将所有需要导入的组件以全类名的方式返回这些组件就会被添加到容器中会给容器中导入非常多的自动配置类xxxAutoConfiguration就是给容器中导入这个场景需要的所有组件并配置好这些组件有了自动配置类免去了我们手动编写配置注入功能组件等的工作SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,classLoader)Spring Boot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值将这些值作为自动配置类导入到容器中自动配置类就生效帮我们进行自动配置工作以前我们需要自己配置的东西自动配置类都帮我们