使用Spring Initializr创建项目 勾选Spring web 和 Mysql Driver 额外加入依赖Druid Mybatis-Plus
XMLcom.alibaba druid-spring-boot-starter1.2.8 com.baomidou mybatis-plus-boot-starter3.5.0
创建数据库表 创建实体类
JAVA
@Data
@AllArgsConstructor
@NoArgsConstructor
//@TableName("tbl_book")(这里可以选择在application.yml文件中配置mybaits-plus中的table_prefix=tbl_)
public class Book {
@TableId(value = "id",type = IdType.AUTO)
private Integer id;
private String type;
private String name;
private String description;
}
YML
server:
port: 80
spring:
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/my_db?serverTimezone=UTC
username: root
password: devil
mybatis-plus:
global-config:
db-config:
table-prefix: tbl_
id-type: auto
# mybatis-plus 日志配置
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
表现层消息一致性处理
- 设计表现层返回结果的模型类,用于后端与前端进行数据格式的同意, 也称为前后端数据协议
JAVA
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result {
private Boolean flag;
private Object data;
private String msg;
public Result(Boolean flag){
this.flag = flag;
}
public Result(Boolean flag, Object data) {
this.flag = flag;
this.data = data;
}
public Result(Boolean flag,String msg){
this.flag = flag;
this.msg = msg;
}
public Result(String msg){
this.flag = false;
this.msg = msg;
}
}
- 设计同一个返回值结果类型便于前端开发读取数据
- 返回值结果类型可以根据需求自行设定,没有固定格式
- 返回值结果模型类用于后端与前端进行数据格式同意, 也称为前后端数据协议
根据前文我们定义的前后端数据协议 如果遇到程序出现异常 会给前端返回一个异常数据 这并不在前后端数据协议定义范围 如果要进行消息处理 就必须进行异常消息处理
-
这里就要使用注解**@RestControllerAdvice**(控制器增强)定义SpringMVC异常处理器来处理异常的
-
@ExceptionHandler(异常处理器)必须被扫描加载,否则无法生效
-
表现层返回结果中模型类中添加消息属性用来传递消息到页面
JAVA //作为springmvc异常处理 @RestControllerAdvice public class ProjectExceptionAdvice { //拦截所有的异常信息 @ExceptionHandler public Result doException(Exception ex){ //记录日志 //通知运维 //通知开发 return new Result("服务器故障,请稍后再试"); } }
- 使用命令行dos命令运行springboot工程是可以使用临时属性替换配置文件中的属性
- 临时属性添加方式: java -jar 工程名.jar –属性名=值
- 多个临时属性之间使用空格分隔
- 临时属性必须是当前boot工程支持的属性,否则设置无效
- SpringBoot中4级配置文件(级别越高 优先级越高)
1级: file :config/application.yml 【最高】
2级: file :application.yml
3级:classpath:config/application.yml
4级:classpath:application.yml 【最低】
- 作用:
自定义配置文件1级与2级留做系统打包后设置通用属性,1级常用于运维经理进行线上整体项目部署方案调控
3级与4级用于系统开发阶段设置通用属性,3级常用于项目经理进行整体项目属性调控
- 通过启动参数加载配置文件(无需书写配置文件扩展名)
- 通过启动参数加载指定文件路径下的配置文件
- 通过启动参数加载指定文件路径下的配置文件时可以加载多个配置
多环境开发(YAML版) 单配置文件版本
- 单服务器项目:使用自定义配置文件需求较低
- 多服务器项目:使用自定义配置文件需求较高,将所有配置放置在一个目录中,统一管理
- 基于SpringCloud技术,所有的服务器将不再设置配置文件,而是通过配置中心进行设定,动态加载配置信息
-
多环境开发需要设置若干种常用环境,例如开发 生产 测试环境
-
yaml格式中设置多环境使用"---"区分环境设置边界
-
每种环境的区别在于加载的配置属性不同
-
启用某种环境时需要指定启动时使用该环境
-
#生成环境 spring: config: activate: on-profile: pro -
```yml
#指定环境
spring:
profiles:
active: testPLAINTEXT 实例 ```yml #应用环境 #公共配置 spring: profiles: active: test --- #设置环境 #生成环境 spring: config: activate: on-profile: pro server: port: 81 --- #开发环境 spring: profiles: active: dev server: port: 82 --- #测试环境 spring: config: activate: on-profile: test server: port: 83
多配置文件版本
- 主启动配置文件 application.yml
YML
spring:
profiles:
active: test
- 环境分类配置文件application-pro.yml
YML server: port: 82
- 环境分类配置文件application-dev.yml
YML server: port: 81
- 环境分类配置文件application-dev.yml
YML server: port: 83
环境的分类多配置文件其实就是在application后加上-环境名称即可
- 可以独立配置文件定义环境属性
- 独立配置文件便于线上系统维护更新并保障系统安全性
步骤与yml版一致 只是由于与yml文件的格式不同导致两者的格式不同
- 但properties版本支支持多文件模式 不支持单一配置文件多环境模式
-
根据功能对配置文件中的信息进行拆分,并制作成独立的配置文件,命名规则如下(实际开发中)
- applicaiton-devDB.yml
- applicaiton-devRedis.yml
- applicaiton-devMVC.yml
-
使用include属性在激活指定环境的情况下,同时对多个环境进行加载使其生效,多个环境间使用逗号分隔(引入一个环境配置文件组)
YML spring: profiles: active: dev include: devDB,devRedis,devMVC注意: 当主环境有相同属性时,当主环境生效;其他环境中有相同属性时,最后加载的环境属性生效
- 从SpringBoot2.4版本开始使用group替代了include属性,降低了配置书写量
- 使用group属性定义多种主环境与子环境的包含关系
YML
spring:
profiles:
active: dev
group:
"dev": devDB,devRedis,devMVC
"pro": proDB,proRedis,proMVC
实际开发中 常使用"group"
多环境开发中使用group属性设置配置文件分组,便于线上维护管理
多环境开发控制SpringBoot在工作时是基于maven坐标运行的
- 当Maven与SpringBoot同时对多环境进行控制时,以Maven为主,SpringBoot使用@..@占位符读取Maven对应的配置属性值
- 基于SpringBoot读取Maven配置属性的前提下,如果在Idea下测试工程时p吗.xml每次更新需要手动compile或是刷新Maven方可生效
- 需要在Maven的pom.xml中配置多环境属性值
XMLenv_dev true dev env_pro pro
- 在SpringBoot配置文件中指定获取Maven中活动的profile
YML
spring:
profiles:
active: @profile.active@
日志 日志基础操作
- 日志(log)作用
- 编程期调试diamagnetic
- 运营期记录信息
- 记录日常运营重要信息(峰值流量 平均响应时长……)
- 记录应用报错信息(错误堆栈)
- 记录运维过程数据(扩容 宕机 报警….)
JAVA
@SuppressWarnings("all")
@RestController
@RequestMapping("/log")
public class Controller3 {
//创建记录日志的对象
private static final Logger log = LoggerFactory.getLogger(Controller3.class);
@GetMapping
public String doLog(){
log.debug("debug...");
log.error("error...");
log.info("infor...");
log.warn("warn...");
return "SpringBoot2 正在运行....";
}
}
日志级别(从上往下依次升高)
- TRACE:运行堆栈信息,使用率低
- DEBUG:程序员调试代码使用
- INFO:记录运维过程数据
- WARN:记录运维过程报警数据
- ERROR:记录错误堆栈信息
- FATAL:灾难信息,合并计入ERROR
设置日志输出级别 可以在springboot配置文件中设置
YML
# 开启debug模式,输出调试信息,常用于检查系统运行状况
debug: true
# 设置日志级别,root表示根节点,即整体应用日志级别
logging:
level:
root: debug
设置日志组,控制指定包对应的日志输出级别,也可以直接空值指定包对应的日志输出级别
YML
logging:
# 设置日志组
group:
# 自定义组名,设置当前组中所包含的包
ebank: com.itheima.controller
level:
root: warn
# 为对应组设置日志级别
ebank: debug
# 为对包设置日志级别
com.itheima.controller: debug
优化日志对象创建代码
- 使用lombok提供的注解**@Slf4j**简化开发,减少日志对象的声明操作
JAVA
@Slf4j
@SuppressWarnings("all")
@RestController
@RequestMapping("/log")
public class Controller3 {
@GetMapping
public String doLog(){
log.debug("debug...");
log.error("error...");
log.info("infor...");
log.warn("warn...");
return "SpringBoot2 正在运行....";
}
}
日志输出格式
PLAINTEXT
2022-01-26 14:07:21.604 INFO 1416 --- [ main] c.a.d.s.b.a.DruidDataSourceAutoConfigure : Init DruidDataSource
2022-01-26 14:07:21.700 INFO 1416 --- [ main] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} inited
上述即为日志的默认结构 分为 时间 日志级别 PID 所属线程 所属类/接口名 日志信息
- PID:进程ID,用于表明当前操作所处的进程,当多服务同时记录日志时,该值可用于协助程序员调试程序
.warn(“warn…”);
return “SpringBoot2 正在运行…”;
}
}
##### 日志输出格式
PLAINTEXT
2022-01-26 14:07:21.604 INFO 1416 — [ main] c.a.d.s.b.a.DruidDataSourceAutoConfigure : Init DruidDataSource
2022-01-26 14:07:21.700 INFO 1416 — [ main] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} inited
上述即为日志的默认结构 分为 **时间 日志级别 PID 所属线程 所属类/接口名 日志信息** - PID:进程ID,用于表明当前操作所处的进程,当多服务同时记录日志时,该值可用于协助程序员调试程序 - 所属类/接口名:当前显示信息为SpringBoot重写后的信息,名称过长时,简化包名书写为首字母,甚至直接删除



