स्प्रिंग बूट स्टार्टअप समय को गति दें


115

मेरे पास एक स्प्रिंग बूट एप्लिकेशन है। मैंने बहुत सारी निर्भरताएं जोड़ी हैं (दुर्भाग्य से, लगता है कि मुझे उन सभी की आवश्यकता है) और स्टार्टअप का समय काफी बढ़ गया। सिर्फ SpringApplication.run(source, args)10 सेकंड का समय ले रहा है ।

हालांकि इसकी तुलना "उपयोग" करने के लिए बहुत अधिक नहीं हो सकती है, मैं दुखी हूं कि यह बहुत अधिक लेता है, क्योंकि यह विकास प्रवाह को तोड़ता है। इस बिंदु पर आवेदन खुद ही छोटा है, इसलिए मेरा मानना ​​है कि अधिकांश समय अतिरिक्त निर्भरता से संबंधित है, न कि ऐप कक्षाओं से।

मुझे लगता है कि समस्या वर्गपथ स्कैनिंग है, लेकिन मुझे यकीन नहीं है कि कैसे:

  • पुष्टि करें कि यह मुद्दा है (यानी स्प्रिंग बूट को "डिबग" कैसे करें)
  • यदि यह वास्तव में कारण है, तो मैं इसे कैसे सीमित कर सकता हूं, इसलिए यह तेज हो जाता है? उदाहरण के लिए, अगर मुझे पता है कि कुछ निर्भरता या पैकेज में ऐसा कुछ भी नहीं है जिसे स्प्रिंग को स्कैन करना चाहिए, तो क्या इसे सीमित करने का एक तरीका है?

मेरा मानना ​​है कि स्टार्टअप के दौरान स्प्रिंग को समांतर बीन इनिशियलाइज़ करने से चीजों को गति मिलेगी, लेकिन यह वृद्धि अनुरोध 2011 से खुला है, बिना किसी प्रगति के। मैं स्वयं स्प्रिंग बूट में कुछ अन्य प्रयास देखता हूं, जैसे कि टॉमकैट जारस्कैनिंग गति में सुधार की जांच करें , लेकिन यह टॉमकैट विशिष्ट है और इसे छोड़ दिया गया है।

यह लेख:

यद्यपि एकीकरण परीक्षणों के उद्देश्य से, उपयोग करने का सुझाव देता है lazy-init=true, हालांकि मुझे नहीं पता कि जावा कॉन्फ़िगरेशन का उपयोग करके स्प्रिंग बूट में सभी सेम पर यह कैसे लागू किया जाए - यहां कोई संकेत?

किसी भी (अन्य) सुझावों का स्वागत किया जाएगा।


अपना कोड पोस्ट करें। आमतौर पर केवल पैकेज जिसे एप्लिकेशन रनर परिभाषित किया जाता है, स्कैन किया जाता है। यदि आपके पास @ComponentScanउन लोगों के लिए अन्य पैकेज परिभाषित हैं जो स्कैन किए गए हैं। एक और बात यह सुनिश्चित करने के लिए है कि आपने डिबग या ट्रेस लॉगिंग को सक्षम नहीं किया है क्योंकि आमतौर पर लॉगिंग धीमी है, बहुत धीमी है।
एम। दीनुम

यदि आप हाइबरनेट का उपयोग करते हैं, तो यह अनुप्रयोग प्रारंभ में महत्वपूर्ण समय खाने के लिए जाता है।
नॉट फोर्कलसर्ड

फैक्ट्री बीन्स के साथ युग्मित प्रकार से स्प्रिंग के ऑटो बाइंडिंग में धीमी गति से होने की क्षमता है जिससे आप बहुत अधिक बीन्स और निर्भरता जोड़ते हैं।
नॉट फ़ॉर्कलसर्ड

या फिर आप कैशिंग उपयोग कर सकते हैं, spring.io/guides/gs/caching
Cassian

