在 Spring Boot 中,你可以使用 Spring Data JPA 以及 Spring Data 的事件機制來監聽 MySQL 資料庫資料的變化。
具體步驟如下:
- 添加 Maven 依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
- 建立一個實體類,并在該實體類中添加 @Entity 相關注解,同時在實體類的屬性上添加 @Column 注解,以表示對應的列名。
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
// getters and setters
}
- 建立一個 UserRepository 接口,繼承自 JpaRepository 接口,并添加一個自定義方法,用于查詢所有使用者。
public interface UserRepository extends JpaRepository<User, Long> {
@Query("select u from User u")
List<User> findAllUsers();
}
- 建立一個事件監聽器,用于監聽資料變化。
@Component
public class UserChangeListener {
private final UserRepository userRepository;
public UserChangeListener(UserRepository userRepository) {
this.userRepository = userRepository;
}
@EventListener
public void handleUserChangeEvent(UserChangedEvent event) {
System.out.println("User change event: " + event);
List<User> users = userRepository.findAllUsers();
// do something with the list of users
}
}
- 建立一個自定義事件,用于觸發監聽器。
public class UserChangedEvent extends ApplicationEvent {
public UserChangedEvent(Object source) {
super(source);
}
}
- 在資料變化時,建立一個 UserChangedEvent 執行個體,并釋出事件。
@Service
public class UserService {
private final UserRepository userRepository;
private final ApplicationEventPublisher eventPublisher;
public UserService(UserRepository userRepository, ApplicationEventPublisher eventPublisher) {
this.userRepository = userRepository;
this.eventPublisher = eventPublisher;
}
public void saveUser(User user) {
userRepository.save(user);
eventPublisher.publishEvent(new UserChangedEvent(this));
}
public void updateUser(User user) {
userRepository.save(user);
eventPublisher.publishEvent(new UserChangedEvent(this));
}
public void deleteUser(Long userId) {
userRepository.deleteById(userId);
eventPublisher.publishEvent(new UserChangedEvent(this));
}
}
當你在執行 UserService 的 saveUser、updateUser 或者 deleteUser 方法時,會觸發 UserChangeListener 中的 handleUserChangeEvent 方法,進而監聽到 MySQL 資料庫資料的變化。
需要注意的是,該方法隻能監聽到應用程式内部的資料庫操作,無法監聽到外部的資料庫操作。如果需要監聽到外部的資料庫操作,可以考慮使用 MySQL 的 binlog 日志。