大名鼎鼎的SpringBoot的学习开始了
学习教程是根据尚硅谷的SpringBoot核心篇和整合篇完成
只有基础知识部分,会将原教程的内容进行摘抄,来便于自己之后的记忆
SpringBoot起步
基本介绍
自己的理解
约定大于配置
SpringBoot是对SSM或者需要整合的其他框架的再次封装(比如SpringData JPA,MyBatis,Rides..等等)
砍掉了,SSM或者其他框架的复杂繁琐的配置文件。
无需手写复杂的配置文件,因为在内部SpringBoot帮助我们已经实现完毕了。
自动装箱
SpringBoot极大简化了项目中的jar包的依赖,将做各种需求需要的jar包集成在一个依赖中,需要那些模块直接引入。
总结
总的来所SpringBoot就是用来解放我们程序员的双手的,减少了之前SSM整合时候大量的冗余操作,使得Web开发变得更容易上手。
优点介绍
- 快速创建独立运行的Spring项目以及与主流框架集成
- 使用嵌入式Servlet容器,应用无需打成WAR包
- starters自动依赖与版本控制
- 大量的自动配置,简化开发,也可修改默认值
- 无需配置XML,无代码生成,开箱即用
- 准生产环境的运行时应用监控
- 与云计算的天然集成
起步环境搭建(HelloWord程序)
QuickStart
- 创建一个maven项目
- 在pom.xml文件内添加依赖
1. 父容器依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
<relativePath/>
</parent>
2. web开发依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
3. java版本锁定
<properties>
<java.version>1.8</java.version>
</properties>
- 编写主程序启动SpringBoot应用
@SpringBootApplication
public class 主程序类名 {
public static void main(String[] args) {
SpringApplication.run(主程序的类命.class, args);
}
}
这里的主程序名可以自己定义,但是最好和项目名相同。
HelloWord Creat
放置主程序
将之前编写的主程序放在项目的根目录下,也就是需要和Controller,Service,Pojo,Mapper同级或者他们的父级,这样SpringBoot会扫描主程序同级或者子级的全部包和类。
编写Controller层实现HelloWord
创建Controller包和HelloWordController类并编写逻辑代码
@Controller
public class HelloWordController() {
@RequestMapping("/hello")
@ResponseBody
public String index() {
return "Hello Word!";
}
}
HelloWord细节
场景启动器(Starter)
之前导入maven的springboot的web依赖,成为springboot的场景启动器
springboot为我们提供了很多场景启动器,用于应对各种开发场景,在我们用到的时候直接导入即可
会帮助自动依赖绝大多数的jar包
父项目管理依赖的版本
SpringBoot会继承一个父项目,这个父项目会帮我们管理绝大多数的依赖的版本,所以不用我们写版本号
内置TomCat服务器
springboot内置了Tomcat服务器,所以我们只需要编写主程序然后启动即可,springboot内部会帮助我们启动Tomcat并且运行,而且项目不再是一个war包而是一个jar包,把jar包用java -jar 执行即可启动springboot项目
SpringBoot项目创建向导的使用
Spring Initializr :SpringBoot的创建向导,可以帮助我们快速创建一个SpringBoot项目
创建步骤,很简单所以略,写写项目名,选择一下需要的Starter然后一直下一步直到完成即可
这样创建好的SpringBoot项目会帮我们配置好继承的父类容器,和之前选好的Starter依赖,还会帮助我们创建好项目的基本目录,并且附带一个主程序。
真正实现了,创建了就使用
SpringBoot的配置文件
SpringBoot的配置文件分为两种,porperties或者yml
两个文件名称必须是固定的,Application.porperties或者Application.yml
基本语法
porperties
和之前配置的方式基本相同
person.last-name=张三
yml
使用键值对,用:来分隔键和值
在表明上下级时用空格来进行对齐类似于python
server:
port: 8081
注意这里的port: 后有一个空格,并且这个空格不可以省略
写入复杂数据类型
# Map
maps: {k1: v1,k2: v2}
# List
lists:
- lisi
- zhaoliu
注意空格
自定义类的配置文件映射
对于映射配置文件有两种方式,分别是自动映射ConfigurationProperties和手动映射Value
而每种方式下都可以使用porperties文件或者yml文件
自动映射
在需要获取配置文件的属性上标注
@ConfigurationProperties(prefix = "person")
注解这里的prefix是代表前缀,表示只会使用这个前缀下的属性
不要忘记标注@Component
注解将Pojo类的管理权交给Spring不然@ConfigurationProperties
不会起作用
标注完成后,在配置文件中的使用标注的前缀,名称为属性就会被自动注入到属性中
这种注入方式支持松散绑定语法
比如类中的属性为lastName,在配置文件中我们写成last-name也可以自动的注入
手动映射
在需要映射的属性上标注
@Value("${}")
注解在注解体中使用${}写入在配置文件中的名称即可
支持spel语法,使用#{}
中可以写入java语法的表达式
不支持松散语法绑定
@ConfigurationProperties和@Value比较
比较项目 | ConfigurationProperties | Value |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个一个注入 |
松散绑定 | 支持 | 不支持 |
SpEl | 不支持 | 支持 |
JSR303校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
@propertySource&@importResource
@PropertySource
@PropertySource:加载指定的配置文件
语法:@PropertySource(value="classpath:配置文件的地址")
之前的@ConfigurationProperties是从全局配置文件中获取配置文件,没有办法获取指定配置文件的配置
@importResource
@importResource:导入spring的配置文件,并使其生效,该注解标注在配置类上
语法:``@importResource(locations={"classpath:配置文件地址"})```
但是springboot官方不推荐使用配置文件的方式驱动springboot,建议使用全注解得分方式来配置
配置类
@Configurtion:将当前类标注为配置类
@Bean:将方法的返回值添加到容器中
@Configuration
public class MyAppConfig {
// 将方法的返回值添加到容器中;容器中的默认id是方法名
@Bean
public HelloService helloService() {
System.out.println("添加组键了");
return new HelloService();
}
}
配置文件的占位符和随机数
RandomValuePropertySource
配置文件中可以使用随机数
$
$
$
${random.int(10)}
${random.int[1024,65536]}
属性配置占位符
app.name=MyApp
app.description=${app.name}is ...
可以在配置文件中引用前面用过的我属性(优先级前面配置过的这里都能用)
${app.name:默认值}这里的默认值是指前面没有这个属性,就会默认使用默认的值
Profile
Profile是Spring对不同环境提供不同配置功能的支持,可以通过激活或者指定参数的方式实现快速切换环境
多个Profile
在主配置文件编写的时候文件名可以是,application-.properties
默认使用application.properties
yml支持多文档块方式
server:
port: 8081
spring:
profiles:
active: dev
---
server:
port: 8083
spring:
profiles:
active: dev
---
server:
port: 8088
spring:
profiles:
active: prod
文档块之间用---分割
激活方式
命令行方式
启动时加上参数,--spring.profile.active=dev
配置文件方式
在application.properties或者 yml的第一个文档块中写入
spring.profiles.active=dev,这是properties语法yml注意切换语法
jvm参数
在idea中的jvm参数中写入-Dspring.profiles.active=dev
配置文件的加载位置
springboot启动会扫描一下位置的application.properties或者yml文件作为springboot的配置文件
- file:./config/
- file:./
- classpath:/config/
- classpath:/
按照优先级从高到低的顺序,所有位置的文件都会被加载,高优先级配置内容会覆盖低优先级内容
可以是用--spring.config.location=路径的方式指定配置文件
外部配置的加载顺序
- 命令行参数
- 来自java:comp/env的JNDI属性
- java系统属性
- 操作系统环境变量
- jar包外部的profile配置文件
- jar包内部的profile配置文件
- jar包外部的不带profile配置文件
- jar包内部的不带profile配置文件
- @Configuration注解类上的@PropertySource
Q.E.D.