2
सभी टिप्पणियों के लिए धन्यवाद - मैं दुर्भाग्य से (बहुत सारे आंतरिक जार) कोड को पोस्ट नहीं कर पाऊंगा, हालांकि मैं अभी भी इसे डिबग करने का एक तरीका ढूंढ रहा हूं। हां, मैं ए या बी या एक्स या वाई का उपयोग कर रहा हूं, जो इसे धीमा कर देता है। मैं यह कैसे निर्धारित करूं? यदि मैं एक निर्भरता X जोड़ता हूं, जिसमें 15 संक्रमणीय निर्भरताएं हैं, तो मुझे कैसे पता चलेगा कि उन 16 में से किसने इसे धीमा कर दिया? अगर मुझे पता चल सके, तो क्या मैं बाद में स्प्रिंग को रोकने के लिए कुछ भी कर सकता हूं? जैसे बिंदु उपयोगी होंगे!
लगातार बारिश

जवाबों:


61

स्प्रिंग बूट बहुत सारे ऑटो-कॉन्फ़िगरेशन करता है जिनकी आवश्यकता नहीं हो सकती है। इसलिए आप केवल अपने ऐप के लिए आवश्यक ऑटो-कॉन्फ़िगरेशन को कम कर सकते हैं। शामिल ऑटो-कॉन्फ़िगरेशन की पूरी सूची देखने के लिए, बस org.springframework.boot.autoconfigureDEBUG मोड ( logging.level.org.springframework.boot.autoconfigure=DEBUGइन application.properties) में लॉगिंग चलाएं । एक अन्य विकल्प विकल्प के साथ स्प्रिंग बूट एप्लिकेशन चलाना --debugहै:java -jar myproject-0.0.1-SNAPSHOT.jar --debug

आउटपुट में कुछ इस तरह होगा:

=========================
AUTO-CONFIGURATION REPORT
=========================

इस सूची का निरीक्षण करें और केवल ऑटोकॉन्फ़िगरेशन शामिल करें जो आपको चाहिए:

@Configuration
@Import({
        DispatcherServletAutoConfiguration.class,
        EmbeddedServletContainerAutoConfiguration.class,
        ErrorMvcAutoConfiguration.class,
        HttpEncodingAutoConfiguration.class,
        HttpMessageConvertersAutoConfiguration.class,
        JacksonAutoConfiguration.class,
        ServerPropertiesAutoConfiguration.class,
        PropertyPlaceholderAutoConfiguration.class,
        ThymeleafAutoConfiguration.class,
        WebMvcAutoConfiguration.class,
        WebSocketAutoConfiguration.class,
})
public class SampleWebUiApplication {

इस ब्लॉग पोस्ट से कोड कॉपी किया गया था ।


1
क्या आपने इसे मापा है ??? क्या यह बहुत तेज था ?? मेरी राय में यह एक असाधारण मामला है, यह सुनिश्चित करने के लिए बहुत अधिक महत्वपूर्ण है कि स्प्रिंग टेस्ट संदर्भ कैश काम करता है
30

@ मैं शिकायत करता हूं कि मैंने इसे केवल अपने आवेदन पर मापा है और मेरा आवेदन 53 सेकंड में शुरू हुआ है, बिना ऑटोकॉन्फ़िगरेशन वर्गों को छोड़कर 73 सेकंड था। हालांकि मैंने ऊपर सूचीबद्ध की तुलना में कई और वर्गों को बाहर कर दिया था।
apkisbossin

सभी कॉन्फ़िगरेशन आयात करने के लिए अच्छा है। BatchConfigurerConfiguration.JpaBatchConfiguration से निपटने के लिए किसी को प्रॉजेक्ट में निर्भरता कैसे जोड़नी चाहिए? कॉन्फ़िगरेशनप्रोप्रेरिटिसेबिल्डरएंडऑटोऑनफिगरेशन # कॉन्फ़िगरेशनप्रोप्रेटीबीन्स जैसे संदर्भित तरीकों से कैसे निपटें?
user1767316

निजी विन्यास कक्षाओं से कैसे निपटें?
user1767316

44

अब तक का सबसे अधिक मत दिया गया उत्तर गलत नहीं है, लेकिन यह उस गहराई में नहीं जाता है जिसे मैं देखना पसंद करता हूं और कोई वैज्ञानिक प्रमाण प्रदान नहीं करता। स्प्रिंग बूट टीम बूट 2.0 के लिए स्टार्टअप समय को कम करने के लिए एक अभ्यास से गुज़री , और टिकट 11226 में बहुत सारी उपयोगी जानकारी है। स्थिति मूल्यांकन के लिए समय की जानकारी जोड़ने के लिए 7939 खुला एक टिकट भी है , लेकिन यह एक विशिष्ट ईटीए नहीं लगता है।

बूट स्टार्टअप डिबगिंग के लिए सबसे उपयोगी, और पद्धतिगत दृष्टिकोण डेव सीर द्वारा किया गया है। https://github.com/dsyer/spring-boot-startup-bench

मेरे पास समान उपयोग का मामला भी था, इसलिए मैंने डेव को जेएमएच के साथ माइक्रो-बेंचमार्किंग के दृष्टिकोण के साथ लिया और इसके साथ भाग गया। परिणाम बूट-बेंचमार्क परियोजना है। मैंने इसे इस तरह से डिज़ाइन किया है कि इसे किसी भी स्प्रिंग बूट एप्लिकेशन के लिए स्टार्टअप समय को मापने के लिए इस्तेमाल किया जा सकता है, जो bootJarपहले ( bootRepackageबूट 1.5 में कहा जाता है) ग्रैडल कार्य द्वारा उत्पादित निष्पादन योग्य जार का उपयोग कर रहा है । इसे उपयोग करने और प्रतिक्रिया प्रदान करने के लिए स्वतंत्र महसूस करें।

मेरे निष्कर्ष इस प्रकार हैं:

