我需要构建一个从数据库获取记录的应用程序,该记录等于某个值,如果返回true
,它将执行某人操作。我想知道JPA是否可以做类似的事情。
我有一个实体Game
:
@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;
}
和
GameRepository
返回Game
:@Repository
public interface GameRepository extends JpaRepository<Game, Long> {
@Override
Optional<Game> findById(Long aLong);
}
我想检查
LocalDateTime
中的Game
值是否等于当前的LocalDateTime
(LocalDateTime.now()
),如果是,请执行一些操作。当然,我可以每1小时使用
@Scheduled
和call方法,但是我想知道我所描述的内容是否可行。简短的摘要:
数据库中
Game
实体的LocalDateTime
= 2020-04-05 21:00:00当前日期时间:2020-04-05 12:00:00(不执行任何操作,因为当前日期时间不等于
Game
日期时间)[9小时后]
数据库中的
Game
实体(不可变),其中LocalDateTime
= 2020-04-05 21:00:00当前日期时间:2020-04-05 21:00:00(当前日期时间与
Game
的日期时间匹配,因此请执行一些操作(例如System.out.println(game)
))。 最佳答案
我建议安排一个带有注释@Scheduled
的作业,该作业将使用spring数据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))).
}
}
}