springboot--pagehelper整合与日志处理
pagehelper整合
引入依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>2.1.0</version>
<scope>compile</scope>
</dependency>
编写代码
@GetMapping("/list/{pageNo}")
public PageInfo<Vip> findAll(@PathVariable int pageNo) {
// 设置当前页码和每页显示的条数
PageHelper.startPage(pageNo, 10);
// 查询数据
List<Vip> allVip = vipService.findAllVip();
// 将数据封装到pageinfo对象中
PageInfo<Vip> pageInfo = new PageInfo<>(allVip);
return pageInfo;
}
web层响应结果的封装
对于前后端分离的系统来说,后端会返回json数据,一般会封装一个R对象来解决统一响应格式问题。
package com.ali.springboot3ssm.result;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder // 建造模式
public class R<T> {
// 响应状态码
private int code;
// 消息描述:成功或失败
private String msg;
// 响应对象:任意类型对象
private T data;
public static <T> R<T> OK(T data) {
return R.<T>builder().code(200).msg("成功").data(data).build();
}
// 成功的方法
public static <T> R<T> OK() {
return R.<T>builder().code(200).msg("成功").build();
}
// 失败的方法
public static <T> R<T> FAIL(int code,String msg) {
return R.<T>builder().code(code).msg(msg).build();
}
public static <T> R<T> FAIL() {
return R.<T>builder().code(400).msg("失败").build();
}
}
controller中使用
@GetMapping("/list/{pageNo}")
public R< PageInfo<Vip>> findAll(@PathVariable int pageNo) {
// 设置当前页码和每页显示的条数,设置后会自动为查询语句加limit
PageHelper.startPage(pageNo, 10);
// 查询数据
List<Vip> allVip = vipService.findAllVip();
// 将数据封装到pageinfo对象中
PageInfo<Vip> pageInfo = new PageInfo<>(allVip);
return R.OK(pageInfo);
}
改进R对象
添加一个枚举类型
package com.ali.springboot3ssm.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@NoArgsConstructor
@AllArgsConstructor
public enum CodeEnum {
// 枚举的大括号一开始的位置必须有枚举值
// 枚举值下面如果没有代码,枚举值列表最后的“;”可以省略
// 枚举值下面如果有代码,枚举值列表最后的“;” 不可以省略
OK(200, "OK"),
FAIL(400, "失败"),
BAD_REQUEST(400, "失败"),
NOT_FOUND(400, "失败"),
INTERNAL_ERROR(400, "失败"),
MODIFICATION_ERROR(400, "失败"),
DELETION_ERROR(400, "失败"),
CREATE_ERROR(400, "失败");
@Getter
@Setter
private int code;
@Getter
@Setter
private String msg;
}
重写R类
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder // 建造模式
public class R<T> {
// 响应状态码
private int code;
// 消息描述:成功或失败
private String msg;
// 响应对象:任意类型对象
private T data;
public static <T> R<T> OK(T data) {
return R.<T>builder().code(CodeEnum.OK.getCode()).msg(CodeEnum.OK.getMsg()).data(data).build();
}
// 成功的方法
public static <T> R<T> OK() {
return R.<T>builder().code(CodeEnum.OK.getCode()).msg(CodeEnum.OK.getMsg()).build();
}
// 失败的方法
public static <T> R<T> FAIL(CodeEnum codeEnum) {
return R.<T>builder().code(codeEnum.getCode()).msg(codeEnum.getMsg()).build();
}
public static <T> R<T> FAIL() {
return R.<T>builder().code(CodeEnum.FAIL.getCode()).msg(CodeEnum.FAIL.getMsg()).build();
}
}
事务管理
spring boot自动配置了事务管理器。只需要使用@Transactional注解标注需要事务控制的方法即可。
就这么简单。
怎么打war包
修改pom文件
<!-- 打包方式修改为war-->
<packaging>war</packaging>
<!-- 排除tomcat-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 添加tomcat依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<!-- provided:表示这个依赖不会被打到war包中,只是编译时使用-->
<scope>provided</scope>
</dependency>
启动类继承SpringBootServletInitializer类并重写configure方法
@MapperScan(basePackages = "com.ali.springboot3ssm.repository")
@SpringBootApplication
public class Springboot3SsmApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(Springboot3SsmApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(Springboot3SsmApplication.class, args);
}
}
日志处理
抽象的日志框架
什么时抽象的日志框架?编译阶段可以使用抽象的日志框架,能正常编译。但运行阶段必须提供具体的日志框架,目的是:具体的日志框架可灵活切换。
抽象框架有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
@Slf4j // 这是lombok的一个注解,作用是为我们维护一个日志对象log
@SpringBootApplication
public class Springboot3SsmApplication {
public static void main(String[] args) {
SpringApplication.run(Springboot3SsmApplication.class, args);
// 直接使用log
log.info("日志信息");
}
}
调整日志级别
# 调整日志级别
logging.level.root=debug
日志的粗细粒度
# 调整根日志级别(全局的,整个项目都是这个级别)
logging.level.root=debug
# 为特定包设置日志级别
logging.level.com.ali.springboot3ssm.controller=debug
# 为特定类设置日志级别
logging.level.com.ali.springboot3ssm.service.UserService=trace
# 在控制台中打印sql (这个包是Mapper类所在的包)
logging.level.com.ali.springboot3ssm.repository=debug
日志输出到文件
有2种方式,这2种方式不能共存,如果同时存在,只有logging.file.name生效
# 将日志文件输出到当前项目根目录下的log目录中。文件名默认spring.log 并且文件名不可修改
# 路径可随便改。可以是硬盘上的任意有权限路径
logging.file.path=./log/
# 日志文件输出到当前项目根目录下my.log文件。路径不可修改
logging.file.name=my.log
滚动日志
防止日志无线增长,将日志文件分割成多个文件,避免单个文件过大难以处理
# 此策略仅适合logback
# 日志文件达到多大时进行归档,打成一个压缩包
logging.logback.rollingpolicy.max-file-size=10MB
# 归档日志文件总共达到多大时删除
logging.logback.rollingpolicy.total-size-cap=50GB
# 归档日志文件最多保留几天
logging.logback.rollingpolicy.max-history=60
#启动项目时是否清理归档日志文件
logging.logback.rollingpolicy.clean-history-on-start=false
# 归档日志文件名格式
logging.logback.rollingpolicy.file-name-pattern=${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz
日志框架切换
先排除log back 再引入新依赖
<!-- 排除默认日志依赖-->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 引入log4j依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
本文来自博客园,作者:NE_STOP,转载请注明原文链接:https://www.cnblogs.com/alineverstop/p/19552193
浙公网安备 33010602011771号