SpringBoot day 1104
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;
}
@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(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明天见