基础
官方网站:https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features
概述
SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。
优点
- 自动配置(简化常用工程相关配置)
- 配置过于繁琐,使用自动配置就可以做相应的简化,但是内部还是很复杂的,后面具体展开说。
- 起步依赖(简化依赖配置)
- 依赖配置的书写简化就是靠这个起步依赖达成的。
- 辅助功能(内置服务器,......)
起步依赖
- starter
- SpringBoot中常见项目名称,定义了当前项目使用的所有项目坐标,以达到减少依赖配置的目的
- parent
- 所有SpringBoot项目要继承的项目,定义了若干个坐标版本号(依赖管理,而非依赖),以达到减少依赖冲突的目的
- spring-boot-starter-parent(2.5.0) 与 spring-boot-starter-parent (2.4.6) 共计57处坐标版本不同(提醒我们要注意究竟使用哪个版本的springboot)
- 实际开发
- 使用任意坐标时,仅书写GAV中的G和A,V由SpringBoot提供
- 如发生坐标错误,再指定version (要小心版本冲突)
- 辅助功能
- tomcat
- 等等...
- 启动方式
- 在标注了@SpringBootApplication注解的类启动
- springboot在创建项目时,采用jar的打包方式
- springboot的引导类时项目的入口,运行main方法就可以启动项目
- 使用maven依赖管理变更起步依赖项
- 以tomcat更改为jetty为例
- 在spring-boot-starter-web依赖里面排除tomcat依赖
<exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions>
- 添加jetty服务器依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jetty</artifactId></dependency>
- Jetty比Tomcat更轻量级,可扩展性更强(相较于Tomcat),但超大型应用还是使用Tomcat比较好
基础配置
配置格式
- 修改服务器端口
- application.properties
server.port=80
- application.yml
server port81
- application.yaml
server port82
- 当这三个文件都同时配置了服务器端口配置时,springboot默认使用顺序为:properties > yml > yaml
- 不同配置文件中相同配置按照加载优先级相互覆盖,不同配置文件中不同配置全部保留
- 设置控制台日志输出logging级别
logging level root warn # 警告信息# root: info # 默认# root: debug # 全部信息
- yaml
- 是一种数据序列化格式
- 优点
- 容易阅读
- 容易与脚本语言交互
- 以数据为中心,重数据轻格式
- yaml文件扩展名
- yml (主流)
- yaml
- 数组格式
enterprise name uncmin age1 phone10086 likes mybatis spring springmvc
yaml数据读取
读取单一数据
- 使用@Value读取单个数据,属性名引用方式:${一级属性名.二级属性名.三级属性名}
配置文件:
logging level root warn # 警告信息enterprise name uncmin age1 phone10086 likes mybatis spring springmvc
模型类:
"${enterprise.name}") (privateStringname; "${logging.level.root}") (privateStringlogLevel; "${enterprise.likes[2]}") (privateStringlikes_03;
读取全部数据
- 获取数据使用 getProperties(String) 方法
//加载环境里的全部变量privateEnvironmentenvironment; "/{id}") (publicStringgetById(Integerid){ System.out.println(environment.getProperty("enterprise.name")); System.out.println(environment.getProperty("logging.level.root")); System.out.println(environment.getProperty("enterprise.likes[2]")); return"{'module':'book-getById'}"; }
读取对象数据
- 注解@ConfigurationProperties指定该对象加载哪一组yaml中配置的信息
- 封装类需要定义为Spring管理的bean,否则无法进行属性注入
//让spring管理prefix="enterprise") //配置哪个属性加载到实体类中 (publicclassEnterprise { privateStringname; privateIntegerage; privateIntegerphone; privateString[] likes; } //加载自定义的实体类的变量privateEnterpriseenterprise; "/{id}") (publicStringgetById(Integerid){ System.out.println(enterprise); return"{'module':'book-getById'}"; }
yaml文件中的数据引用
如果在书写yaml数据时,经常出现如下现象,比如很多个文件都具有相同的目录前缀
center dataDir /usr/local/fire/data tmpDir /usr/local/fire/tmp logDir /usr/local/fire/log msgDir /usr/local/fire/msgDir
或者
center dataDir D /usr/local/fire/data tmpDir D /usr/local/fire/tmp logDir D /usr/local/fire/log msgDir D /usr/local/fire/msgDir
这时可以使用引用格式来定义数据,其实就是搞了个变量名,然后引用变量,格式如下:
baseDir /usr/local/fire center dataDir $ baseDir /data tmpDir $ baseDir /tmp logDir $ baseDir /log msgDir $ baseDir /msgDir
注意事项:在书写字符串时,如果需要使用转义字符,需要将数据字符串使用双引号包裹起来
lesson"Spring\tboot\nlesson"
多环境启动
- 常用格式
# 启动指定环境spring profiles active test ---# 生产环境spring profiles pro server port81---# 开发环境spring profiles dev server port80---# 测试环境spring profiles test server port82
- properties多文件多环境启动
由于不常用,而且上传照片困难,暂时不演示
多环境启动命令格式
如果将程序打包交给测试人员启动,,测试人员需要更改环境配置,应该怎样操作?
- 先使用maven执行clean指令,再执行package指令,然后打开打包的文件所在位置在地址栏中输入cmd,回车
- 输入指令,(自动补全按tab键),回车
java -jar springboot-01-quickstart-0.0.1-SNAPSHOT.jar
ctrl+c 结束程序
- 测试人员更改配置
- 换指定环境,输入指令
java -jar springboot-01-quickstart-0.0.1-SNAPSHOT.jar --spring.profiles.active=test
- 更改临时端口号,输入指令
springboot-01-quickstart\target>java -jar springboot-01-quickstart-0.0.1-SNAPSHOT.jar --server.port=88
- 可以同时添加以上指令!
多环境开发控制(maven和springboot配置类的兼容问题)
在测试时,如果maven和springboot同时配置了环境选择时,应按maven的配置为先!
下面演示maven控制版本,然后springboot加载maven中设置的版本
- maven中设置多环境属性
<profiles><!--开发环境--><profile><id>dev</id><properties><!--与springboot配置类里面的环境名对应上--><profile.active>dev</profile.active></properties></profile><!--生产环境--><profile><id>pro</id><properties><profile.active>pro</profile.active></properties><activation><!--设置为默认环境--><activeByDefault>true</activeByDefault></activation></profile><!--测试环境--><profile><id>test</id><properties><profile.active>test</profile.active></properties></profile></profiles>
- springboot中引用maven属性
spring profiles# 加载maven中设置的版本 active $ profile.active---# 用来区分模块的# 生产环境spring profiles pro server port81---# 开发环境spring profiles dev server port80---# 测试环境spring profiles test server port82
- 执行maven打包命令
- 先执行一次clean指令
- 添加一个设置配置类能读取maven属性的插件
<!--设置配置类能读取maven属性的插件--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>3.2.0</version><configuration><encoding>utf-8</encoding><useDefaultDelimiters>true</useDefaultDelimiters></configuration></plugin>
- 处理资源导出问题
<!--在build中配置resources,来防止我们资源导出失败问题--><resources><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.yml</include><include>**/*.yaml</include></includes><filtering>true</filtering></resource><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.yml</include><include>**/*.yaml</include></includes><filtering>true</filtering></resource></resources>
- 执行package指令
- 在测试环境查看使用环境
配置文件分类
- springboot中4种配置文件
- 测试环境
- 1级:target文件夹里面,config文件夹里的application.yml
- 2级:target文件夹里的application.yml
- 开发环境
- 3级:resources文件夹里面,config文件夹里的application.yml
- 4级:resources文件夹里的application.yml
- 作用
- 1级与2级留做系统打包后设置通用属性
- 3级与4级用于系统开发阶段设置通用属性
整合第三方技术
SSM案例整合
步骤
- pom.xml
- 配置起步依赖
在创建基于springboot的ssm工程时需要选上mysql,mybatis,springweb的依赖 - 必要的资源依赖
druid,lombok等
- application.yml
server:
port: 80
---
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/spring-study-jdbc #?serverTimezone=UTC
username: root
password: 111111
type: com.alibaba.druid.pool.DruidDataSource
- 配置类
springboot已经帮我们做了这些工作,可以全部删除 - dao
在dao接口上加上@Mapper注解,其他基本不变 - 测试类
测试类上加上@SpringBootTest的注解,将导入@Test注解的包更换为springboot支持的@Test注解的包 - 页面
将所有资源放置在resources目录下的static目录里面,更改一下book.html里面的请求url
SSMP案例整合
- pom.xml配置起步依赖
- 创建springboot项目时,勾选web、mybatisplus、mysql依赖
- 导入druid、lombok
- application.yml
设置数据源接口、端口、框架技术相关设置等 - dao
继承BaseMapper、设置@Mapper - service
调用数据层接口或使用mybatisplus提供的接口快速开发 - controller
基于Restful开发,使用apifox测试 - 页面
放置在resources目录下的static目录中