文章目录
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){
}