## 第一章 Spring Boot框架 ### 1.Spring 缺点 Spring是一个2003年兴起的轻量级的Java开发框架,是为了解决企业级应用开发的复杂性而创建的,被称为JavaEE的春天。 #### 1.1 项目配置繁琐 虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。一开始,Spring采用XML配置,到Spring2.5以后引入了基于注解的组件扫描,Spring3.0引入了基于Java的配置,但这些所有的配置都代表了开发的耗时。 #### 1.2 导入依赖繁琐 项目的依赖管理也是一件耗时耗力的事情,在环境的搭建时,需要分析导入哪些依赖,哪些库的坐标,而且有时候还需要分析导入与之有依赖关系的其他库的坐标,一旦选错了版本,随之而来的不兼容问题就会严重阻碍项目的开发。 ### 2.Spring Boot概述 Spring Boot是Spring提供的一个子项目,它用来简化Spring应用程序的创建和开发过程,也可以说Spring Boot能简化我们之前采用SpringMVC+Spring框架进行开发的过程。用于快速构建Spring应用程序。 在以往我们搭建和整合三大框架,我们需要做很多工作,比如配置web.xml,配置Spring,配置Mybatis,并将它们整合在一起等,而Spring Boot框架对此开发过程进行了革命性的颠覆,完全抛弃了繁琐的xml配置过程,采用大量的默认配置设置简化我们的开发过程。采用Spring Boot可以非常容易和快速地创建基于Spring框架的应用程序,它让编码变的简单了,配置变简单了,部署变简单了,监控变简单了,为了简化而生。 Spring Boot 提供了一种快速使用Spring的方式,基于 “约定优于配置” 的思想,可以让开发人员不必在配置和逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目的开发周期。 Spring Boot也是Spring的一套快速开发整合包, 为Spring平台及第三方库提供开箱即用的设置(提供默认设置)正因为Spring Boot化繁为简,让开发变的及其简单和快速,2014年4月,Spring Boot1.0.0发布以后深受广大企业与开发者所青睐,在业界倍受推崇。 官网:https://spring.io/projects/spring-boot ### 3.Spring Boot的功能特性 web开发中,要引入一系列的依赖 #### 3.1 起步依赖 起步依赖本质上是一个本质上就是一个Maven坐标,整合了完成一个功能需要的所有坐标,定义了对其他库的依赖传递,这些东西加在一起即可支持某项功能,简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。 #### 3.2 自动配置 遵循约定大约配置的原则,在boot程序启动后,起步依赖中的一些bean对象会自动注入到ioc容器,不需要手动声明,简化开发。比如Spring整合Mybatis时候需要定义的bean实列:SqlSessionFactoryBean、MapperScannerConfigurer等都不需要配置了 #### 3.3 其他特性 内嵌的Tomcat、Jetty(无需部署WAR文件) 外部化配置 不需要XML配置(properties/yml) 总结:Spring Boot并不是对Spring功能上的增强,而是提供了一种快捷使用Spring的方式。 ### 4.快速创建Spring Boot项目 新建Spring Initializr项目: - Spring Boot在创建项目的时候,使用jar的打包方式 - Spring Boot的引导类是项目入口,运行main方法就可以启动项目 - Spring Boot和Spring构建的项目,业务代码编写方式完全一样 也可以使用https://start.spring.io/来构建 如果部分同学出现以下异常,可以用如下办法来解决: ~~~properties 出现无效的发行源:11 1、把11改为1.8 <properties> <java.version>1.8</java.version> </properties> 2、file - project structure - Modules -全部改为8 3、file - settings - build -complier - java complier -右侧改为8 ~~~ ### 5.起步依赖原理分析 #### 5.1 spring-boot-starter-parent ~~~xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.2</version> <relativePath/> </parent> ~~~ spring-boot-starter-parent依赖于 ~~~xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.5.2</version> </parent> ~~~ 有效的解决了寻找依赖的麻烦,同时也彻底解决了版本冲突的问题 #### 5.2 spring-boot-starter-web 程序引入spring-boot-starter-web 起步依赖,启动后,会自动往ioc容器中注入DispatcherServlet ~~~xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> ~~~ 小结: 1.在spring-boot-starter-parent中定义了各种技术的版本信息,组合了一套最优搭配的技术版本。 2.在各种starter中,定义了完成该功能需要的坐标集合,其中大部分版本信息来源于父工程。 3.我们的工程继承parent,引入了starter后,通过依赖传递,就可以获得所需要的jar包,并且不会存在版本冲突。 ### 6.Spring-Boot配置文件 #### 6.1 Spring-Boot配置文件分类 Spring-Boot是基于分类的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(yaml)进行配置,默认配置文件名称application - prpperties 键值对 ~~~properties server.port=8080 ~~~ - yml (yaml) ~~~yaml server port: 8080 ~~~ **在高级版本中,yml与yaml不能同时存在** 如果在一个项目中,同时定义了这三种配置,则prpperties 会生效。 prpperties的优先级最高,其次yml,最后yaml。 默认的配置文件名称叫做:application。 #### 6.2 YAML基本语法规则 YAML是一种直观的能够被计算机识别的数据序列化格式,YAML是以数据为核心的,比传统的xml更加简洁。 YAML文件的扩展名可以使用.yml或者.yaml。 - 大小写敏感 - 数据值前面必要要有空格,作为分隔符 - 使用缩进表示层级关系 - 相同层级的的元素左侧对齐 - #表示注释 特点:简洁,以数据为核心 #### 6.3 YAML数据格式 有三种数据格式: - 1、对象(map): 键值对的集合 ~~~yaml person: name: jiaxioaliang ~~~ - 2、数组 : 一组按次序排列的值 ~~~yml address: - shanghai - hangzhou ~~~ - 3、纯量 ~~~yaml msg1: 'hello \n springboot' #单引忽略转义字符 msg2: "hello \n springboot" #双引识别转义字符 ~~~ 注意:参数引用加${key} #### 6.4 读取配置文件内容 ##### 6.4.1 @Value ~~~java @Value("${name}") private String name; ~~~ @Value实现配置文件的数据读取,一般适用与少量的数据 ##### 6.4.2 Environment ~~~java @Autowired private Environment env; //输出 System.out.println(env.getProperty("person.age")); ~~~ ##### 6.4.3 @ConfigurationProperties 属性的配置项 是将配置内容与对象进行绑定的一种方式,编写实体类,加注解 ~~~java package cn.hxzy.erp.domain; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Data @Component //注册成为一个bean实例对象 @ConfigurationProperties(prefix = "person") //我自定义了一个对象,配置文件可以按照自定义的属性去设置。 public class Person { private String name; private int age; private String [] address; private String msg1; private String msg2; } ~~~ Controller中自动装配 ~~~java package cn.hxzy.erp.controller; import cn.hxzy.erp.domain.Person; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.env.Environment; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; @RestController public class UserController { @Autowired private Person person; @GetMapping("/getPerson") public Person getPerson(){ return person; } } ~~~ 引用完后,发现提示条,问题是在classpath路径下,没有发现注解的处理器 解决办法: ~~~xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> ~~~ 安装组件: setting-plugin-search: YAML/Ansible support ### 7.Spring Boot配置profile 我们在开发Spring Boot应用时,通常同一套程序会被安装到不同的环境,比如:开发,测试,生产等。集中数据库地址,服务端口等配置都不同,如果每次打包 时,都要修改配置文件,那么非常麻烦。profile功能就是来进行动态配置切换的。 #### 7.1 properties配置方式 - 多properties文件方式: 提供多个配置文件,每个代表一种环境 application-dev.properties 开发环境 application-test.properties 测试环境 application-prod.properties 生产环境 ~~~yml spring.profiles.active=dev #指定使用哪一套配置 ~~~ #### 7.2 yml多文档方式 在yml中使用 --- 分隔不同配置-- 配置代码段 ~~~yml --- server: port: 8083 servlet: context-path: /web1 spring: config: activate: on-profile: pro --- server: port: 8082 servlet: context-path: /web2 spring: config: activate: on-profile: test --- server: port: 8081 servlet: context-path: /web3 spring: config: activate: on-profile: dev --- spring: profiles: active: prod ~~~ ### 8.@SpringBootApplication注解分析 @SpringBootApplication包含的三个注解及其含义 第一个:@SpringBootConfiguration(在这个类的源码中又有一个Configuration的注解) @Configuration这个注解的作用就是声明当前类是一个配置类,然后Spring会自动扫描到添加了@Configuration的类,读取其中的配置信息,而@SpringBootConfiguration是来声明当前类是SpringBoot应用的配置类,项目中只能有一个。所以一般我们无需自己添加。 第二个:@EnableAutoConfiguration 开启自动配置,告诉SpringBoot基于所添加的依赖,去“猜测”你想要如何配置Spring。比如我们引入了spring-boot-starter-web,而这个启动器中帮我们添加了tomcat、SpringMVC的依赖,此时自动配置就知道你是要开发一个web应用,所以就帮你完成了web及SpringMVC的默认配置了!我们使用SpringBoot构建一个项目,只需要引入所需框架的依赖,配置就可以交给SpringBoot处理了。 第三个:@ComponentScan 配置组件扫描的指令 提供了类似与<context:component-scan>标签的作用 通过basePackageClasses或者basePackages属性来指定要扫描的包。 如果没有指定这些属性,那么将从声明这个注解的类所在的包开始,扫描包及子包 而我们的@SpringBootApplication注解声明的类就是main函数所在的启动类, 因此扫描的包是该类所在包及其子包。因此,一般启动类会放在一个比较前的包目录中。 ### 9.其他设置项 #### 9.1.打包项目 cmd 控制,cd到项目的targer目录下,输入如下,启动项目 ~~~bash java -jar xxx.jar ~~~ 指定端口: 第一种:控制台命令 ~~~shell java -jar -Dserver.port=9000 springboot-05-1.0.jar #更改启动端口 ~~~ 第二种:Edit Configurations下 ~~~ Environment下的VM options里面输入-Dserver.port=9000 ~~~ #### 9.2.修改项目的访问路径 默认值为 ~~~yaml server: servlet: context-path: / ~~~ 可以不写 设置项: properties写法: ~~~properties server.servlet.context-path=/web ~~~ yam写法: ~~~yml server: servlet: context-path: /web ~~~ ### 10.热部署 #### 10.1 导入依赖 ~~~xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> </dependency> ~~~ #### 10.2设置项 File-settings-Build-compiler ![1](Spring Boot.assets/1.png) 按住ctrl+alt+shift+/ 四个键 ,选择Registry,找三个项: ![2](Spring Boot.assets/2.png) #### 10.3 配置热更新资源 ![3](Spring Boot.assets/3.png) ![4](Spring Boot.assets/4.png)
springboot
最新推荐文章于 2024-09-14 15:39:14 发布