Tôi xác nhận rằng việc chỉ thay đổi bảng trình tự MyISAM thành InnoDB khiến các khóa cập nhật được tạo trên các bảng trình tự sau khi update...set...=last_insert_id() tuyên bố nhưng trước khi giao dịch đã được cam kết. Các khóa này không được tạo khi sử dụng chuỗi MyISAM. Vì vậy, cách tiếp cận "dễ dàng" có thể có tác động tiêu cực đến hiệu suất.
Đây là những gì tôi nghĩ ra. Không chắc rằng đây là cách dễ nhất, nhưng nó đang hoạt động.
- Per điều này
trả lời, thả các bảng trình tự hiện có và xác định lại chúng bằng một cột duy nhất
uid BIGINT(20) UNSIGNED NOT NULL PRIMARY KEY auto_increment - Tạo một thủ tục được lưu trữ:a) lấy tên chuỗi làm đối số, b) chèn vào chuỗi và c) trả về LAST_INSERT_ID ()
- Viết một lớp java mở rộng
MySQLMaxValueIncrementervà gọi thủ tục được lưu trữ tronggetNextKey()phương pháp. Tôi đang sử dụngSimpleJdbcCallví dụ để làm điều này. - Viết một lớp java triển khai
DataFieldMaxValueIncrementerFactoryvà trả về một phiên bản từ bước # 3 từgetIncrementer()phương pháp - Trong cấu hình lô, cập nhật
org.springframework.batch.core.repository.support.JobRepositoryFactoryBeancấu hình để sử dụng nhà máy sản xuất bộ tăng từ bước # 4