  1. सीपीयू मायने रखता है। बहुत।
  2. JVM को -Xverify से शुरू करना : कोई भी महत्वपूर्ण रूप से मदद नहीं करता है।
  3. अनावश्यक ऑटोकॉन्फ़िगरेशन को छोड़कर मदद करता है।
  4. डेव ने JVM तर्क -XX की सिफारिश की : TieredStopAtLevel = 1 , लेकिन मेरे परीक्षणों ने इसके साथ महत्वपूर्ण सुधार नहीं दिखाया। इसके अलावा, -XX:TieredStopAtLevel=1शायद आपके पहले अनुरोध को धीमा कर देगा।
  5. किया गया है रिपोर्ट होस्टनाम संकल्प धीमी गति से किया जा रहा है की, लेकिन मैं इसे क्षुधा मैं परीक्षण किया के लिए एक समस्या नहीं मिला।

1
@ user991710 यकीन नहीं होता कि यह कैसे टूट गया, लेकिन अब यह तय हो गया है। रिपोर्ट के लिए धन्यवाद।
अभिजीत सरकार

2
इसमें जोड़ने के लिए, क्या आप कृपया एक उदाहरण जोड़ सकते हैं कि कोई व्यक्ति कस्टम एप्लिकेशन के साथ आपके बेंचमार्क का उपयोग कैसे कर सकता है? क्या इसे एक परियोजना के समान जोड़ा जाना चाहिए minimal, या जार को केवल आपूर्ति की जा सकती है? मैंने पूर्व करने का प्रयास किया, लेकिन बहुत दूर नहीं निकला।
user991710

1
-Xverify:noneउत्पादन पर भागो मत क्योंकि यह कोड सत्यापन को तोड़ देता है और आप मुसीबत में भाग सकते हैं। -XX:TieredStopAtLevel=1यदि आप एक छोटी अवधि (कुछ सेकंड) के लिए कोई एप्लिकेशन चलाते हैं तो ठीक है अन्यथा यह कम उत्पादक होगा क्योंकि यह लंबे समय तक चलने वाले अनुकूलन के साथ जेवीएम प्रदान करेगा।
loicmathieu

3
oracle doc सूचियों का Use of -Xverify:none is unsupported.क्या मतलब है?
सकुरा

1
कई पूल (सुनिश्चित करने के लिए ओरेकल यूसीपी, लेकिन मेरे परीक्षण में भी Hikari और Tomcat) पूल में डेटा एन्क्रिप्ट करते हैं। मैं वास्तव में नहीं जानता कि क्या वे कनेक्शन जानकारी को एन्क्रिप्ट कर रहे हैं, या धारा को लपेट रहे हैं। बावजूद, एन्क्रिप्शन यादृच्छिक संख्या पीढ़ी का उपयोग करता है और इसलिए अत्यधिक उपलब्ध, उच्च थ्रूपुट एन्ट्रोपी स्रोत प्रदर्शन में ध्यान देने योग्य अंतर बनाता है।
डैनियल

18

स्प्रिंग बूट 2.2.M1 ने स्प्रिंग बूट में आलसी इनिशियलाइज़ेशन का समर्थन करने के लिए फीचर जोड़ा है।

डिफ़ॉल्ट रूप से, जब कोई एप्लिकेशन संदर्भ रीफ्रेश किया जा रहा होता है, तो संदर्भ में प्रत्येक बीन बनाई जाती है और इसकी निर्भरता को इंजेक्ट किया जाता है। इसके विपरीत, जब बीन की परिभाषा को प्रारंभिक रूप से आलसी होने के लिए कॉन्फ़िगर किया जाता है तो इसे बनाया नहीं जाएगा और इसकी निर्भरता को तब तक इंजेक्ट नहीं किया जाएगा जब तक कि इसकी आवश्यकता न हो।

आलसी इनिशियलाइज़ेशन सेट spring.main.lazy-initializationकरने में सक्षम करना सही है

आलसी इनिशियलाइज़ेशन को सक्षम करने के लिए आलसी इनिशियलाइज़ेशन स्टार्ट अप टाइम में महत्वपूर्ण सुधारों की पेशकश कर सकता है लेकिन कुछ उल्लेखनीय डाउनसाइड भी हैं और देखभाल के साथ इसे सक्षम करना महत्वपूर्ण है

अधिक जानकारी के लिए कृपया डॉक्टर की जाँच करें


3
यदि आप आलसी इनिशियलाइज़ेशन को सक्षम करते हैं, तो पहली बार लोडिंग सुपर फास्ट है, लेकिन जब क्लाइंट पहली बार एक्सेस कर रहा है तो कुछ देरी हो सकती है। मैं वास्तव में उत्पादन के लिए नहीं विकास के लिए इसकी सलाह देता हूं।
इसुरु देवासुरेंद्र

जैसा कि @IsuruDewasurendra ने सुझाव दिया है, यह सही तरीके से अनुशंसित तरीका नहीं है, जब ऐप लोड होना शुरू होता है तो यह विलंबता को काफी बढ़ा सकता है।
नरेन्द्र जग्गी

यह सड़क को नीचे गिरा सकता है।
अभिजीत सरकार

10

जैसा कि इस प्रश्न / उत्तर में वर्णित है, मुझे लगता है कि सबसे अच्छा तरीका यह है कि आप केवल उन लोगों को शामिल करें जिनके बारे में आपको लगता है कि आपको ज़रूरत है, उन निर्भरताओं को बाहर करें जिन्हें आप जानते हैं कि आपको ज़रूरत नहीं है।

देखें: स्प्रिंग बूट स्टार्टअप टाइम कम से कम करें

संक्षेप में:

आप यह देख सकते हैं कि कवर के तहत क्या चल रहा है और कमांड-लाइन से एप्लिकेशन शुरू करते समय डिबग को सरल-निर्दिष्ट करने के लिए लॉगिंग को सक्षम करें। आप अपने एप्लिकेशन में भी डिबग = सही निर्दिष्ट कर सकते हैं।

इसके अलावा, आप अनुप्रयोग में लॉगिंग स्तर सेट कर सकते हैं।

logging.level.org.springframework.web: DEBUG logging.level.org.hibernate: ERROR

यदि आप अपने इच्छित ऑटो-कॉन्फ़िगर मॉड्यूल का पता लगाते हैं, तो इसे अक्षम किया जा सकता है। इसके लिए दस्तावेज़ यहां देखे जा सकते हैं: http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#use-boot-diseable-pecific-auto-configuration

एक उदाहरण जैसा दिखेगा:

@Configuration
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class MyConfiguration {
}

4

वैसे यहां वर्णित संभावित कार्यों की पूरी सूची है: https://spring.io/blog/2018/12/12/how-fast-is-pring

मैं वसंत की ओर से सबसे महत्वपूर्ण नोट डालूँगा (थोड़ा सा समायोजित):

