Spring Boot实用小技巧3 - 第525篇

科技   2024-08-27 08:30   福建  

Spring Boot
Spring Boot
Spring Boot
Spring Boot
Spring Boot

Spring Boot

Spring Boot

SpringBoot异常处理机制之自定义404、500错误提示页面 - 518篇

SpringBoot 中多例模式的神秘世界:用法区别以及应用场景,最后的灵魂拷问会吗?- 第519篇

SpringBoot开发的AI导航站技术架构剖析 —— 技术如何选型 -  第520篇

SpringBoot多例模式,在同一个类中注入两次是否是同一个对象 – 一不小心就会写出一个重大BUG!!- 521篇

SpringBoot基本原理,轻松应对面试官 - 第522篇

Spring Boot实用小技巧 -  - 第523篇

Spring Boot实用小技巧2 - 第524篇



导读

这一节再度带来一系列实用小技巧,当你将这些小技巧收入囊中,无论是应对工作中的特殊要求,还是对项目进行优化升级,都能游刃有余。


技巧一:动态修改日志级别

通过org.springframework.boot.logging.LoggingSystem提供的api即可。

主要是调用如下的代码即可进行修改:

loggingSystem.setLogLevel(null, LogLevel.DEBUG);


技巧二:动态注册静态资源

通常情况下,一般都是在配置文件中或者自定义WebMvcConfigurer进行静态资源的配置及注册,如下示例:

spring:  web:    resources:      static-locations: classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/

以上是默认的路径,我们可以在这自定义自己的资源路径。如下添加文件系统目录:

spring:  web:    resources:      static-locations: ..., file:///d:/images/

也可以通过编程的方式注册静态资源:

public class WebConfig implements WebMvcConfigurer {  public void addResourceHandlers(ResourceHandlerRegistry registry) {    registry.addResourceHandler("/images/**").addResourceLocations("file:///d:\\images\\") ;  }}

以上方式都是实现配置或代码中定义好,这都需要重启服务,无法做到实时生效。要想实时生效可以通过如下方式动态注册:

@RestControllerpublic class RegController {  @Resource  private SimpleUrlHandlerMapping resourceHandlerMapping ;  @Resource  private ApplicationContext context ;

// 如:requestURI=/s/**, path=d:/images/ @GetMapping("") public Object reg(String requestURI, String path) throws Throwable { ResourceHttpRequestHandler handler = new ResourceHttpRequestHandler(); handler.setLocations(List.of(new FileSystemResource(path))) ; handler.setApplicationContext(context) ; handler.afterPropertiesSet() ; resourceHandlerMapping.registerHandler(requestURI, handler); return "register success"; }}

通过如上方式动态注册静态资源,你也可以对相应的静态资源进行删除。


技巧三:统计接口调用耗时

一般我们在不借助第三方工具的情况下,打印接口耗时通常会在接口处理逻辑的开始和结束位置分别记录当前时间戳,然后计算时间差来获取耗时,如下示例:

@GetMapping("/time")public Object time() throws Exception {  Instant startTime = Instant.now() ;  // TODO, 业务操作  System.err.printf("接口耗时: %d 毫秒%n", (Duration.between(startTime, Instant.now()).toMillis())) ;  return "take time" ;}

上面统计了耗时情况,但是不够准确,为了更准确地反应处整个请求处理过程的耗时,包括Spring框架根据请求查找对应的Controller、拦截器执行等操作,SpringMVC在这些过程执行完成后是发布了一个事件,我们可以通过监听该事件来获取整个请求生命周期的耗时,如下示例:

@Componentpublic class TakeTimeCountListener implements ApplicationListener<ServletRequestHandledEvent> {

@Override public void onApplicationEvent(ServletRequestHandledEvent event) { Throwable failureCause = event.getFailureCause() ; if (failureCause != null) { System.err.printf("错误原因: %s%n", failureCause.getMessage()) ; } System.err.printf("请求客户端地址:%s, 请求URL: %s, 请求Method: %s, 请求耗时: %d%n", event.getClientAddress(), event.getRequestUrl(), event.getMethod(), event.getProcessingTimeMillis()) ; }}

通过监听ServletRequestHandledEvent事件,可以有效的获取客户端地址,请求的URL等完整的信息,其中ProcessingTimeMillis属性反应的就是这个请求耗时情况。


技巧四:配置文件信息加密

比如我们配置文件中的一些账号和密码,都应该是密文保存的。

因此这次使用了一个开源组件来实现加密与解密,并且对 SpringBoot 非常友好只需要几段代码即可完成。

1首先根据加密密码将需要加密的配置加密为密文。

2替换原本明文保存的配置。

3再使用时进行解密。

使用该包也只需要引入一个依赖即可:

<dependency>    <groupId>com.github.ulisesbocchio</groupId>    <artifactId>jasypt-spring-boot-starter</artifactId>    <version>3.0.4</version></dependency>


具体更多关于jasypt的知识,可以关注公众号「SpringBoot」回复关键词[431],查看文章:

SpringBoot配置文件内容加密,实现敏感信息保护 - 431


技巧五:设置网站图标

原来我们在使用tomcat开发时,设置网站图片时,即icon图标时,一般都是直接替换root包下的favicon.ico替换成自己的,或者在网页的头部设置linkreficon然后设置其href值。而在SpringBoot中,替换图片也是很简单的,只需要将自定义图片放置在静态资源目录下即可,即默认有staticpublicresources/META-INF/resources或者自定义的静态目录下即可。

技巧六:高效日志:使用Lombok简化日志记录

Lombok是一款Java工具,能通过注解形式简化Java代码开发,特别是日志记录部分。

使用方法:

pom.xml中添加依赖:

<dependency>    <groupId>org.projectlombok</groupId>    <artifactId>lombok</artifactId></dependency>

启用日志记录:

import lombok.extern.slf4j.Slf4j;
@Slf4jpublic class MyClass { public void logSomething() { log.info("This is an info log"); }}


计520+
Spring Boot
Spring Boot
Spring Boot
Spring Boot
Spring Boot

Spring Boot

Spring Boot

Spring Boot整合ElasticSearch实战 - 第511篇

Transaction rolled back because it has been marked as - 第512篇

五音不全也浪漫,521清华学霸为爱人写歌 - 第513篇

一文讲清楚SpringBoot项目打包jar后运行报错template might not exist - 第514篇

idea springboot woff/woff2/eot/ttf/svg等小图标不显示的问题 - 第515篇

Noisee AI中文站网页版 AI 音乐生成视频全新登场,快来抢先体验——国内第一个登场的中文站来袭  - 516篇

Spring的SmartLifecycle可以没用过,但没听过就不好了!- 第517篇

SpringBoot异常处理机制之自定义404、500错误提示页面 - 518篇

SpringBoot 中多例模式的神秘世界:用法区别以及应用场景,最后的灵魂拷问会吗?- 第519篇

SpringBoot开发的AI导航站技术架构剖析 —— 技术如何选型 -  第520篇

SpringBoot多例模式,在同一个类中注入两次是否是同一个对象 – 一不小心就会写出一个重大BUG!!- 521篇

SpringBoot基本原理,轻松应对面试官 - 第522篇

Spring Boot实用小技巧 -  - 第523篇

Spring Boot实用小技巧2 - 第524篇


SpringBoot
Suno AI制作音乐,Viggle AI - 照片跳舞,AI音乐,Noisee AI制作MV。Spring Boot技术。博客已有400+,文章特色:一个知识点一个系列、让技术变得简单、文章轻松幽默,悟纤和师傅趣谈更是轻松有趣。
 最新文章