java cron表达式

java cron表达式

https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm

长度7位
秒分时日月星期年

Spring定时任务

# 每月的最后1天
@Scheduled(cron = "0 0 18 28–31 * ?")
public void doAtLastDayOfMonth() {
    final Calendar calendar = Calendar.getInstance();
    if (c.get(Calendar.DATE) == c.getActualMaximum(Calendar.DATE)) {
        // do something here...
    }
}

说明:
Java(Spring)

*    *    *    *    *    *    *
-    -    -    -    -    -    -
|    |    |    |    |    |    |
|    |    |    |    |    |    + year [optional]
|    |    |    |    |    +----- day of week (0 - 7) (Sunday=0 or 7)
|    |    |    |    +---------- month (1 - 12)
|    |    |    +--------------- day of month (1 - 31)
|    |    +-------------------- hour (0 - 23)
|    +------------------------- min (0 - 59)
+------------------------------ second (0 - 59)

长度6位,去掉最后的年

参考:https://www.matools.com/cron

在虚函数里面使用spring的DI

参考:https://medium.com/@citizenACLV/use-springs-dependency-injection-in-java-abstract-class-2573c1b4c0d1

实现的子类使用@Component

Factory 使用@Service, 得到实例的时候,使用@Autowired, 而不使用new

这个是关键,不然,虚基类的autowired会一直null

spring的autowired,默认是singleton,即autowired得到的都是同一个对象,

如果要每次都create new,则使用ObjectFactory,getObject每次会创建新的对象。

public class SingletonObjectFactoryBean {

    @Autowired

    private ObjectFactory<PrototypeBean> prototypeBeanObjectFactory;

    public PrototypeBean getPrototypeInstance() {

        return prototypeBeanObjectFactory.getObject();

    }

}

参考:https://www.baeldung.com/spring-inject-prototype-bean-into-singleton