如何在Spring Boot中基于时间更新数据库条目?



我正在尝试实现一个订阅模型应用程序,在启动时检查记录是否过期(基于当前日期),并最终更新"启用";boolean价值。

模型:

@Entity
@Table(name="users")
public class User {
@Id
@Column(name = "user_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
@Column(unique = true)
private String name;
@NotNull
@DateTimeFormat(pattern = "dd/MM/yyyy")
private LocalDate expiry_date;
@NotNull
private boolean enabled;
//Constructor, getter, setters
}
在UserService类中,我实现了以下方法:

//Disable records if past expiration Date
public void updateRecordsBasedOnTime(){
List<User> orgs = (List<User>) userRepository.findAll();
LocalDate today = LocalDate.now();
for (User usr: users) {
if(today.isAfter(org.getExpiry_date())){
org.setEnabled(false);
}
}
}

现在,问题是,在哪里调用这个方法是合适的?首先,我认为在@Controller类中,因为已经使用了userRepository的实例,但以下方法不起作用:

@PostLoad
private void updateStatus() {
userService.updateRecordsBasedOnTime();
}

或者我想实现一个cron方法,每12小时运行一次记录:

@Scheduled(cron = "0 */12 * * *")
public static void updateDatabase() {
}

但是即使我成功地实现了这个方法,我也不会在启动时更新数据。有人能解释一下吗,也许能给我提供一个更好的方法?

我建议您使用触发器。在触发器的帮助下,您不仅可以在启动时执行任务,还可以定期执行任务。你可以阅读更多关于这方面的信息,以及什么适合你的特殊需求。

https://docs.spring.io/spring-framework/docs/4.0.x/spring-framework-reference/html/scheduling.html

最新更新