@Component
public class NotifyUserLoginDemoTask implements SchedulingConfigurer {

    @Override
    public void configureTasks(ScheduledTaskRegistrar registrar) {
        Runnable runnable = this::notifyLoginUser;

        Trigger trigger = new Trigger() {
            @Override
            public Date nextExecutionTime(TriggerContext triggerContext) {
                if (config.getCron() != null) {
                    return new CronTrigger(config.getCron()).nextExecutionTime(triggerContext);
                } else if (config.getDelay() != null) {
                    var t = new PeriodicTrigger(config.getDelay(), TimeUnit.MILLISECONDS);
                    t.setFixedRate(false);
                    return t.nextExecutionTime(triggerContext);
                } else if (config.getRate() != null) {
                    var t = new PeriodicTrigger(config.getRate(), TimeUnit.MILLISECONDS);
                    t.setFixedRate(true);
                    return t.nextExecutionTime(triggerContext);
                } else {
                    throw new RuntimeException("Please define parameters for scheduled task.");
                }
            }
        };

        registrar.addTriggerTask(runnable, trigger);
    }
    // 其餘略過
}