使用 StopWatch 优雅打印执行耗时
import org.springframework.util.StopWatch;
public class SpringStopWatchExample3 {
public static void main (String[] args) throws InterruptedException {
StopWatch sw = new StopWatch();
sw.start("A");
Thread.sleep(500);
sw.stop();
sw.start("B");
Thread.sleep(300);
sw.stop();
sw.start("C");
Thread.sleep(200);
sw.stop();
System.out.println(sw.prettyPrint());
}
}
输出
StopWatch '': running time (millis) = 1031
-----------------------------------------
ms % Task name
-----------------------------------------
00514 050% A
00302 029% B
00215 021% C:
更多用法
不同的打印结果
getTotalTimeSeconds() 获取总耗时秒,同时也有获取毫秒的方法
prettyPrint() 优雅的格式打印结果,表格形式
shortSummary() 返回简短的总耗时描述
getTaskCount() 返回统计时间任务的数量
getLastTaskInfo().getTaskName() 返回最后一个任务TaskInfo对象的名称
更多查看文档
查看pom中依赖树
idea中通过Maven Integration插件在pom文件单击右键选择 Diagrams -> Show Dependencies查看依赖关系树,在依赖关系树页面使用 CTRL + F 打开查询功能,打开查询功能后直接输入需要查询的字母即可开始查询(查询输入框不会主动出现,需输入任意字母开始查询后才会出现)
springboot通过@ControllerAdvice注解处理Controller返回的数据
import com.thsware.framework.service.dto.ApiResult;
import com.thsware.framework.web.rest.ApiResource;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.http.server.ServletServerHttpRequest;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
import java.lang.reflect.Method;
// 处理Controller返回的数据,主要用于将返回的数据写入request是的拦截器能间接取到Controller返回的数据
@ControllerAdvice
public class ApiResponseBody implements ResponseBodyAdvice<Object> {
// 用于判断是否需要执行beforeBodyWrite
@Override
public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) {
Method method = methodParameter.getMethod();
return method.getDeclaringClass().getName().equals(ApiResource.class.getName());
}
@Override
public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class<? extends HttpMessageConverter<?>> aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
// 判断Controller返回的数据类型是否是ApiResult
if (o instanceof ApiResult) {
// 将Controller返回的数据写入request用于后续处理
ServletServerHttpRequest request = (ServletServerHttpRequest) serverHttpRequest;
request.getServletRequest().setAttribute("x-thsbim-result", o);
}
return o;
}
}
springboot中通过@Async注解启用异步
使用@EnableAsync启用@Async
如果程序无法启动可以使用@EnableAsync(proxyTargetClass=true)
如果被@Async注解的方法和调用它的方法处于同一个类中不会异步执行
正则表达式字符串替换
public static void main(String[] args){
String te = "{replacecontent}"; //字符串替换的内容
String reg = "p=(.*?)&tr"; //替换内容所对应的正则
String content="https://0.0.0.0:8080/abc-test-reg/test/index?p=0123456&trigger=2¶m=0d243b2-cd56-11e-abu9-05692e327ff"; //要替换的字符串
StringBuilder operatorStr=new StringBuilder(content);
Pattern p = Pattern.compile(reg);
Matcher m = p.matcher(operatorStr);
if (m.find()){
//使用分组进行替换
operatorStr.replace(m.start(1),m.end(1),te);
}
System.out.println(operatorStr.toString());
}
// 结果
// https://0.0.0.0:8080/abc-test-reg/test/index?p={replacecontent}&trigger=2¶m=0d243b2-cd56-11e-abu9-05692e327ff
带token下载文件
public File downloadSvfzip(String objectId, String token) throws Exception {
URL url = new URL(serverUrl + svfzipUrl + objectId);
URLConnection conn = url.openConnection();
conn.setRequestProperty("Token", token);
InputStream inStream = conn.getInputStream();
File result = File.createTempFile(objectId, ".tmp");
IOUtils.copy(inStream, new FileOutputStream(result));
return result;
}
将File转换成MultipartFile模拟文件上传(不会爆内存)
依赖
<dependencies>
<!-- Apache Commons FileUpload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<!-- Apache Commons IO -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.8.0</version>
</dependency>
</dependencies>
代码
public static MultipartFile FileToMultipartFile(File file) throws IOException {
// 创建DiskFileItemFactory对象
DiskFileItemFactory factory = new DiskFileItemFactory();
// 使用DiskFileItemFactory创建FileItem对象
FileItem fileItem = factory.createItem(
"file", // 表单字段名
"text/plain", // 内容类型
false, // 是否为表单字段
file.getName() // 文件名
);
// 将File对象的内容复制到FileItem中
OutputStream out = fileItem.getOutputStream();
FileUtils.copyFile(file, out);
out.flush();
out.close();
// 创建CommonsMultipartFile对象
return new CommonsMultipartFile(fileItem);
}