栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Spring Boot学习(5)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Boot学习(5)

Spring Boot学习(5)

使用Spring Initializr创建项目 勾选Spring web 和 Mysql Driver 额外加入依赖Druid Mybatis-Plus

XML

    com.alibaba
    druid-spring-boot-starter
    1.2.8



    com.baomidou
    mybatis-plus-boot-starter
    3.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;
    }
}
  1. 设计同一个返回值结果类型便于前端开发读取数据
  2. 返回值结果类型可以根据需求自行设定,没有固定格式
  3. 返回值结果模型类用于后端与前端进行数据格式同意, 也称为前后端数据协议
异常消息处理

根据前文我们定义的前后端数据协议 如果遇到程序出现异常 会给前端返回一个异常数据 这并不在前后端数据协议定义范围 如果要进行消息处理 就必须进行异常消息处理

  1. 这里就要使用注解**@RestControllerAdvice**(控制器增强)定义SpringMVC异常处理器来处理异常的

  2. @ExceptionHandler(异常处理器)必须被扫描加载,否则无法生效

  3. 表现层返回结果中模型类中添加消息属性用来传递消息到页面

    JAVA
    //作为springmvc异常处理
    @RestControllerAdvice
    public class ProjectExceptionAdvice {
        //拦截所有的异常信息
        @ExceptionHandler
        public Result doException(Exception ex){
            //记录日志
            //通知运维
            //通知开发
            return new Result("服务器故障,请稍后再试");
        }
    }
    
[运维部分](file:///D:/BaiduNetdiskDownload/运维实用篇-资料/PPT/SpringBoot运维实用篇(发布版).pdf)

临时属性
  1. 使用命令行dos命令运行springboot工程是可以使用临时属性替换配置文件中的属性
  2. 临时属性添加方式: java -jar 工程名.jar –属性名=值
  3. 多个临时属性之间使用空格分隔
  4. 临时属性必须是当前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级常用于项目经理进行整体项目属性调控

自定义配置文件
  • 通过启动参数加载配置文件(无需书写配置文件扩展名)
  • 通过启动参数加载指定文件路径下的配置文件

  • 通过启动参数加载指定文件路径下的配置文件时可以加载多个配置

重要说明
  • 单服务器项目:使用自定义配置文件需求较低
  • 多服务器项目:使用自定义配置文件需求较高,将所有配置放置在一个目录中,统一管理
  • 基于SpringCloud技术,所有的服务器将不再设置配置文件,而是通过配置中心进行设定,动态加载配置信息
多环境开发(YAML版) 单配置文件版本
  • 多环境开发需要设置若干种常用环境,例如开发 生产 测试环境

  • yaml格式中设置多环境使用"---"区分环境设置边界

  • 每种环境的区别在于加载的配置属性不同

  • 启用某种环境时需要指定启动时使用该环境

  • #生成环境
    spring:
      config:
        activate:
          on-profile: pro
    
  • ```yml
    #指定环境
    spring:
    profiles:
    active: test

    PLAINTEXT
    
      实例
    
    ```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
    

多配置文件版本
  1. 主启动配置文件 application.yml
YML
spring:
  profiles:
    active: test
  1. 环境分类配置文件application-pro.yml
YML
server:
  port: 82
  1. 环境分类配置文件application-dev.yml
YML
server:
  port: 81
  1. 环境分类配置文件application-dev.yml
YML
server:
  port: 83

环境的分类多配置文件其实就是在application后加上-环境名称即可

  • 可以独立配置文件定义环境属性
  • 独立配置文件便于线上系统维护更新并保障系统安全性
多环境开发(Properties)

步骤与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方可生效
  1. 需要在Maven的pom.xml中配置多环境属性值
XML


    
        env_dev
        
            dev
        
        
            true
        
    
    
        env_pro
        
            pro
        
    

  1. 在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重写后的信息,名称过长时,简化包名书写为首字母,甚至直接删除
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/914033.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号