@EnableScheduling
在spring boot启动类加上,表示开启定时任务
@Scheduled
设置需要定时执行的方法
字段 | 允许值 | 允许的特殊字符 |
---|---|---|
second | 0-59 | ,-*/ |
minute | 0-59 | ,-*/ |
hour | 0-23 | ,-*/ |
day of month | 1-31 | ,-*/?LWC |
month | 1-12 | ,-*/ |
day of week | 0-7(0和7都是星期天) | ,-*/?LW# |
特殊字符 | 表示含义 |
---|---|
, | 枚举 |
- | 区间 |
* | 任意 |
/ | 步长 |
? | 日/星期冲突匹配 |
L | 最后 |
W | 工作日 |
C | 和calendar联系后计算的值 |
# | 星期,4#2表示的是第二个星期四 |
//周五的每分钟第0,第1,第2,第3秒都运行一次 @Scheduled(cron = "0,1,2,3 * * * * 5") public void aa() {...}
//周五的每分钟,从零秒启动,每四秒都运行一次 @Scheduled(cron = "0/4 * * * * 5") public void aa() {...}
java文件在计算机中的三个阶段
Source 源代码阶段 | Class 类对象阶段 | Runtime 运行阶段 |
---|---|---|
将java文件通过javac编译成class文件,通过ClassLoader(类加载器)将class字节码文件加载进内存, | 通过Class类对象对该类的成员变量、构造方法、成员方法进行分类,分别加载进fields、constructors、methods进行分类 | 创建对象 |
//获取字节码文件的class类对象 Class<Person> personClass = Person.class; //获取public修饰的成员变量 Field field = personClass.getField("a"); Person person = new Person(); Object o = field.get(person); System.out.println(o);
//获取字节码文件的class类对象 Class<Person> personClass = Person.class; //获取protected的成员变量 Field d = personClass.getDeclaredField("d"); Person person = new Person(); //忽略访问权限修饰符安全检查, d.setAccessible(true);//暴力反射 Object o = d.get(person); System.out.println(o);
Class.forName("全类名");将字节码文件加载进内存,返回Class对象
类名.class;通过类名的属性class获取
对象.getClass();getClass()方式在Object类中定义着。
同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取class对象都是同一个。
注解的分类:
jdk内置注解:
自定义注解:
格式:
元注解
public @interface 注解名称{}
本质:注解本质就是一个接口,该接口默认继承Annotation接口
属性: 接口中可以定义的成员方法
元注解:用于描述注解的注解