springboot
SchedulerLock 分布式锁@PostConstruct@Scheduledsynchronized线程池JsonProperty 返回字段和数据库不一致
springboot SchedulerLock 分布式锁这个锁要搭配定时任务同时使用。
@Scheduled(...)
@SchedulerLock(name = "scheduledTaskName")
public void scheduledTask() {
// do something
}
https://www.jianshu.com/p/94a0378798e1
spring 分布式锁 SchedulerLock
ShedLock的作用,确保任务在同一时刻最多执行一次。如果一个任务正在一个节点上执行,则它将获得一个锁,该锁将阻止从另一个节点(或线程)执行同一任务。如果一个任务已经在一个节点上执行,则在其他节点上的执行不会等待,只需跳过它即可 。
ShedLock使用Mongo,JDBC数据库,Redis,Hazelcast,ZooKeeper或其他外部存储进行协调,即通过外部存储来实现锁机制。
@PostConstruct
这个是Bean初始化的时候执行的方法
@Scheduled@Scheduled(fixedDelay = 1000 * 60 * 60 * 1, initialDelay = 1000 * 5)
定时任务每小时轮询一次,首次执行为5秒后
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 返回字段和数据库不一致
@JsonProperty(value = “name”)
private String a;



