找回密码
 立即注册
首页 业界区 业界 springboot--pagehelper整合与日志处理

springboot--pagehelper整合与日志处理

缄戈 3 天前
pagehelper整合

引入依赖
  1. <dependency>
  2.     <groupId>com.github.pagehelper</groupId>
  3.     pagehelper-spring-boot-starter</artifactId>
  4.     <version>2.1.0</version>
  5.     <scope>compile</scope>
  6. </dependency>
复制代码
编写代码
  1. @GetMapping("/list/{pageNo}")
  2. public PageInfo<Vip> findAll(@PathVariable int pageNo) {
  3.     // 设置当前页码和每页显示的条数
  4.     PageHelper.startPage(pageNo, 10);
  5.     // 查询数据
  6.     List<Vip> allVip = vipService.findAllVip();
  7.     // 将数据封装到pageinfo对象中
  8.     PageInfo<Vip> pageInfo = new PageInfo<>(allVip);
  9.     return pageInfo;
  10. }
复制代码
web层响应结果的封装

对于前后端分离的系统来说,后端会返回json数据,一般会封装一个R对象来解决统一响应格式问题。
  1. package com.ali.springboot3ssm.result;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Builder;
  4. import lombok.Data;
  5. import lombok.NoArgsConstructor;
  6. @Data
  7. @NoArgsConstructor
  8. @AllArgsConstructor
  9. @Builder // 建造模式
  10. public class R<T> {
  11.     // 响应状态码
  12.     private int code;
  13.     // 消息描述:成功或失败
  14.     private String msg;
  15.     // 响应对象:任意类型对象
  16.     private  T data;
  17.     public static <T> R<T> OK(T data) {
  18.         return R.<T>builder().code(200).msg("成功").data(data).build();
  19.     }
  20.     // 成功的方法
  21.     public static <T> R<T> OK() {
  22.         return R.<T>builder().code(200).msg("成功").build();
  23.     }
  24.     // 失败的方法
  25.     public static <T> R<T> FAIL(int code,String msg) {
  26.         return R.<T>builder().code(code).msg(msg).build();
  27.     }
  28.     public static <T> R<T> FAIL() {
  29.         return R.<T>builder().code(400).msg("失败").build();
  30.     }
  31. }
复制代码
controller中使用
  1. @GetMapping("/list/{pageNo}")
  2. public R< PageInfo<Vip>> findAll(@PathVariable int pageNo) {
  3.     // 设置当前页码和每页显示的条数,设置后会自动为查询语句加limit
  4.     PageHelper.startPage(pageNo, 10);
  5.     // 查询数据
  6.     List<Vip> allVip = vipService.findAllVip();
  7.     // 将数据封装到pageinfo对象中
  8.     PageInfo<Vip> pageInfo = new PageInfo<>(allVip);
  9.     return R.OK(pageInfo);
  10. }
复制代码
改进R对象

添加一个枚举类型
  1. package com.ali.springboot3ssm.enums;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Getter;
  4. import lombok.NoArgsConstructor;
  5. import lombok.Setter;
  6. @NoArgsConstructor
  7. @AllArgsConstructor
  8. public enum CodeEnum {
  9.     // 枚举的大括号一开始的位置必须有枚举值
  10.     //  枚举值下面如果没有代码,枚举值列表最后的“;”可以省略
  11.     //  枚举值下面如果有代码,枚举值列表最后的“;” 不可以省略
  12.     OK(200, "OK"),
  13.     FAIL(400, "失败"),
  14.     BAD_REQUEST(400, "失败"),
  15.     NOT_FOUND(400, "失败"),
  16.     INTERNAL_ERROR(400, "失败"),
  17.     MODIFICATION_ERROR(400, "失败"),
  18.     DELETION_ERROR(400, "失败"),
  19.     CREATE_ERROR(400, "失败");
  20.     @Getter
  21.     @Setter
  22.     private int code;
  23.     @Getter
  24.     @Setter
  25.     private String msg;
  26. }
复制代码
重写R类
  1. @Data
  2. @NoArgsConstructor
  3. @AllArgsConstructor
  4. @Builder // 建造模式
  5. public class R<T> {
  6.     // 响应状态码
  7.     private int code;
  8.     // 消息描述:成功或失败
  9.     private String msg;
  10.     // 响应对象:任意类型对象
  11.     private  T data;
  12.     public static <T> R<T> OK(T data) {
  13.         return R.<T>builder().code(CodeEnum.OK.getCode()).msg(CodeEnum.OK.getMsg()).data(data).build();
  14.     }
  15.     // 成功的方法
  16.     public static <T> R<T> OK() {
  17.         return R.<T>builder().code(CodeEnum.OK.getCode()).msg(CodeEnum.OK.getMsg()).build();
  18.     }
  19.     // 失败的方法
  20.     public static <T> R<T> FAIL(CodeEnum codeEnum) {
  21.         return R.<T>builder().code(codeEnum.getCode()).msg(codeEnum.getMsg()).build();
  22.     }
  23.     public static <T> R<T> FAIL() {
  24.         return R.<T>builder().code(CodeEnum.FAIL.getCode()).msg(CodeEnum.FAIL.getMsg()).build();
  25.     }
  26. }
