java - JPA 事件监听器

标签 java hibernate spring-boot datetime spring-data-jpa

我需要构建一个应用程序,从数据库获取记录,等于某个值,如果它返回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;
}

和返回 GameGameRepository:

@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/

相关文章:

java - 在抽象类中保存数据的最佳实践

java - 按名称停止运行线程

java - 无法加载驱动程序类 : com. mysql.jdbc.Driver Spring Boot

java - Hazelcast MapStore 作为 Spring 组件

java - 无法在 Spring Boot 中注册 Gson TypeAdapter

java - Tomcat 6.0.x 配置HTTP

javarabbitmq带有Executor线程,创建的线程保持运行。如何确保线程被杀死?

mysql - 当项目同时使用 MySQL 和 PostgreSQL 时,从 JsonStringType 切换到 JsonBinaryType

java - 过滤延迟初始化集合

json - 在 Quarkus 的 REST Web 服务中返回 JSON 时出现 LazyInitializationException