ok了家人们这周学习SpringBoot的使用,和深入了解,letgo
一.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 快速入门
1. 创建 Maven 工程2. pom.xml 文件中配置起步依赖3. 编写 SpringBoot 启动引导类4. 编写 HelloController5. 访问 http://localhost:8080/hello 测试
- 创建Maven工程
<groupId>com.cjx</groupId><artifactId>springBoot_02</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties>
- 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.cjx</groupId><artifactId>springBoot_02</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</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><!-- web开发的相关依赖 场景启动器依赖 --><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies></project>
- 编写SpringBoot启动引导类
package com.cjx;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@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.1.1 第二种创建springboot的方法,(2024版IDEA)
我们在创建一个新的module,如图所示
package name是创建之后给你自带的文件夹可以选择删除
packaging:是选择打包方式,(项目完成后选择打成war包还是jar包去测试)
我们只留下src和pom.xml,其他没什么用
之后我们可以看到Java下有一个application,springboot引导类
有两种创建方式
如果创建的时候报错了,试试换一个server URL,其他博主应该有教程
应为这个地址是国外的,可以试试国内的地址(aliyun)等等
2.2 @SpringBootApplication分析
- @SpringBootApplication是一个组合注解
- @SpringBootConfiguration注解作用
- @SpringBootConfiguration 是对 @Configuration 注解的包装, proxyBeanMethods 默认配置 true , full 模式(单例 Bean )
- 标识是一个配置类,所以 引导类也是配置类
-
- @ComponentScan注解作用
- 组件扫描,默认扫描的规则 引导类所在的包及其子包所有带注解的类
-
2.3 添加父工程坐标分析
通过点击 spring-boot-starter-parent 父工程发现,它的父工
程是:
<!-- 所有的springboot项目都要继承的父工程 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.10.RELEASE</version></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
server . port = 8081
-
yml文件:application.yml
server :port : 8082
- yaml文件:application.yaml
server :port : 8083
- 文件加载的优先级
application.properties > application.yml > application.yaml
3.2 yml配置文件
-
yml介绍
YML 文件格式是 YAML(YAML Aint Markup Language) 编写的文件格式。可以直观被电脑识别的格式。容易阅读,容易与脚本语言交互。可以支持各种编程语言 (C/C++ 、 Ruby 、Python 、 Java 、 Perl 、 C# 、 PHP) 。以数据为核心, 比 XML 更简洁 。扩展名为 .yml 或 .yaml ;
- 配置文件语法
- 大小写敏感
- 数据值前边必须有空格,作为分隔符
- 使用缩进表示层级关系
- 缩进不允许使用tab,只允许空格
- 数组和集合使用 “- ”表示数组每个元素。减号与数据间空格分隔
- #’表示注释,从这个字符一直到行尾,都会被解析器忽略。
employee :empId : 1empName : zhangsanempSalary : 200.0address :- 长沙市- 常德市- 岳阳市
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 address;@RequestMapping("/hello")public String hello(String name){System.out.println(empId+"..."+empName+"..."+empSalary+"..."+address);return "hello"+name;
- 使用@ConfigurationProperties
通过注解 @ConfigurationProperties(prefix='' 配置文件中的key 的前缀 ") 可以将配置文件中的配置自动与实体进行映射。使用 @ConfigurationProperties 方式必须提供 Setter 方法,使用 @Value 注解不需要 Setter 方法。
package com.cjx.pojo;import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;import java.util.Arrays;@Component
@ConfigurationProperties(prefix = "employee")
public class Employee {private Integer empId;private String empName;private Double empSalary;private String[] address;public void setEmpId(Integer empId) {this.empId = empId;}public void setEmpName(String empName) {this.empName = empName;}public void setEmpSalary(Double empSalary) {this.empSalary = empSalary;}public void setAddress(String[] address) {this.address = address;}@Overridepublic String toString() {return "Employee{" +"empId=" + empId +", empName='" + empName + '\'' +", empSalary=" + empSalary +", address=" + Arrays.toString(address) +'}';}
}
@RestController
public class HelloController {@Autowiredprivate Employee employee;@RequestMapping("/hello")public String hello(String name){System.out.println(employee);System.out.println("name"+"~"+name);return "hello"+name;}
}
自定义对象封装数据解决警告<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configurationprocessor</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
server :port : 8081
- application-test.yml
server :port : 8082
- application-pro.ym
server :port : 8083
- 在application.yml激活
spring :profiles :active : test
4.2 SpringBoot项目打包
- 添加打包插件
jar 支持命令行启动需要依赖 maven 插件支持,请确认打包时是否具有 SpringBoot 对应的 maven 插件
<!-- SpringBoot应用打包插件-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-mavenplugin</artifactId>
</plugin>
</plugins>
</build>
- 在idea点击package进行打包
4.3 多环境启动命令格式
java -jar springboot_01-1.0-SNAPSHOT.jarjava -jar springboot_01-1.0-SNAPSHOT.jar --spring.profiles.active=projava -jar springboot_01-1.0-SNAPSHOT.jar --spring.profiles.active=pro --server.port=8084
4.4 配置文件位置分类
位置:
- file :config/application.yml 【最高】
- file :application.yml
- classpath:config/application.yml
- classpath:application.yml 【最低】
作用:
1级与 2 级留做系统打包后设置通用属性
3级与 4 级用于系统开发阶段设置通用属性
五.SpringBoot静态资源支持【了解】
在springboot中就定义了静态资源的默认查找路径:
- classpath:/META-INF/resources/
- classpath:/resources/
- classpath:/static/
- classpath:/public/
我们习惯会把静态资源放在classpath:/static/ 目录下
ok了家人们byebye明天见