  • स्प्रिंग बूट वेब स्टार्टर्स से क्लासपथ एक्सक्लूसिव:
    • हाइबरनेट वालिडेटर
    • जैक्सन (लेकिन स्प्रिंग बूट एक्ट्यूएटर्स इस पर निर्भर करते हैं)। यदि आपको JSON रेंडरिंग की आवश्यकता हो तो Gson का उपयोग करें (केवल MVC बॉक्स से बाहर काम करता है)।
    • लॉगबैक: इसके बजाय slf4j-jdk14 का उपयोग करें
  • वसंत-संदर्भ-इंडेक्सर का उपयोग करें। यह बहुत कुछ जोड़ने वाला नहीं है, लेकिन हर छोटी मदद करता है।
  • यदि आप नहीं कर सकते हैं तो एक्चुएटर्स का उपयोग न करें।
  • स्प्रिंग बूट 2.1 और स्प्रिंग 5.1 का उपयोग करें। उपलब्ध होने पर 2.2 और 5.2 पर स्विच करें।
  • स्प्रिंग बूट कॉन्फ़िग फ़ाइल (एस) के स्थान को spring.config.location(कमांड लाइन तर्क या सिस्टम गुण आदि के साथ) ठीक करें। आईडीई में परीक्षण के लिए उदाहरण:spring.config.location=file://./src/main/resources/application.properties :।
  • यदि आपको इसकी आवश्यकता नहीं है तो JMX को बंद कर दें spring.jmx.enabled=false(यह स्प्रिंग बूट 2.2 में डिफ़ॉल्ट है)
  • डिफ़ॉल्ट रूप से बीन परिभाषाएं आलसी बनाएं। spring.main.lazy-initialization=trueस्प्रिंग बूट 2.2 ( LazyInitBeanFactoryPostProcessorपुराने स्प्रिंग के लिए उपयोग ) में एक नया झंडा है ।
  • वसा जार को अनपैक करें और एक स्पष्ट क्लासपैथ के साथ चलाएं।
  • के साथ JVM चलाएं -noverify। इसके अलावा विचार करें -XX:TieredStopAtLevel=1(जो बाद में बचाया स्टार्टअप समय की कीमत पर जेआईटी को धीमा कर देगा)।

उल्लिखित LazyInitBeanFactoryPostProcessor(आप इसे स्प्रिंग 1.5 के लिए उपयोग कर सकते हैं यदि आप spring.main.lazy-initialization=trueस्प्रिंग 2.2 से उपलब्ध ध्वज को लागू नहीं कर सकते हैं ):

public class LazyInitBeanFactoryPostProcessor implements BeanFactoryPostProcessor {

