Saya mengkonfirmasi bahwa hanya mengubah tabel urutan MyISAM ke InnoDB menyebabkan kunci pembaruan dibuat pada tabel urutan setelah update...set...=last_insert_id() pernyataan tetapi sebelum transaksi telah dilakukan. Kunci ini tidak dibuat saat menggunakan urutan MyISAM. Jadi pendekatan "mudah" dapat berdampak negatif pada kinerja.
Inilah yang saya dapatkan. Tidak yakin bahwa ini adalah cara termudah, tetapi berhasil.
- Per ini
jawab, jatuhkan tabel urutan yang ada dan definisikan ulang dengan satu kolom
uid BIGINT(20) UNSIGNED NOT NULL PRIMARY KEY auto_increment - Buat prosedur tersimpan yang:a) mengambil nama urutan sebagai argumen, b) memasukkan ke dalam urutan, dan c) mengembalikan LAST_INSERT_ID()
- Tulis kelas java yang memperluas
MySQLMaxValueIncrementerdan memanggil prosedur tersimpan digetNextKey()metode. Saya menggunakanSimpleJdbcCallcontoh untuk melakukan ini. - Tulis kelas java yang mengimplementasikan
DataFieldMaxValueIncrementerFactorydan mengembalikan sebuah instance dari langkah #3 darigetIncrementer()metode - Dalam konfigurasi batch, perbarui
org.springframework.batch.core.repository.support.JobRepositoryFactoryBeankonfigurasi untuk menggunakan pabrik penambah dari langkah #4