मैंने पुष्टि की है कि केवल MyISAM अनुक्रम तालिकाओं को InnoDB में बदलने से update...set...=last_insert_id()
के बाद अनुक्रम तालिकाओं पर अद्यतन ताले बन जाते हैं। बयान लेकिन लेनदेन से पहले प्रतिबद्ध किया गया है। MyISAM अनुक्रमों का उपयोग करते समय ये ताले नहीं बनाए जाते हैं। तो "आसान" दृष्टिकोण प्रदर्शन पर नकारात्मक प्रभाव डाल सकता है।
यहाँ मैं क्या लेकर आया हूँ। सुनिश्चित नहीं है कि यह सबसे आसान तरीका है, लेकिन यह काम कर रहा है।
- प्रति यह
उत्तर दें, मौजूदा अनुक्रम तालिकाओं को छोड़ दें और उन्हें एक कॉलम के साथ फिर से परिभाषित करें
uid BIGINT(20) UNSIGNED NOT NULL PRIMARY KEY auto_increment
- एक संग्रहीत कार्यविधि बनाएं जो:a) अनुक्रम नाम को तर्क के रूप में लेता है, b) अनुक्रम में सम्मिलित करता है, और c) LAST_INSERT_ID() देता है
- एक जावा वर्ग लिखें जो
MySQLMaxValueIncrementer
का विस्तार करता हो और संग्रहीत कार्यविधि कोgetNextKey()
. में कॉल करता है तरीका। मैं एकSimpleJdbcCall
. का उपयोग कर रहा हूँ ऐसा करने के लिए उदाहरण। - एक जावा वर्ग लिखें जो
DataFieldMaxValueIncrementerFactory
को लागू करता है और चरण #3 सेgetIncrementer()
. से एक उदाहरण देता है विधि - बैच कॉन्फ़िगरेशन में,
org.springframework.batch.core.repository.support.JobRepositoryFactoryBean
को अपडेट करें चरण #4 से वृद्धिशील फ़ैक्टरी का उपयोग करने के लिए कॉन्फ़िगरेशन