  @Override
  public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) {
      for (String beanName : beanFactory.getBeanDefinitionNames()) {
        BeanDefinition definition = beanFactory.getBeanDefinition(beanName);
        definition.setLazyInit(true);
      }
  }
}

बीन्स आरंभीकरण के समय का विश्लेषण करने के लिए आप इसका उपयोग (या अपना स्वयं का - यह सरल है) कुछ लिख सकते हैं: https://github.com/lwaddicor/spring-startup-analysis

आशा करता हूँ की ये काम करेगा!


0

मेरे मामले में, बहुत अधिक विराम बिंदु थे। जब मैंने "म्यूट ब्रेकप्वाइंट" पर क्लिक किया और डिबग मोड में एप्लिकेशन को पुनरारंभ किया, तो आवेदन 10 गुना तेजी से शुरू हुआ।


-1

यदि आप मैन्युअल परीक्षण के लिए डेवलपमेंट टर्न-अराउंड को ऑप्टिमाइज़ करने की कोशिश कर रहे हैं, तो मैं दृढ़ता से डैटूल के उपयोग की सलाह देता हूं

वसंत-बूट-देवतूलों का उपयोग करने वाले अनुप्रयोग जब भी क्लासपाथ पर फाइलें बदलते हैं, तो स्वचालित रूप से पुनरारंभ हो जाएगा।

