谷粒学院(三)讲师管理模块(后端) | swagger | 统一日志 | 统一返回结果
文章目录
- 一、讲师查询功能
- 二、讲师逻辑删除功能
- 三、配置Swagger2
- 四、统一返回结果对象
- 1、统一返回数据格式
- 2、统一结果返回类
- 3、统一返回结果的使用
- 五、讲师分页查询
- 六、讲师条件查询带分页
- 七、自动填充封装
- 八、讲师添加功能
- 九、讲师修改功能
- 十、统一异常处理
- 十一、统一日志处理
- 1、配置日志级别
- 2、Logback日志
一、讲师查询功能
1、编写查询 controller 代码内容
@RestController
@RequestMapping("/eduservice/teacher")
public class EduTeacherController {@Autowiredprivate EduTeacherService eduTeacherService;// 查询讲师列表所有数据// 使用restful风格@GetMapping("findAll")public List<EduTeacher> findAll(){List<EduTeacher> list = eduTeacherService.list(null);return list;}
}
2、创建配置类,配置mapper扫描和其他
@Configuration
@MapperScan("com.kuang.eduservice.mapper")
public class EduConfig {
}
3、配置SQL执行性能分析插件
/*** SQL 执行性能分析插件* 开发环境使用,线上不推荐。 maxTime 指的是 sql 最大执行时长*/
@Bean
@Profile({"dev","test"})// 设置 dev test 环境开启
public PerformanceInterceptor performanceInterceptor() {PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();performanceInterceptor.setMaxTime(1000);//ms,超过此处设置的ms则sql不执行performanceInterceptor.setFormat(true);return performanceInterceptor;
}
4、创建主启动类
@SpringBootApplication
public class EduApplication {public static void main(String[] args) {SpringApplication.run(EduApplication.class, args);}
}
5、测试启动
访问:http://localhost:8001/eduservice/teacher/findAll
6.统一返回的json时间格式
默认情况下json时间格式带有时区,并且是世界标准时间,和我们的时间差八个小时
在application.yml中设置:
spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT+8
二、讲师逻辑删除功能
1、配置逻辑删除插件
//逻辑删除组件
@Bean
public ISqlInjector sqlInjector(){return new LogicSqlInjector();
}
2、逻辑删除属性上面添加注解
@TableLogic
private Boolean isDeleted;
3、编写Controller删除方法
//逻辑删除讲师方法
@DeleteMapping("removeById/{id}")
public boolean removeById(@PathVariable String id){boolean flag = eduTeacherService.removeById(id);return flag;
}
4、如何测试
借助一些工具进行测试
- swagger测试(重点):生成在线的接口文档,方便接口测试。
- postman(了解)
三、配置Swagger2
1、创建common模块—在guli_parent下创建common
2、引入相关依赖
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><scope>provided </scope></dependency><!--mybatis-plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><scope>provided </scope></dependency><!--lombok用来简化实体类:需要安装lombok插件--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>provided </scope></dependency><!--swagger--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><scope>provided </scope></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><scope>provided </scope></dependency><!-- redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- spring2.X集成redis所需common-pool2<dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId><version>2.6.0</version></dependency>-->
</dependencies>
3、创建swagger的配置类
在common下面创建子模块service_base
, 并在该模块创建swagger的配置类
@Configuration
@EnableSwagger2
public class SwaggerConfig {@Beanpublic Docket webApiConfig(){return new Docket(DocumentationType.SWAGGER_2).groupName("webApi").apiInfo(webApiInfo()).select().paths(Predicates.not(PathSelectors.regex("/admin/.*"))).paths(Predicates.not(PathSelectors.regex("/error.*"))).build();}private ApiInfo webApiInfo(){return new ApiInfoBuilder().title("网站-课程中心API文档").description("本文档描述了课程中心微服务接口定义").version("1.0").contact(new Contact("lxy", "www.baidu.com", "2422737092@qq.com")).build();}
}
4、Swagger2具体使用
- 在service_edu引入service_base依赖
- 最后在service_edu启动类上添加注解,设置包扫描规则
- 访问测试: http://localhost:8001/swagger-ui.html
5.定义接口说明和参数说明
- 定义在类上:@Api
- 定义在方法上:@ApiOperation
- 定义在参数上:@ApiParam
@Api(description = "讲师管理")
@RestController
@RequestMapping("/eduservice/teacher")
public class EduTeacherController {@Autowiredprivate EduTeacherService eduTeacherService;// 查询讲师列表所有数据// 使用restful风格@ApiOperation(value = "所有讲师列表")@GetMapping("findAll")public List<EduTeacher> findAll(){List<EduTeacher> list = eduTeacherService.list(null);return list;}//逻辑删除讲师方法@ApiOperation(value = "逻辑删除讲师")@DeleteMapping("{id}")public boolean removeById(@ApiParam(name = "id", value = "讲师ID",required = true)@PathVariable String id){boolean flag = eduTeacherService.removeById(id);return flag;}
}
四、统一返回结果对象
1、统一返回数据格式
项目中我们会将响应封装成json返回,一般我们会将所有接口的数据格式统一, 使前端(iOS Android, Web)对数据的操作更一致、轻松。
一般情况下,统一返回数据格式没有固定的格式,只要能描述清楚返回的数据状态以及要返回的具体数据就可以。但是一般会包含状态码、返回消息、数据这几部分内容
例如,我们的系统要求返回的基本数据格式如下:
- 携带数据成功
{"success": true,"code": 20000,"message": "成功","data": {"items": [{"id": "1","name": "刘德华","intro": "毕业于师范大学数学系,热爱教育事业,执教数学思维6年有余"}]}
}
- 携带数据成功(分页)
{"success": true,"code": 20000,"message": "成功","data": {"total": 17,"rows": [{"id": "1","name": "刘德华","intro": "毕业于师范大学数学系,热爱教育事业,执教数学思维6年有余"}]}
}
- 无返回数据成功
{"success": true,"code": 20000,"message": "成功","data": {}
}
- 无返回数据失败
{"success": false,"code": 20001,"message": "失败","data": {}
}
- 因此,我们统一结果
{"success": 布尔, //响应是否成功"code": 数字, //响应码"message": 字符串, //返回消息"data": HashMap //返回数据,放在键值对中
}
2、统一结果返回类
-
在common模块下创建子模块common_utils
-
创建接口 定义返回码—创建包 com.rg.commonutils,创建接口
ResultCode
public interface ResultCode {public static Integer SUCCESS = 20000;//成功public static Integer ERROR = 20001;//失败
}
- 创建结果类—创建
R
类
@Data
public class R {@ApiModelProperty(value = "是否成功")private Boolean success;@ApiModelProperty(value = "返回码")private Integer code;@ApiModelProperty(value = "返回消息")private String message;@ApiModelProperty(value = "返回数据")private Map <String, Object> data = new HashMap <String, Object>();private R(){} //构造方法私有化. 目的:禁止随意new 方法,只能使用我们定义的方法.public static R ok(){//定义成功方法R r = new R();r.setSuccess(true);r.setCode(ResultCode.SUCCESS);r.setMessage("成功");return r;//为了链式编程}public static R error(){//定义失败方法R r = new R();r.setSuccess(false);r.setCode(ResultCode.ERROR);r.setMessage("失败");return r;//为了链式编程}//自定义属性的相关方法(带链式编程功能)public R success(Boolean success){this.setSuccess(success);return this;}public R message(String message){this.setMessage(message);return this;}public R code(Integer code){this.setCode(code);return this;}public R data(String key, Object value){this.data.put(key, value);return this;}public R data(Map<String,Object> map){this.setData(map);return this;}}
3、统一返回结果的使用
-
在service模块中添加依赖—common_utils
-
修改Controller中的返回结果
//1.查询讲师所有数据 使用Rest风格..
@ApiOperation("所有讲师列表")
@GetMapping("findAll")
public List <EduTeacher> findAll() {List <EduTeacher> eduTeacherList = eduTeacherService.list(null);return eduTeacherList;
}//2.通过id逻辑删除讲师
@ApiOperation("根据ID删除讲师")
@DeleteMapping("removeById/{id}")
public R removeById(@ApiParam(name = "id", value = "讲师ID", required = true) @PathVariable String id) {boolean flag = eduTeacherService.removeById(id);if (flag) {return R.ok();} else {return R.error();}
}
五、讲师分页查询
1、EduConfig中配置分页插件
/*** 分页插件*/
@Bean
public PaginationInterceptor paginationInterceptor(){return new PaginationInterceptor();
}
2、EduTeacherController中添加分页方法
//3.分页查询讲师
@ApiOperation("分页查询讲师")
@GetMapping("pageList/{current}/{limit}")
public R pageList(@ApiParam(name = "current", value = "当前页码", required = true)@PathVariable("current") Integer current,@ApiParam(name = "limit", value = "每页记录数", required = true)@PathVariable("limit") Integer limit) {Page <EduTeacher> page = new Page <>(current, limit);//进行分页查询eduTeacherService.page(page, null);//最后这些属性既可以通过page也可以通过iPage获取,因为分页后的数据会被重新封装到这些对象里面.// Map <String, Object> map = new HashMap <>();// map.put("total",page.getTotal());// map.put("rows", page.getRecords());// return R.ok().data(map);return R.ok().data("total", page.getTotal()).data("rows", page.getRecords());
}
六、讲师条件查询带分页
要求:根据讲师名称name,讲师头衔level、讲师入驻时间查询
1、创建查询对象
创建com.rg.eduservice.entiy.vo包,创建TeacherQuery
类查询对象
@ApiModel(value = "Teacher查询对象",description = "讲师查询对象封装")
@Data
public class TeacherQuery implements Serializable {private static final long serialVersionUID = 1L;@ApiModelProperty(value = "教师名称,模糊查询")private String name;@ApiModelProperty(value = "头衔 1高级讲师 2首席讲师")private Integer level;@ApiModelProperty(value = "查询开始时间", example = "2019-01-01 10:10:10")private String begin;@ApiModelProperty(value = "查询结束时间", example = "2019-12-01 10:10:10")private String end;
}
2、编写controller
//4.根据条件查询讲师
@ApiOperation("根据条件查询讲师")
@PostMapping("pageQuery/{current}/{limit}") //@RequestBody: 通过json传递数据,把数据封装到对象中. json数据只能封装到请求体中,所以就需要用到POST请求
public R pageQuery(@ApiParam(name = "current", value = "当前页码", required = true)@PathVariable("current") Integer current,@ApiParam(name = "limit", value = "每页记录数", required = true)@PathVariable("limit") Integer limit,@ApiParam(name = "teacherQuery",value = "查询条件",required = false) @RequestBody(required = false) TeacherQuery teacherQuery){//required = false,表示条件可有可无Page <EduTeacher> page = new Page <>(current, limit);//构建条件QueryWrapper <EduTeacher> wrapper = new QueryWrapper <>();String name = teacherQuery.getName();Integer level = teacherQuery.getLevel();String begin = teacherQuery.getBegin();String end = teacherQuery.getEnd();//mybatis我们学过动态sql,这里我们可以使用MP简化操作if(!StringUtils.isEmpty(name)){wrapper.like("name", name);}if(!StringUtils.isEmpty(level)){wrapper.eq("level", level);}if(!StringUtils.isEmpty(begin)){wrapper.ge("gmt_create", begin);}if(!StringUtils.isEmpty(end)){wrapper.le("gmt_modified", end);}eduTeacherService.page(page, wrapper);//分页查询return R.ok().data("total", page.getTotal()).data("rows", page.getRecords());
}
七、自动填充封装
1、在service-base中创建自动填充类
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {//这里设置的是属性名称,而非字段名称this.setFieldValByName("gmtCreate", new Date(), metaObject);this.setFieldValByName("gmtModified", new Date(), metaObject);}@Overridepublic void updateFill(MetaObject metaObject) {this.setFieldValByName("gmtModified", new Date(), metaObject);}
}
2、在实体类添加自动填充注解
八、讲师添加功能
1、在实体类添加自动填充注解
2.EduTeacherController中新增方法
//5.添加讲师
@ApiOperation("添加讲师")
@PostMapping("addTeacher")
public R addTeacher(@ApiParam(value = "eduTeacher",name = "讲师信息") @RequestBody EduTeacher eduTeacher){boolean flag = eduTeacherService.save(eduTeacher);if (flag){return R.ok();}else{return R.error();}
}
3.Swagger中测试
九、讲师修改功能
1.EduTeacherController中新增方法
//6.根据讲师Id进行查询-->数据回显功能
@GetMapping("getById/{id}")
@ApiOperation("根据id查询讲师")
public R getById(@ApiParam(name = "id",value = "讲师ID",required = true) @PathVariable String id){EduTeacher eduTeacher = eduTeacherService.getById(id);return R.ok().data("teacher", eduTeacher);
}//7.讲师修改功能
@ApiOperation("修改讲师")
@PutMapping("updateById")
public R updateById(@ApiParam(name = "eduTeacher",value = "讲师信息",required = true) @RequestBody EduTeacher eduTeacher){boolean flag = eduTeacherService.updateById(eduTeacher);if(flag){return R.ok();}else{return R.error();}
}
十、统一异常处理
1.制造异常
int a = 10/0;
2.统一异常处理
- 在service-base中创建统一异常处理类GlobalExceptionHandler.java:
@ControllerAdvice
public class GlobalExceptionHandler {//统一异常处理@ExceptionHandler(Exception.class)@ResponseBodypublic R error(Exception e){e.printStackTrace();return R.error();}
}
- Swagger测试
3.处理特定异常
- GlobalExceptionHandler中添加
//处理特定异常
@ExceptionHandler(ArithmeticException.class)
@ResponseBody
public R error(ArithmeticException e){e.printStackTrace();return R.error().message("执行了自定义异常");
}
- Swagger
4.自定义异常
- 创建自定义异常类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class GuLiException extends RuntimeException{private Integer code;//状态码private String msg;//异常信息
}
- 添加异常处理方法
@ExceptionHandler(GuliException.class)
@ResponseBody
public R error(GuliException e){e.printStackTrace();return R.error().message(e.getMsg()).code(e.getCode());
}
- 业务中需要的位置抛出GuliException
try {int i = 10 / 0;
} catch (Exception e) {throw new GuLiException(200001, "出现自定义异常");
}
- Swagger测试
十一、统一日志处理
1、配置日志级别
日志记录器(Logger)的行为是分等级的。如下表所示:
分为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL
默认情况下,spring boot从控制台打印出来的日志级别只有INFO及以上级别,可以配置日志级别
# 设置日志级别
logging.level.root=WARN
2、Logback日志
spring boot内部使用Logback作为日志实现的框架。
Logback和log4j非常相似,如果你对log4j很熟悉,那对logback很快就会得心应手。
logback相对于log4j的一些优点:https://blog.csdn.net/caisini_vc/article/details/48551287
1.配置logback日志
删除application.properties中的日志配置
# mybatis日志
#mybatis-plus:
# configuration:
# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl#logging:
# level: debug
安装idea彩色日志插件:grep-console
resources 中创建 logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="10 seconds"><!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 --><!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true --><!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 --><!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 --><contextName>logback</contextName><!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 --><property name="log.path" value="D:/guli_log/edu" /><!-- 彩色日志 --><!-- 配置格式变量:CONSOLE_LOG_PATTERN 彩色日志格式 --><!-- magenta:洋红 --><!-- boldMagenta:粗红--><!-- cyan:青色 --><!-- white:白色 --><!-- magenta:洋红 --><property name="CONSOLE_LOG_PATTERN"value="%yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-5level) |%blue(%thread) |%blue(%file:%line) |%green(%logger) |%cyan(%msg%n)"/><!--输出到控制台--><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息--><!-- 例如:如果此处配置了INFO级别,则后面其他位置即使配置了DEBUG级别的日志,也不会被输出 --><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>INFO</level></filter><encoder><Pattern>${CONSOLE_LOG_PATTERN}</Pattern><!-- 设置字符集 --><charset>UTF-8</charset></encoder></appender><!--输出到文件--><!-- 时间滚动输出 level为 INFO 日志 --><appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 正在记录的日志文件的路径及文件名 --><file>${log.path}/log_info.log</file><!--日志文件输出格式--><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern><charset>UTF-8</charset></encoder><!-- 日志记录器的滚动策略,按日期,按大小记录 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 每天日志归档路径以及格式 --><fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>100MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy><!--日志文件保留天数--><maxHistory>15</maxHistory></rollingPolicy><!-- 此日志文件只记录info级别的 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>INFO</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!-- 时间滚动输出 level为 WARN 日志 --><appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 正在记录的日志文件的路径及文件名 --><file>${log.path}/log_warn.log</file><!--日志文件输出格式--><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern><charset>UTF-8</charset> <!-- 此处设置字符集 --></encoder><!-- 日志记录器的滚动策略,按日期,按大小记录 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>100MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy><!--日志文件保留天数--><maxHistory>15</maxHistory></rollingPolicy><!-- 此日志文件只记录warn级别的 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>warn</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!-- 时间滚动输出 level为 ERROR 日志 --><appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 正在记录的日志文件的路径及文件名 --><file>${log.path}/log_error.log</file><!--日志文件输出格式--><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern><charset>UTF-8</charset> <!-- 此处设置字符集 --></encoder><!-- 日志记录器的滚动策略,按日期,按大小记录 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>100MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy><!--日志文件保留天数--><maxHistory>15</maxHistory></rollingPolicy><!-- 此日志文件只记录ERROR级别的 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!--<logger>用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>。<logger>仅有一个name属性,一个可选的level和一个可选的addtivity属性。name:用来指定受此logger约束的某一个包或者具体的某一个类。level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,如果未设置此属性,那么当前logger将会继承上级的级别。--><!--使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作:第一种把<root level="INFO">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息第二种就是单独给mapper下目录配置DEBUG模式,代码如下,这样配置sql语句会打印,其他还是正常DEBUG级别:--><!--开发环境:打印控制台--><springProfile name="dev"><!--可以输出项目中的debug日志,包括mybatis的sql日志--><logger name="com.guli" level="INFO" /><!--root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,默认是DEBUG可以包含零个或多个appender元素。--><root level="INFO"><appender-ref ref="CONSOLE" /><appender-ref ref="INFO_FILE" /><appender-ref ref="WARN_FILE" /><appender-ref ref="ERROR_FILE" /></root></springProfile><!--生产环境:输出到文件--><springProfile name="pro"><root level="INFO"><appender-ref ref="CONSOLE" /><appender-ref ref="DEBUG_FILE" /><appender-ref ref="INFO_FILE" /><appender-ref ref="ERROR_FILE" /><appender-ref ref="WARN_FILE" /></root></springProfile></configuration>
2.将错误日志输出到文件
GlobalExceptionHandler.java 类上添加注解
@Slf4j
在异常处理类中添加异常输出语句:
3.将日志堆栈信息输出到文件
上述的操作只能将错误信息的第一行输出到文件中,如果需要全部信息需要以下操作.
- 定义工具类
guli-framework-common下创建util包,创建ExceptionUtil.java工具类
public class ExceptionUtil {public static String getMessage(Exception e) {StringWriter sw = null;PrintWriter pw = null;try {sw = new StringWriter();pw = new PrintWriter(sw);// 将出错的栈信息输出到printWriter中e.printStackTrace(pw);pw.flush();sw.flush();} finally {if (sw != null) {try {sw.close();} catch (IOException e1) {e1.printStackTrace();}}if (pw != null) {pw.close();}}return sw.toString();}
}
- 调用
log.error(ExceptionUtil.getMessage(e));
- GuliException中添加toString方法
ingProfile>
```2.将错误日志输出到文件
GlobalExceptionHandler.java 类上添加注解
@Slf4j
在异常处理类中添加异常输出语句:
3.将日志堆栈信息输出到文件
上述的操作只能将错误信息的第一行输出到文件中,如果需要全部信息需要以下操作.
- 定义工具类
guli-framework-common下创建util包,创建ExceptionUtil.java工具类
public class ExceptionUtil {public static String getMessage(Exception e) {StringWriter sw = null;PrintWriter pw = null;try {sw = new StringWriter();pw = new PrintWriter(sw);// 将出错的栈信息输出到printWriter中e.printStackTrace(pw);pw.flush();sw.flush();} finally {if (sw != null) {try {sw.close();} catch (IOException e1) {e1.printStackTrace();}}if (pw != null) {pw.close();}}return sw.toString();}
}
- 调用
log.error(ExceptionUtil.getMessage(e));
- GuliException中添加toString方法
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- C语言数据浅谈之实型
转自:微点阅读 https://www.weidianyuedu.com/content/1717504742845.html 实型数据也称为浮点数或实数。在C语言中,实数只采用十进制。它有二种形式:十进制小数形式和指数形式。 实数的表示 1) 十进制数形式 由数码0~ 9和小数点组成。 例…...
2024/4/19 0:25:53 - JavaSE之顺序表与链表的总结
目录 一、线性表 二、顺序表 1.概念及结构 2.接口实现 三、链表 1.概念及结构 2.链表的实现 四、顺序表和链表的区别与联系 一、线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构&…...
2024/4/13 9:21:00 - 水塘抽样---算法模板
又叫蓄水池抽样 参考题目 LeetCode382 或者这样推理 上面是只选取一个数的,还有是选取m(>1)个数的...
2024/4/13 9:20:45 - 从零开始学WEB前端——网页的骨架——HTML实战练习
📓项目介绍 先做个自我介绍,本人是一个没人写前端所以就自学前端的后端程序员🙇。在此项目中我会和大家一起从零基础开始学习前端,从后端程序员的视角来看前端,受限于作者的水平本项目暂时只会更新到前端框架VUE&…...
2024/4/13 10:42:29 - java面试后端面试高频问题吐血整理
自己在求职的过程中整理的48个java后端面试的高频问题,也对每一个问题清晰地用思维导图拆解了,非常便于记忆和回顾,重要的知识点还有讲解的比较好的博客链接,主要的知识点有如下: 乐/悲观锁RPCcookie和session区别转发…...
2024/4/13 9:21:00 - 2022年危险化学品经营单位主要负责人及危险化学品经营单位主要负责人操作证考试
题库来源:安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通:危险化学品经营单位主要负责人考前必练!安全生产模拟考试一点通每个月更新危险化学品经营单位主要负责人操作证考试题目及答案!多做几遍,其实通…...
2024/4/26 16:02:47 - 机器人工程专业学教研的共同富裕
物质上的共同富裕难,精神上的共同富裕更是难上加难。 如下报告末尾: ROS机器人操作系统教学与应用的思考_zhangrelay的专栏-CSDN博客 经过7年工作,发现难度之大超乎原有预期多个数量级。 总的来说在目前物质和精神条件下就是“无解”。 推…...
2024/4/13 9:20:45 - Mysql基础(2)
DDL 数据(结构)定义语言DDL(Data Definition Language),是用于创建和修改数据库表结构的语言。 创建删除数据库 创建数据库并设置编码格式 CREATE DATABASE [if not exists] 数据库名 [ CHARSET utf8] 删除数据库 DROP DATABASE 数据库名 / [IF EXISTS数据库名]; 修…...
2024/4/20 3:23:31 - 2021年焊工(初级)考试技巧及焊工(初级)作业考试题库
题库来源:安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通:焊工(初级)考试技巧参考答案及焊工(初级)考试试题解析是安全生产模拟考试一点通题库老师及焊工(初级)操作证…...
2024/5/1 9:19:21 - JavaScript 中的作用域与变量声明提升
一、简单阐述 变量提升其实就是我们在函数内部定义的变量,被提升到函数的首部,此时我们在变量任何地方都是可以访问到该变量的。造成变量声明提升的原因:js引擎在执行代码前会先有一个代码解析的过程,在代码解析的过程中会创建一…...
2024/4/13 9:21:00 - js基础1
#1 JavaScript 1.1简介 JavaScript是一种具有面向对象能力的、解释型的程序设计语言。更具体一点,它是基于对象和事件驱动并具有相对安全性的客户端脚本语言。它的主要目的是,验证发往服务器端的数据、增加Web互动、加强用户体验度等。 ##1.2基本用…...
2024/4/18 13:37:17 - nginx动静分离[centos7、centos8]
动静分离: 服务器配置: 动态资源 吃cpu和内存,动态资源放在cpu多、内存大的服务器上 静态资源 吃硬盘和带宽,静态资源放在硬盘大、带宽高的服务器上 【centos8系统】 #准备三台服务器 105:反向代理服务器 106:静态服务器 107:动态服务器 #准备三台nginx[nginx/1.20.2] 在ww…...
2024/4/19 20:48:28 - 谷粒学院(二)---项目构建
文章目录一、项目模块介绍和数据库设计1、工程结构2、模块介绍3、 创建讲师数据库二、 创建父工程三、搭建service模块四、搭建service-edu模块五、数据库设计规约一、项目模块介绍和数据库设计 1、工程结构 2、模块介绍 guli-parent:在线教学根目录(父…...
2024/4/13 10:42:39 - 黑马PostgreSQL,为何一黑到底
📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10年DBA工作经验 一位上进心十足的【大数据领域博主】!😜😜…...
2024/4/13 9:21:20 - centos7 防火墙添加端口(小记)
centos7 防火墙添加端口 firewall开启80端口 远程登录到vps,查看firewall防火墙版本。 firewall-cmd --version # 0.4.4.4查看firewall防火墙的状态。提示正在运行。 firewall-cmd --state # running在firewall中添加80端口的权限。提示成功。 firewall-cmd --…...
2024/4/17 14:46:34 - ref直接访问一个子组件
尽管存在 prop 和事件,有的时候你仍可能需要在 JavaScript 里直接访问一个子组件。为了达到这个目的,你可以通过 ref 这个 attribute 为子组件赋予一个 ID 引用。例如: <base-input ref"usernameInput"></base-input>…...
2024/4/19 10:56:25 - C语言 不变初心数
Description 不变初心数是指这样一种特别的数,它分别乘 2、3、4、5、6、7、8、9 时,所得乘积各位数之和却不变。例如 18 就是这样的数:18 的 2 倍是 36,369;18 的 3 倍是 54,549;…… 18 的 9 …...
2024/4/13 9:21:30 - 6-1简单输出整数
PTA练习题目地址 本题要求实现一个函数,对给定的正整数N,打印从1到N的全部正整数。 void PrintN ( int N ) {int i;for ( i1; i<N; i )printf("%d\n", i); }...
2024/4/8 18:03:19 - 【zookeeper】raft 共识算法 动画演示 网站
1.概述 地址:https://cyberdak.github.io/thesecretlivesofdatacn/raft/...
2024/4/8 18:03:19 - JDBCTemplate常用API
JDBCTemplate常用APIJDBCTemplate是持久层(数据访问层)的技术,它封装了jdbc的操作,可以更方便的执行crudjjdbcTempalte的常用API (1) update():执行增、删、改操作,返回影响数据库的行数 (2)que…...
2024/4/17 4:31:27
最新文章
- 接收区块链的CCF会议--APSEC 2024 截止7.13 附录用率
会议名称:APSEC(Asia-Pacific Software Engineering Conference) CCF等级:CCF C类学术会议 类别:软件工程/系统软件/程序设计语言 录用率:2023年,90 submissions were recommended for accep…...
2024/5/2 7:45:58 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - 【python】Flask Web框架
文章目录 WSGI(Web服务器网关接口)示例Web应用程序Web框架Flask框架创建项目安装Flask创建一个基本的 Flask 应用程序调试模式路由添加变量构造URLHTTP方法静态文件模板—— Jinja2模板文件(Template File)<...
2024/5/2 2:33:45 - JVM笔记
1.JVM与Java体系结构 1.1. 前言 作为Java工程师的你曾被伤害过吗?你是否也遇到过这些问题? 运行着的线上系统突然卡死,系统无法访问,甚至直接OOM想解决线上JVM GC问题,但却无从下手新项目上线,对各种JVM…...
2024/5/1 13:41:20 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/1 17:30:59 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/30 18:14:14 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/29 2:29:43 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/30 18:21:48 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/27 17:58:04 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/27 14:22:49 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/28 1:28:33 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/30 9:43:09 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/27 17:59:30 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/25 18:39:16 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/28 1:34:08 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/29 20:46:55 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/30 22:21:04 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/1 4:32:01 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/27 23:24:42 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/28 5:48:52 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/30 9:42:22 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/30 9:43:22 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/30 9:42:49 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57