加载中...

每日一记

每日一记

  • @Async 使用
  • jwt
  • MySQL的int(1) 与 int(20)

@Async 使用

基本介绍

​ 是spring的注解,用于方法和类,加了这个注解后,那么在使用该类/方法时,会创建一个新的线程去执行,即实现多线程。

使用流程

  1. 在启动类或者含有@configuration注解的类上,添加@EnableAsync注解。
  2. 在方法/类上添加@Async即可

使用细节

  • 线程池的任务执行顺序:

    注意:默认使用spring的线程池---SimpleAsyncTaskExecutor

  • 如何创建线程池:

    1. 重新实现接口AsyncConfigurer
    2. 继承AsyncConfigurerSupport
    3. 配置由自定义的TaskExecutor代替内置的任务执行器(文末介绍如何实现)
  • 该注解失效原因:

    1. 使用该注解的方法非public
    2. 注解返回值只能是void 或 future
    3. 方法有static修饰
    4. 启动类没加@EnableAsync
    5. 在使用该注解的方法上写@Transactional是无效的,但在该方法所调用的其他方法上加@Transactional是有效的。

jwt

简答介绍

​ 全名:JSON Web Token。是一种开放标准,常用于身份验证及授权。

​ 组成:Header(token 类型 及 算法名称) + Payload(包含的信息) + Signature(保信息传递过程中不被更改)

使用(不进行细节介绍,网上代码很多);

MySQL的int(1) 与 int(20)

这里做一下区分:

​ 主要是零填充,括号里的数字是数字的位数,如果达不到,就在左侧填充数字0;

exp :
对于int(1) 和 int(4) 来说
如果保存12;
那么int(1) 的效果是 12
而 int(4) 的效果是 0012
@Configuration
public class AsyncConfig {

    @Value("比较推荐从配置里读")
    private Integer queueSize;
    
    @Value("从配置里读")
    private Integer coreSize;
    
    @Value("从配置里读")
    private Integer maxSize;
    
    @Value("从配置里读")
    private Integer keepAlive;
    
    @Value("从配置里读")
    private String threadNamePrefix;
    
    public Executor asyncExecutor(){
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(coreSize); // 核心线程数量
        executor.setMaxPoolSize(maxSize); // 线程最大数量(包括非核心线程数量)
        executor.setKeepAliveSeconds(keepAlive); // 非核心线程存活时间 单位 s
        executor.setQueueCapacity(queueSize); // 任务队列的长度
        executor.setThreadNamePrefix(threadNamePrefix); // 线程名字的前缀,方便观察和查找
        return executor;
    }
}
posted @ 2023-12-29 13:24  strind  阅读(20)  评论(0)    收藏  举报