spring
, spring-data
, spring-cronjobs
및 java-mail
을 사용하고 있습니다. 나는 즉시 테이블에있는 변경 사항을 my-sql
데이터베이스에 스캔하고 변경 사항과 관련하여 관리자에게 메일을 보내야한다는 요구 사항이 있습니다.봄을 사용하여 데이터베이스 변경 사항을 동적으로 추적하는 방법은 무엇입니까?
내가 이것을 달성하기 위해하고있는 것은 테이블의 모든 변경 사항을 검사하는 cronjob을 실행하는 것입니다. 그러나 테이블이 금전적 인 트랜잭션과 관련되어 있고 많은 자원을 응용 프로그램으로 사용하므로 무거운 프로세스입니다 너무 느립니다.
그래서 데이터베이스의 현재 변경 사항을 추적 할 수있는 더 나은 프로세스가 있습니까? 예를 들어, 봄에 관찰자를 설정하여 데이터베이스 변경 프로세스를 시작하는 방법이 있다면 도움이 될 것입니다.
다음은 내가 스캔중인 테이블의 엔티티 샘플입니다.
/** Import statements **/
@Entity
public class UserWalletTransaction {
@Id
@GeneratedValue
private Long Id;
private String toAccount;
@ManyToOne(fetch = FetchType.LAZY)
User user;
@ManyToOne(fetch = FetchType.LAZY)
Wallet wallet;
private String senderOrMobile;
private String benificiaryName;
private String beniMobile;
private Double transferAmount;
private Double sTax;
private Double charge;
private Double netAmount;
private String apiTId;
private String apiComment;
private String agentId;
private Double apiSTax;
private Double apiCharge;
private Double apiNetAmount;
private Double apiBalanceAmount;
private String transactionMode;
private String bankName;
private String userTrackId;
private String referenceNumber;
private String operatorDescription;
private String mobileNumber;
private String rechargeDateTime;
private String operatorTransactionId;
private String hermesPnr;
private String utId;
private String status;
private Double previousAmount;
private Double balanceAmount;
private Double amountTransacted;
private String transactionType;
private boolean isRaised;
private boolean isRefunded;
@Column(name = "created_by")
private String createdBy;
@Column(name = "created_date")
private Date createdDate;
@Column(name = "updated_by")
private String updatedBy;
@Column(name = "updated_date")
private Date updatedDate;
private String operationPerformed;
@OneToOne
private UserWalletTransaction relationalTransaction;
private String errorComments;
@OneToOne
private User debitUser;
@OneToOne
private User creditUser;
@OneToOne
private ServiceProvider serviceProvider;
@OneToOne
private RefundRequest refundRequests;
..... Getters and setters......
}
그리고 다음은 데이터베이스 스캔 후 메일을 실행하는 데 사용하는 샘플 크론 작업입니다.
/** Import statements **/
@Component
@EnableScheduling
public class ValidateCron {
@Autowired
RechargeService rechargeService;
@Scheduled(fixedDelay = 2)
public void demoServiceMethod() {
// Perform tasks related to scan and track the number of records added //after the previous scan. Fire a mail if any change in the database is found.
}
}
이 기능의 성능을 향상시킬 수있는 방법을 알려주십시오. 미리 감사드립니다.
최대 절전 모드 인터셉터를 둘러 보셨습니까? https://docs.jboss.org/hibernate/orm/4.0/manual/en-US/html/events.html – GPI
정보를 제공해 주셔서 감사합니다. 이것은 도움이 될 것 같습니다. 나는 몇 가지 예를 시도 할 것이다. 몇 가지 예를 들어 주시면 도움이 될 것입니다. –
왜이 용도로 방아쇠를 사용하지 않습니까? 매번 테이블을 스캔하는 것보다 더 나은 솔루션 인 것 같습니다. –