बस recompile - और सर्वर खुद को पुनरारंभ करेगा (Groovy के लिए आपको केवल स्रोत फ़ाइल को अपडेट करने की आवश्यकता है)। यदि आप एक IDE (जैसे 'vscode') का उपयोग कर रहे हैं, तो यह स्वचालित रूप से आपकी जावा फाइलों को संकलित कर सकता है, इसलिए सिर्फ एक java फाइल को सेव करने से सर्वर रिस्टार्ट हो सकता है, अप्रत्यक्ष रूप से - और जावा इस संबंध में Groovy जैसा ही सहज हो जाता है।

इस दृष्टिकोण की सुंदरता यह है कि वृद्धिशील शॉर्ट-सर्किट को फिर से खरोंच स्टार्टअप चरणों में से कुछ को फिर से चालू करता है - इसलिए आपकी सेवा वापस हो जाएगी और बहुत तेज़ी से चल रही होगी!


दुर्भाग्य से, यह तैनाती या स्वचालित इकाई परीक्षण के लिए स्टार्टअप समय के साथ मदद नहीं करता है।


-1

चेतावनी: यदि आप स्वचालित DB स्कीमा पीढ़ी के लिए हाइबरनेट डीडीएल का उपयोग नहीं करते हैं और आप L2 कैश का उपयोग नहीं करते हैं, तो यह उत्तर आपके लिए लागू नहीं है। आगे स्क्रॉल करें।

मेरी खोज यह है कि हाइबरनेट अनुप्रयोग स्टार्टअप के लिए महत्वपूर्ण समय जोड़ता है। L2 कैश और डेटाबेस इनिशियलाइज़ेशन को अक्षम करना से स्प्रिंग स्प्रिंग ऐप स्टार्टअप में तेजी आती है। उत्पादन के लिए कैश ऑन छोड़ें और इसे अपने विकास के माहौल के लिए अक्षम करें।

application.yml:

spring:
  jpa:
    generate-ddl: false
    hibernate:
      ddl-auto: none
    properties:
      hibernate:
        cache:
          use_second_level_cache: false
          use_query_cache: false

परीक्षण के परिणाम:

  1. L2 कैश चालू है और ddl-auto: update

    INFO 5024 --- [restartedMain] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 23331 ms
    INFO 5024 --- [restartedMain] b.n.spring.Application : Started Application in 54.251 seconds (JVM running for 63.766)
  2. L2 कैश ऑफ है और ddl-auto: none

    INFO 10288 --- [restartedMain] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 9863 ms
    INFO 10288 --- [restartedMain] b.n.spring.Application : Started Application in 32.058 seconds (JVM running for 37.625)

अब मुझे आश्चर्य है कि मैं यह सब खाली समय में क्या करूंगा


hibernate.hbm2ddl.auto = अद्यतन का l2 कैश से कोई संबंध नहीं है। ddl .. = अद्यतन वर्तमान डेटाबेस स्कीमा को स्कैन करने के लिए निर्दिष्ट करता है, और अपनी संस्थाओं को प्रतिबिंबित करने के लिए स्कीमा को अपडेट करने के लिए नेक्सेसरी एसक्यूएल की गणना करता है। 'कोई नहीं' यह सत्यापन नहीं करता है (यह भी, स्कीमा को अद्यतन करने का प्रयास नहीं करता है)। बेस्ट प्रैक्टिस में लिक्विबेस जैसे उपकरण का उपयोग करना है, जहां आप अपने स्कीमा परिवर्तन को संभालेंगे, और आप उन्हें ट्रैक भी कर सकते हैं।
रादु टोडर

