我需要构建一个应用程序,从数据库获取记录,等于某个值,如果它返回true
,它将执行某些操作。我想知道 JPA 是否可以做类似的事情。
我有一个实体游戏
:
@Data
@Entity
public class Game {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
public Game() {
}
@OneToOne
private Team teamBlue;
@OneToOne
private Team teamRed;
@DateTimeFormat(pattern = "HH:mm:ss yyyy-MM-dd")
private LocalDateTime localDateTime;
}
和返回 Game
的 GameRepository
:
@Repository
public interface GameRepository extends JpaRepository<Game, Long> {
@Override
Optional<Game> findById(Long aLong);
}
我想检查 Game
中的 LocalDateTime
值是否等于当前 LocalDateTime
(LocalDateTime.now()
) >) 如果是这样,请执行一些操作。
当然,我可以使用 @Scheduled
并每 1 小时调用一次方法,但我想知道我所描述的是否可行。
简短摘要:
数据库中的Game
实体,LocalDateTime
= 2020-04-05 21:00:00
当前日期时间:2020-04-05 12:00:00(不执行任何操作,因为当前日期时间不等于游戏
日期时间)
[9小时后]
数据库中的Game
实体(不可变),LocalDateTime
= 2020-04-05 21:00:00
当前日期时间:2020-04-05 21:00:00(当前日期时间与游戏
的日期时间匹配,因此请执行一些操作(例如System.out.println(game )
))。
最佳答案
我建议使用注释@Scheduled
来安排作业,它将使用spring data jpa处理数据库数据。
@Scheduled(fixedRate=0 * * * *)
@Transactional
public void scheduleGameJob() {
Optional<Game> game = gameRepo.findById(1L);
if (game.isPresent()) {
LocalDateTime gameTime = game.get().getLocalDateTime();
if (gameTime.equals(LocalDateTime.now())) {
//do some action (for example System.out.println(game))).
}
}
}
关于java - JPA 事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61045722/