一、创建SpringBoot项目的方式
基于idea开发SpringBoot程序需要确保联网且能够加载到程序框架结构
基于SpringBoot官网创建项目,地址:https://start.spring.io/
网络不好时经常连接超时!!!
这里可以选择去阿里云服务下载
基于阿里云创建项目,地址:https://start.aliyun.com
可能版本较低,可以在pom文件中修改一下自己需要SpringBoot的版本
实在不行就用下面方式手写
最简SpringBoot项目与基本的maven项目的区别
最简SpringBoot程序所包含的基础文件(相比不用骨架的maven项目,只有这两处不同)
若在没有网的情况下,可以自己新建maven项目修改下面两项就可以(前提是之前有创建过,就是说本地仓库里有相关的依赖)
- pom.xml文件
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.4</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
- Application类(引导类)
package com.aaa;
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);
}
}
二、SpringBoot简介
SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程
1. Spring程序缺点
- 依赖设置繁琐
- 配置繁琐
2. SpringBoot程序优点
- 起步依赖(简化依赖配置)
- 自动配置(简化常用工程相关配置)
- 辅助功能(内置服务器,……)
- 开发
SpringBoot程序要继承spring-boot-starter-parent
- spring-boot-starter-parent中定义了若干个依赖管理
- 继承parent模块可以
避免多个依赖使用相同技术时出现依赖版本冲突
- 继承parent的形式也可以采用引入依赖的形式实现效果
三、SpringBoot项目解析
1. parent
- 仅定义未使用(<dependencies>标签中才是真正使用的依赖)
- 所有SpringBoot项目要继承的项目,定义了若干个坐标版本号(依赖管理,而非依赖),以达到
减少依赖冲突
的目的 - spring-boot-starter-parent各版本间存在着诸多坐标版本不同
2. starter
- SpringBoot中常见项目名称,定义了当前项目使用的所有依赖坐标,以达到
减少依赖配置
的目的
实际开发
- 使用任意坐标时,仅书写GAV中的G和A,V由SpringBoot提供,除非SpringBoot未提供对应版本V
- 如发生坐标错误,再指定Version(要小心版本冲突)
- 开发
SpringBoot程序
需要导入坐标时通常导入对应的starter
- 每个不同的starter根据功能不同,通常包含多个依赖坐标
使用starter可以实现快速配置的效果,达到简化配置的目的
3. 引导类
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
- SpringBoot的引导类是Boot工程的执行入口,
运行main方法
就可以启动项目(并没有像Spring项目那样,启动Tomcat呦
) - SpringBoot工程运行后初始化Spring容器,扫描引导类所在包加载bean
4. 内嵌服务器(默认为Tomcat)
spring-boot-starter-web中内嵌Tomcat
变更内嵌服务器(jetty)
变更内嵌服务器思想是去除现有服务器,添加全新的服务器
使用maven依赖管理变更起步依赖项
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!--web起步依赖环境中,排除Tomcat起步依赖-->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--添加Jetty起步依赖,版本由SpringBoot的starter控制-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
</dependencies>
运行项目:
Jetty比Tomcat更轻量级,可扩展性更强(相较于Tomcat),谷歌应用引擎(GAE)已经全面切换为Jetty
SpringBoot内置服务器
- tomcat(默认) :apache出品,粉丝多,应用面广,负载了若干较重的组件
- jetty : 更轻量级,负载性能远不及tomcat
- undertow :负载性能勉强跑赢tomcat
四、Idea中隐藏指定文件或指定类型文件
在新建SpringBoot项目时,会出现很多我们不想看见的文件和文件夹(例如.mvn mvnw mvnw.cmd .idea…),可以用下面方式隐藏掉(不显示出来),一般不要把target目录隐藏了
- Setting → File Types → Ignored Files and Folders
- 输入要隐藏的文件名,支持*号通配符
- 回车确认添加
五、SpringBoot配置文件
SpringBoot默认配置文件application.properties
1. 修改服务器端口
server.port=80
2. 关闭运行日志图标(banner)
spring.main.banner-mode=off
3. 设置日志相关
logging.level.root=debug
SpringBoot内置属性查询
SpringBoot提供了3种配置文件的格式
- properties(传统格式/默认格式)
- yml(主流格式)
- yaml
这三种配置文件是共存的,SpringBoot配置文件加载顺序
application.properties > application.yml > application.yaml
不同配置文件中相同配置
按照加载优先级相互覆盖
,不同配置文件中不同配置全部保留
常用配置文件种类
application.yml
配置文件自动提示功能消失解决方案
- Setting → Project Structure → Facets
- 选中对应项目/工程
- Customize SpringBoot
- 选择配置文件
yaml
YAML(YAML Ain’t Markup Language),一种数据序列化格式
- 优点:
– 容易阅读
– 容易与脚本语言交互
– 以数据为核心,重数据轻格式 - YAML文件扩展名
.yml(主流)
.yaml
yaml语法规则
- 大小写敏感
- 属性层级关系使用多行描述,每行结尾使用冒号结束
- 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
- 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
- # 表示注释
- 核心规则:
数据前面要加空格与冒号隔开
字面值表示方式
boolean: TRUE #TRUE,true,True,FALSE,false,False均可
float: 3.14 #6.8523015e+5 #支持科学计数法
int: 123 #0b1010_0111_0100_1010_1110 #支持二进制、八进制、十六进制
null: ~ #使用~表示null
string: HelloWorld #字符串可以直接书写
string2: "Hello World" #可以使用双引号包裹特殊字符
date: 2018-02-17 #日期必须使用yyyy-MM-dd格式
datetime: 2018-02-17T15:02:31+08:00 #时间和日期之间使用T连接,最后使用+代表时区
数组表示方式
在属性名书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔
subject:
- Java
- 前端
- 大数据
enterprise:
name: itcast
age: 16
subject:
- Java
- 前端
- 大数据
likes: [王者荣耀,刺激战场] #数组书写缩略格式
users: #对象数组格式
- name: Tom
age: 4
- name: Jerry
age: 5
users: #对象数组格式二
-
name: Tom
age: 4
-
name: Jerry
age: 5
users2: [ { name:Tom , age:4 } , { name:Jerry , age:5 } ] #对象数组缩略格式
yml数据读取
- 使用@Value读取单个数据,属性名引用方式:${一级属性名.二级属性名……}
如果数据存在多层级,依次书写层级名称即可
- 在配置文件中可以使用属性名引用方式引用属性
baseDir: /usr/local/fire
center:
dataDir: ${baseDir}/data
tmpDir: ${baseDir}/tmp
logDir: ${baseDir}/log
msgDir: ${baseDir}/msgDir
- 属性值中如果出现转义字符,需要使用双引号包裹
lesson: "Spring\tboot\nlesson"
- 在配置文件中可以使用
${属性名}
方式引用属性值- 如果属性中
出现特殊字符
,可以使用双引号包裹起来作为字符解析
封装全部数据到Environment对象
- 使用Environment对象封装全部配置信息
- 使用@Autowired自动装配数据到Environment对象中
自定义对象封装指定数据
- 使用@ConfigurationProperties注解绑定配置信息到封装类中
- 封装类需要
定义为Spring管理的bean
,否则无法进行属性注入
使用时直接@Autowired注入我们定义的类就行!!