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
MySQLMaxValueIncrementer
dan memanggil prosedur tersimpan digetNextKey()
metode. Saya menggunakanSimpleJdbcCall
contoh untuk melakukan ini. - Tulis kelas java yang mengimplementasikan
DataFieldMaxValueIncrementerFactory
dan mengembalikan sebuah instance dari langkah #3 darigetIncrementer()
metode - Dalam konfigurasi batch, perbarui
org.springframework.batch.core.repository.support.JobRepositoryFactoryBean
konfigurasi untuk menggunakan pabrik penambah dari langkah #4