@RaduToader यह प्रश्न और मेरा उत्तर स्प्रिंग बूट स्टार्टअप समय को गति देने के बारे में है। उन्हें हाइबरनेट डीडीएल बनाम लिक्विबेस चर्चा से कोई लेना-देना नहीं है; इन उपकरणों में उनके पेशेवरों और विपक्ष दोनों हैं। मेरा कहना है कि हम DB स्कीमा अद्यतन को अक्षम कर सकते हैं और केवल तभी सक्षम कर सकते हैं जब आवश्यक हो। हाइबरनेट स्टार्टअप पर महत्वपूर्ण समय लेता है, तब भी जब मॉडल पिछले रन के बाद से नहीं बदला (ऑटोबिनरेटेड स्कीमा के साथ डीबी स्कीमा की तुलना करने के लिए)। यही बात L2 कैश के लिए सही है।
naXa

हां, मुझे पता है, लेकिन मेरा कहना यह था कि यह स्पष्ट नहीं है कि यह वास्तव में क्या करता है। तुम बहुत आसानी से अपने डीबी खाली के साथ समाप्त हो सकता है।
रादु तोदर

@RaduToader मेरे उत्तर में DB प्रारंभ के बारे में एक प्रलेखन पृष्ठ का लिंक था। क्या तुमने इसे पढ़ा? इसमें एक संपूर्ण मार्गदर्शक होता है, जो सभी सबसे लोकप्रिय उपकरणों (हाइबरनेट और लिकिबेस, साथ ही जेपीए और फ्लाईवे) को सूचीबद्ध करता है। आज भी मैं अपने उत्तर के शीर्ष पर स्पष्ट चेतावनी जोड़ता हूं। क्या आपको लगता है कि परिणामों की व्याख्या करने के लिए मुझे किसी अन्य परिवर्तन की आवश्यकता है?
naXa

उत्तम। धन्यवाद
राडू Toader

-3

मुझे यह अजीब लगता है कि किसी ने पहले इन अनुकूलन का सुझाव नहीं दिया। विकासशील होने पर प्रोजेक्ट बिल्ड और स्टार्टअप के अनुकूलन पर कुछ सामान्य सुझाव दिए गए हैं:

  • एंटीवायरस स्कैनर से विकास निर्देशिका को बाहर करें:
    • परियोजना निर्देशिका
    • उत्पादन निर्देशिका का निर्माण (यदि यह परियोजना निर्देशिका के बाहर है)
    • आईडीई सूचकांक निर्देशिका (उदाहरण के लिए ~ / .IntelliJIdea2018.3)
    • परिनियोजन निर्देशिका (टॉमकैट में वेबप)
  • हार्डवेयर अपग्रेड करें। तेजी से सीपीयू और रैम का उपयोग करें, बेहतर इंटरनेट कनेक्शन (निर्भरता डाउनलोड करने के लिए) और डेटाबेस कनेक्शन, एसएसडी पर स्विच करें। एक वीडियो कार्ड कोई फर्क नहीं पड़ता

चेतावनी

  1. पहला विकल्प कम सुरक्षा की कीमत के लिए आता है।
  2. दूसरा विकल्प पैसा खर्च करता है (जाहिर है)।

सवाल बूट टाइम को बेहतर बनाने के बारे में है, संकलन समय पर नहीं।
ArtOfWarfare

@ArtOfWarfare ने सवाल फिर से पढ़ा। प्रश्न में समस्या बताई गई है "मैं दुखी हूं कि इसमें इतना समय लगता है [ज्यादातर], क्योंकि यह विकास प्रवाह को तोड़ देता है"। मुझे लगा कि यह एक प्राथमिक समस्या है और इसे अपने उत्तर में संबोधित किया है।
naXa

-9

मुझे लगता है कि आप गलत कॉन्फ़िगरेशन सेटिंग का उपयोग कर रहे हैं। MyContainer और संभावित संघर्षों की जाँच करके प्रारंभ करें। यह निर्धारित करने के लिए कि आपको एक समय में प्रत्येक निर्भरता के लिए मेमोरी मैप्स (डेटा की मात्रा देखें!) की जांच करने के लिए सबसे अधिक संसाधनों का उपयोग कौन कर रहा है - और इसके लिए बहुत समय लगता है, साथ ही ... (और SUDO विशेषाधिकार)। वैसे: क्या आप आमतौर पर निर्भरता के खिलाफ कोड का परीक्षण कर रहे हैं?

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.