复制代码
事务管理

spring boot自动配置了事务管理器。只需要使用@Transactional注解标注需要事务控制的方法即可。
就这么简单。
怎么打war包

修改pom文件
  1.     <packaging>war</packaging>
  2.         <dependency>
  3.             <groupId>org.springframework.boot</groupId>
  4.             spring-boot-starter-web</artifactId>
  5.             <exclusions>
  6.                 <exclusion>
  7.                     <groupId>org.springframework.boot</groupId>
  8.                     spring-boot-starter-tomcat</artifactId>
  9.                 </exclusion>
  10.             </exclusions>
  11.         </dependency>
  12.   <dependency>
  13.             <groupId>org.springframework.boot</groupId>
  14.             spring-boot-starter-tomcat</artifactId>
  15.             <scope>provided</scope>
  16.         </dependency>
复制代码
启动类继承SpringBootServletInitializer类并重写configure方法
  1. @MapperScan(basePackages = "com.ali.springboot3ssm.repository")
  2. @SpringBootApplication
  3. public class Springboot3SsmApplication extends SpringBootServletInitializer {
  4.     @Override
  5.     protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
  6.         return builder.sources(Springboot3SsmApplication.class);
  7.     }
  8.     public static void main(String[] args) {
  9.         SpringApplication.run(Springboot3SsmApplication.class, args);
  10.     }
  11. }
复制代码
日志处理

抽象的日志框架

什么时抽象的日志框架?编译阶段可以使用抽象的日志框架,能正常编译。但运行阶段必须提供具体的日志框架,目的是:具体的日志框架可灵活切换。
抽象框架有SLF4J  、   Commons Logging。这2个都可以绑定具体的日志框架,如Log4j、Log4j2、Logback、JUL
具体的日志框架

Log4j(已过时)、Log4j2(推荐)、Logback(推荐)、JUL(Java util Logging,功能有限,适合小型应用)
spring boot默认集成log back
日志级别

日志级别由低到高:

  • trace:级别最低。记录最详细信息,通常在调试时使用
  • debug:记录程序运行时的详细信息,比如变量的值,进入或退出某个方法等,主要用于开发时调试
  • info:记录一般信息,如系统启动、服务初始化完成等,表示程序运行正常。
  • warn:警告信息
  • error:错误信息
生成环境中 通常把日志级别设为info或更高级别
开发或测试环境中,设为debug或trace
spring boot默认日志级别是info
  1. @Slf4j // 这是lombok的一个注解,作用是为我们维护一个日志对象log
  2. @SpringBootApplication
  3. public class Springboot3SsmApplication {
  4.     public static void main(String[] args) {
  5.         SpringApplication.run(Springboot3SsmApplication.class, args);
  6.         // 直接使用log
  7.         log.info("日志信息");
  8.     }
  9. }
复制代码
调整日志级别
  1. # 调整日志级别
  2. logging.level.root=debug
复制代码
日志的粗细粒度
  1. # 调整根日志级别(全局的,整个项目都是这个级别)
  2. logging.level.root=debug
  3. # 为特定包设置日志级别
  4. logging.level.com.ali.springboot3ssm.controller=debug
  5. # 为特定类设置日志级别
  6. logging.level.com.ali.springboot3ssm.service.UserService=trace
  7. # 在控制台中打印sql (这个包是Mapper类所在的包)
  8. logging.level.com.ali.springboot3ssm.repository=debug
复制代码
日志输出到文件

有2种方式,这2种方式不能共存,如果同时存在,只有logging.file.name生效
  1. # 将日志文件输出到当前项目根目录下的log目录中。文件名默认spring.log  并且文件名不可修改
  2. # 路径可随便改。可以是硬盘上的任意有权限路径
  3. logging.file.path=./log/
  4. # 日志文件输出到当前项目根目录下my.log文件。路径不可修改
  5. logging.file.name=my.log
复制代码
滚动日志

防止日志无线增长,将日志文件分割成多个文件,避免单个文件过大难以处理
  1. # 此策略仅适合logback
  2. # 日志文件达到多大时进行归档,打成一个压缩包
  3. logging.logback.rollingpolicy.max-file-size=10MB
  4. # 归档日志文件总共达到多大时删除
  5. logging.logback.rollingpolicy.total-size-cap=50GB
  6. # 归档日志文件最多保留几天
  7. logging.logback.rollingpolicy.max-history=60
  8. #启动项目时是否清理归档日志文件
  9. logging.logback.rollingpolicy.clean-history-on-start=false
  10. # 归档日志文件名格式
  11. logging.logback.rollingpolicy.file-name-pattern=${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz
复制代码
日志框架切换

先排除log back 再引入新依赖
  1.                 <exclusion>
  2.                     <groupId>org.springframework.boot</groupId>
  3.                     spring-boot-starter-logging</artifactId>
  4.                 </exclusion>
  5.             </exclusions>
  6.         </dependency>
  7.         <dependency>
  8.             <groupId>org.springframework.boot</groupId>
  9.             spring-boot-starter-log4j2</artifactId>
  10.         </dependency>
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册