2010-08-09 16 views
6

मैं वसंत 3.0 SimpleJdbcTemplate का उपयोग करने की कोशिश कर रहा हूं और इसमें 1500 रिकॉर्ड डालने में 5 मिनट लगते हैं, जबकि यह मुझे कुछ सेकेंड लेता है। सीधे जेडीबीसी का उपयोग करने के लिए डालने के लिए। निश्चित नहीं कि मुझसे कौन सी गलती हो रही है।वसंत जेडीबीसी बनाम जेडीबीसी

+1

क्या आप अपना कोड पिछले कर सकते हैं? – dierre

+6

यह कोई सवाल नहीं है, न ही यह जांचने के लिए हमारे लिए कोई कोड प्रदान करता है, आप हमारी मदद करने के लिए हमारी अपेक्षा कैसे करते हैं? कृपया अधिक जानकारी प्रदान करने पर विचार करें। – Andrew

+0

यह नहीं कह रहा कि इसमें 5 मिनट लगाना चाहिए, लेकिन जब आप "सीधे जेडीबीसी" के शीर्ष पर किसी भी ढांचे का उपयोग करते हैं तो देरी होगी। अपने प्रश्न/कोड पोस्ट करें ताकि हम देख सकें कि क्या हो रहा है। –

उत्तर

6

यदि आप बैच बना रहे हैं तो स्प्रिंग बैच - JdbcBatchItemWriter का उपयोग उचित चंक आकार सेटिंग्स के साथ करने पर विचार करें, जो इन 1500 रिकॉर्ड्स को एक सेकंड से भी कम समय में लोड करेगा।

1

कुछ बातें लायक जाँच:

  • भूमि के ऊपर लेनदेन आवेदन स्तर पर वसंत द्वारा प्रबंधित पर हो सकता है। देखें कि आप किस प्रकार का लेनदेन प्रबंधक उपयोग कर रहे हैं (नाम transactionManager नाम के साथ एक बीन देखें)। यदि आप जेटीए का उपयोग कर रहे हैं, तो शायद यह आपकी समस्या है। चूंकि यह जेडीबीसी के साथ तेजी से है क्योंकि बाधा डीबी नहीं लगती है।
  • इस ऐप के लेन-देन का उपयोग करने के तरीके के आधार पर, यह सभी 1500 अनुरोधों को पूरा करने से पहले स्मृति में सब कुछ हो सकता है और काम करता है। क्या आप स्मृति उपयोग में एक बड़ा अंतर देखते हैं (वसंत एक बहुत अधिक होना चाहिए)?
  • आप किसी भी मामले में किस प्रकार का डीबी कनेक्शन पूल उपयोग कर रहे हैं?

त्वरित तरीका है अपने एप्लिकेशन प्रोफ़ाइल:

pid - "jps -l"

मेमोरी प्राप्त करें: jmap -histo PID

चेक क्या हुड के नीचे हो रहा है (जाँच वहाँ स्मृति रिसाव के कुछ फार्म है): jstack PID (धीमी या पुनरावर्ती विधि कॉल देखें)

-2

का उपयोग करने के बारे में कैसे करें
jdbcTemplate.batchUpdate(new String[]{sql}); 
संबंधित मुद्दे