常用的注解

2024

常用网址

2023

springboot

SchedulerLock 分布式锁

这个锁要搭配定时任务同时使用。
@Scheduled(...)
@SchedulerLock(name = "scheduledTaskName", lockAtLeastForString = "PT14M")
public void scheduledTask() {
   // do something
}


https://www.jianshu.com/p/94a0378798e1
spring 分布式锁 SchedulerLock

lockAtMostForString 成功执行任务的节点所能拥有的独占锁的最长时间的字符串表达,例如“PT14M”表示为14分钟
name 用来标注一个定时服务的名字,被用于写入数据库作为区分不同服务的标识,如果有多个同名定时任务则同一时间点只有一个执行成功

ShedLock的作用,确保任务在同一时刻最多执行一次。如果一个任务正在一个节点上执行,则它将获得一个锁,该锁将阻止从另一个节点(或线程)执行同一任务。如果一个任务已经在一个节点上执行,则在其他节点上的执行不会等待,只需跳过它即可 。
ShedLock使用Mongo,JDBC数据库,Redis,Hazelcast,ZooKeeper或其他外部存储进行协调,即通过外部存储来实现锁机制。

@Resource

@Bean(“a”) 定义了多个同一类型的bean
@Resource(name = “a”) 指定引入那个bean

@PostConstruct

这个是Bean初始化的时候执行的方法

@Scheduled

@Scheduled(fixedDelay = 1000 * 60 * 60 * 1, initialDelay = 1000 * 5)
定时任务每小时轮询一次,首次执行为5秒后

synchronized

synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种:
synchronized可以保证方法或代码块在运行时,同一时刻只有一个线程可以进入到临界区(互斥性),同时它还保证了共享变量的内存可见性。
修饰一个类
class ClassName{
	public void method(){
		synchronized(ClassName.class){
		}
	}
}
Synchronized作用于整个方法的写法
public void method()
{
   synchronized(this) {
      
   }
};

线程池

线程池还有返回结果数据的线程池
避免重复执行的问题
1 简单的线程池
@Autowired
private ExecutorService executorService;            

 executorService.execute(new Runnable() {
      public void run() {
        System.out.println("Asynchronous task");
      }
});
2 传参数的异步线程池
public class EmailRunnable implements Runnable {
    private String name;
 
    public EmailRunnable(String name) {
        this.name = name;
    }
 
    @Override
    public void run() {
        System.out.println("正在给" + name + "发送邮件......");
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("邮件发送完毕");
    }
}

System.out.println("hello start");
executorService.execute(new EmailRunnable("hangge"));
System.out.println("hello end");

JsonProperty JsonFormat JSONField JsonIgnore

JsonIgnore
这个表示序列化的时候,不进行序列化

@JSONField 注解
https://blog.csdn.net/u012260238/article/details/84916471

@JsonProperty(value = "name")
private String a;

@JsonFormat(pattern = "yyyy-MM-dd")
private Date birthday;

//序列化、反序列化时,格式化时间
@JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private Date createDate;

@Component 自定义bean

@Component
@Data
public class A implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty(value = “abc”)
@Value(“${C.B}”)
private String B;
}

Transactional事务

@Transactional(rollbackFor = {Exception.class})

swag注解

@ApiOperation

@ApiOperation(value = "xxx", notes = "xxx")
@ApiImplicitParams({@ApiImplicitParam(name = "xxx", value = "编码", example = "001", required = true, dataType = "String", paramType = "query")})

测试

可以接受任意参数的接口

@PostMapping(value = “/abc”)
public JSONObject mathod(@RequestBody JSONObject jsonObject){
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值