一.SpringBoot简介
1.1 设计初衷
目前我们开发的过程当中,一般采用一个单体应用的开发采用
SSM等框架进行开发,并在 开发的过程当中使用了大量的xml
等配置文件,以及在开发过程中使用MAVEN的构建工具来进
行构建项目,但是往往有时也会出现依赖的一些冲突,而且开
发的时候测试还需要下载和使用tomcat等等这些servlet容
器,所以开发的效率不高。
那么在以上的问题中,我们就可以使用springboot来解决这些
问题,当然他不仅仅是解决这些问题,来提高我们的开发人员
的开发效率。使用springboot:可以不需要配置,可以不需要
自己单独去获取tomcat,基本解决了包依赖冲突的问题,一键
发布等等特性。
1.2 SpringBoot介绍
Spring Boot 可以帮助我们开发 基于Spring的 、独立的 、生
产级的 应用程序。
为所有Spring开发提供更快的入门体验
开箱即用,提供了自动配置
提供一系列大型项目通用的非功能性特性
外部化配置:
嵌入式服务器
安全性
健康检查
指标:
完全不需要代码生成,也不需要XML配置
springboot 就是一个基于spring的一个框架。提供了一些
自动配置的依赖包,自动嵌入servlet的容器,简化了我们
开发的配置,提升开发人员的开发效率,并解决了包依赖
的问题。
二.SpringBoot入门案例
2.1 快速入门
创建Maven工程
2. pom.xml文件中配置起步依赖
3. 编写SpringBoot启动引导类
4. 编写HelloController
5. 访问http://localhost:8080/hello测试
创建Maven工程
pom.xml文件中配置起步依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/
4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lzw</groupId>
<artifactId>springboot_01</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!--所有的springboot工程需要继承的父工程-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.10.RELEASE</version>
</parent>
<dependencies>
<!--web开发的相关依赖 场景启动器依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
编写SpringBoot启动引导类
简单点这个就相当于Spring的配置类
/**
* @SpringBootApplication 标识是SpringBoot的启动类
*/
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
编写HelloController
@RestController
public class HelloController {
@RequestMapping("/hello")
public String Hello(){
return "hello SpringBoot";
}
}
访问http://localhost:8080/hello测试
2.2 @SpringBootApplication分析
@SpringBootApplication是一个组合注解
@SpringBootConfiguration注解作用
* @SpringBootConfiguration是对@Configuration注解
的包装,proxyBeanMethods 默认配置 true, full模式
(单例Bean)
标识是一个配置类,所以 引导类也是配置类
@ComponentScan注解作用
* 组件扫描,默认扫描的规则 引导类所在的包及其子包所
有带注解的类
2.3 添加父工程坐标分析
通过点击spring-boot-starter-parent父工程发现,它的父工
程是:
进入到spring-boot-dependencies工程中发现:声明了所有
开发中常用的依赖的版本号,自动版本号的控制(当然也可以
修改)。我们的项目需要以这个项目为父工程,这样我们就不
用操心依赖的版本问题了,需要什么依赖,直接引入坐标(不
需要添加版本)即可!
见到的spring-boot-starter-*: 第三方为我们提供的简化开发
的[场景启动器]
2.4 关于stater分析
再次从工程中 点击spring-boot-starter-web进入依赖管理:
分析spring-boot-starter-web依赖发现:内部把关于web
MVC开发所有的依赖都已经导入并且版本控制完成了,我们
只需引入 spring-boot-starter-web 这个依赖就可以实现我们
的 Web MVC的功能!
总结:
所有SpringBoot项目要继承的项目,定义了若干个坐标版
本号(依赖管理,而非依赖),以达到减少依赖冲突的目
的
starter是SpringBoot中常见项目名称,定义了当前项目使
用的所有项目坐标,以达到减少依赖配置的目的
三.SpringBoot配置文件
3.1 三种配置文件及优先级
SpringBoot是约定大于配置的,所以很多配置都有默认值。
如果想修改默认配置,可以用application.properties或
application.yml(application.yaml)自定义配置。SpringBoot
默认从Resource目录加载自定义配置文件。
配置文件必须放置在项目的类加载目录下, 并且名字必须是
application
属性配置文件:application.properties
yml文件:application.yml
yaml文件:application.yaml
文件加载的优先级
3.2 yml配置文件
yml介绍
YML文件格式是YAML(YAML Aint Markup Language)编写的
文件格式。可以直观被电脑识别的格式。容易阅读,容易与脚
本语言交互。可以支持各种编程语言(C/C++、Ruby、
Python、Java、Perl、C#、PHP)。以数据为核心,比XML更
简洁。扩展名为.yml或.yaml;
配置文件语法:
*大小写敏感
*数据值前边必须有空格,作为分隔符
*使用缩进表示层级关系
*缩进不允许使用tab,只允许空格
*缩进的空格数不重要,只要相同层级的元素左对齐即可
*数组和集合使用 “- ”表示数组每个元素。减号与数据间
空格分隔
*#’表示注释,从这个字符一直到行尾,都会被解析器忽略。
3.3 获取配置文件中值
方式1:使用@value注解的方式 只能获取简单值
方式2. 使用@ConfigurationProperties
使用@value注解的方式
@RestController
public class HelloController {
@Value("${employee.empId}")
private Integer empId;
@Value("${employee.empName}")
private String empName;
@Value("${employee.empSalary}")
private Double empSalary;
@Value("${employee.address[0]}")
private String addr;
@RequestMapping("/hello")
public String Hello(){
System.out.println(empId+"..."+empName+"..."+empSalary+"..."+addr);
return "hello SpringBoot";
}
}
使用@ConfigurationProperties
通过注解@ConfigurationProperties(prefix=''配置文件中的
key的前缀")可以将配置文件中的配置自动与实体进行映射。
使用@ConfigurationProperties方式必须提供Setter方法,使
用@Value注解不需要Setter方法。
创建一个Employee实体类:
@Component
@ConfigurationProperties(prefix = "employee")
public class Employee {
private Integer empId;
private String empName;
private Double empSalary;
private String[] address;
public Integer getEmpId() {
return empId;
}
public void setEmpId(Integer empId) {
this.empId = empId;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
public Double getEmpSalary() {
return empSalary;
}
public void setEmpSalary(Double empSalary) {
this.empSalary = empSalary;
}
public String[] getAddress() {
return address;
}
public void setAddress(String[] address) {
this.address = address;
}
@Override
public String toString() {
return "Employee{" +
"empId=" + empId +
", empName='" + empName + '\'' +
", empSalary=" + empSalary +
", address=" +
Arrays.toString(address) +
'}';
}
}
@RestController
public class HelloController {
@Autowired
private Employee employee;
@RequestMapping("/hello")
public String Hello(){
System.out.println(employee);
return "hello SpringBoot";
}
}
自定义对象封装数据解决警告
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
四.SpringBoot多环境配置
4.1 yml文件多环境开发配置
Spring Boot项目中配置文件的名称只能是application , 如果
我们把所有的配置全都写在一个配置文件中如果配置项比较
多, 配置文件就会显得比较复杂和臃肿 ! 不利于后期的项目维
护和开发
因为开发环境变化, 我们需要修改配置文件中某一个配置项
的值(比如之前是mysql数据库,切换oracle数据库)
项目开发完成需要上线了 , 需要把一些环境修改成正式环
境(开发,测试,上线,多环境切换)
解决方案 :使用profiles拆分配置
spring boot项目中允许使用多个YAML配置文件。
这些文件名称必须为application-*.yml,并且在
application.yml中激活。
application-dev.yml
application-test.yml
application-pro.yml
在application.yml激活
*添加打包插件
jar支持命令行启动需要依赖maven插件支持,请确认打包时
是否具有SpringBoot对应的maven插件
<!-- SpringBoot应用打包插件-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
在idea点击package进行打包
4.3 多环境启动命令格式
4.4 配置文件位置分类
位置:
file :config/application.yml 【最高】
file :application.yml
classpath:config/application.yml
classpath:application.yml 【最低】
作用:
1级与2级留做系统打包后设置通用属性
3级与4级用于系统开发阶段设置通用属性