স্প্রিং বুট প্রারম্ভকালীন সময়ের গতি বাড়ান


115

আমার একটি স্প্রিং বুট অ্যাপ্লিকেশন রয়েছে। আমি প্রচুর নির্ভরতা যুক্ত করেছি (দুর্ভাগ্যবশত, আমার এগুলির সবগুলি প্রয়োজন বলে মনে হচ্ছে) এবং প্রারম্ভকালীন সময়টি অনেক বেশি এগিয়ে গেল। মাত্র SpringApplication.run(source, args)10 সেকেন্ড সময় নেয়।

যদিও এটি "ব্যবহৃত" এর সাথে তুলনা করা যায় না, তবে আমি অসন্তুষ্ট যে এটি অনেক বেশি নেয়, বেশিরভাগ কারণ এটি বিকাশের প্রবাহকে ভঙ্গ করে। অ্যাপ্লিকেশন নিজেই এই মুহুর্তের তুলনায় ছোট so তাই আমি ধরে নিই যে বেশিরভাগ সময় অ্যাড নির্ভরতাগুলির সাথে সম্পর্কিত, অ্যাপ্লিকেশন শ্রেণিগুলি তাদের সাথে নয়।

আমি ধরে নিলাম যে বিষয়টি ক্লাসপাথ স্ক্যানিং, তবে কীভাবে করবেন তা সম্পর্কে আমি নিশ্চিত নই:

  • বিষয়টি নিশ্চিত করুন (যেমন স্প্রিং বুটটি কীভাবে "ডিবাগ করবেন")
  • যদি এটি সত্যিই কারণ হয় তবে আমি কীভাবে এটি সীমাবদ্ধ করতে পারি, তাই এটি দ্রুত হয়? উদাহরণস্বরূপ, যদি আমি জানি যে কিছু নির্ভরতা বা প্যাকেজে এমন কিছু নেই যা বসন্তের স্ক্যান করা উচিত, তবে সেটিকে সীমাবদ্ধ করার কোনও উপায় আছে কি?

আমি ধরে নিয়েছি যে প্রারম্ভকালীন সময়ে সমান্তরাল শিমের সূচনা করার জন্য বসন্তকে বাড়ানো জিনিসগুলিকে গতি বাড়িয়ে তুলবে, তবে সেই বর্ধনের অনুরোধটি কোনও অগ্রগতি ছাড়াই ২০১১ সাল থেকে উন্মুক্ত open আমি স্প্রিং বুটে নিজেই অন্যান্য কিছু প্রচেষ্টা দেখতে পাচ্ছি, যেমন টমক্যাট জারস্ক্যানিংয়ের গতির উন্নতিগুলি তদন্ত করুন , তবে এটি টমক্যাট নির্দিষ্ট এবং এটি পরিত্যাগ করা হয়েছে।

এই নিবন্ধটি:

যদিও ইন্টিগ্রেশন টেস্টের লক্ষ্য হিসাবে, ব্যবহারের পরামর্শ দেয় lazy-init=true, তবে জাভা কনফিগারেশন ব্যবহার করে স্প্রিং বুটে সমস্ত মটরশুটিগুলিতে এটি কীভাবে প্রয়োগ করতে হয় তা আমি জানি না - এখানে কোনও পয়েন্টার?

যে কোনও (অন্যান্য) পরামর্শ স্বাগত হবে।


আপনার কোড পোস্ট করুন। সাধারণত অ্যাপ্লিকেশন রানার সংজ্ঞায়িত প্যাকেজটিই স্ক্যান করা হয়। আপনার যদি অন্য প্যাকেজগুলি সংজ্ঞায়িত করা @ComponentScanথাকে তবে এটিও স্ক্যান করা আছে। আরেকটি বিষয় হ'ল সাধারণভাবে লগিং ধীর, খুব ধীর হওয়ায় আপনি ডিবাগ বা ট্রেস লগিং সক্ষম করেন নি তা নিশ্চিত করা।
এম। ডিনুম

আপনি যদি হাইবারনেট ব্যবহার করেন তবে এটি অ্যাপ্লিকেশন শুরুতে উল্লেখযোগ্য সময় খেতে ঝোঁক।
নট ফোর্কালস্রুড

কারখানার মটরশুটিের সাথে মিলিত স্প্রিংয়ের অটো বাইন্ডিংয়ের সাথে ধীরে ধীরে ধীরে ধীরে হ্রাস হওয়ার সম্ভাবনা রয়েছে যা আপনি প্রচুর পরিমাণে মটরশুটি এবং নির্ভরতা যুক্ত করেন।
নট ফোরকালসারুদ

অথবা আপনি ক্যাচিং, বসন্ত.io
ক্যাসিয়ান

2
মন্তব্যের জন্য সকলকে ধন্যবাদ - আমি দুর্ভাগ্যবশত কোডটি পোস্ট করতে সক্ষম হবো না (প্রচুর অভ্যন্তরীণ জার), তবে আমি এখনও এটি ডিবাগ করার উপায় খুঁজছি। হ্যাঁ, আমি সম্ভবত A বা B ব্যবহার করছি বা এক্স বা ওয়াই করছিলাম যা এটি ধীর করে দেয়। আমি এটি কীভাবে নির্ধারণ করব? যদি আমি একটি নির্ভরতা এক্স যোগ করি, যার 15 টি ট্রানসিটিভ নির্ভরতা রয়েছে, তবে আমি কীভাবে জানব যে 16 টির মধ্যে কোনটি এটি ধীর করে দিয়েছে? যদি আমি এটি জানতে পারি, স্প্রিংকে তাদের পরীক্ষা করা থেকে বিরত রাখতে আমি পরে কিছু করতে পারি কি? এর মতো পয়েন্টারগুলি কার্যকর হবে!
অবিচ্ছিন্ন বৃষ্টি 12

উত্তর:


61

স্প্রিং বুট প্রচুর পরিমাণে অটো-কনফিগারেশন করে যা প্রয়োজন হতে পারে না। সুতরাং আপনি আপনার অ্যাপ্লিকেশনের জন্য প্রয়োজনীয় কেবলমাত্র স্বতঃ-কনফিগারেশন সংকুচিত করতে চাইতে পারেন। অন্তর্ভুক্ত স্বতঃ-কনফিগারেশনের সম্পূর্ণ তালিকাটি দেখতে, কেবল org.springframework.boot.autoconfigureডিইবিইউজি মোডে ( 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
আপনি কি এটি পরিমাপ করেছেন ??? এটা কি খুব দ্রুত ছিল ?? আমার মতে এটি একটি ব্যতিক্রমী মামলা, স্প্রিং পরীক্ষার প্রসঙ্গে ক্যাশে কাজ করে তা নিশ্চিত করা আরও অনেক গুরুত্বপূর্ণ
idmitriev

@ এডমিটারেভ আমি মাত্র আমার অ্যাপ্লিকেশনটিতে এটি পরিমাপ করেছি এবং স্বতঃরক্তকরণের ক্লাসগুলি বাদ না দিয়ে আমার অ্যাপ্লিকেশনটি 53 সেকেন্ডে শুরু হয়েছিল was৩ সেকেন্ড। আমি উপরে তালিকাভুক্ত চেয়ে অনেক বেশি ক্লাস বাদ দিয়েছি।
apkisbossin

সমস্ত কনফিগারেশন আমদানি করে ভালো লাগছে। ব্যাচকনফিগুরার কনফিগারেশনের সাথে কীভাবে ডিল করবেন? জেপাব্যাচ কনফিগারেশনের একজনের কী প্রজেক্টের উপর নির্ভরতা যুক্ত করা উচিত? কনফিগারেশনপ্রোটারিবিন্ডআউটো কনফিগারেশন # কনফিগারেশনপ্রেটিসবিয়ানসের মতো রেফারেন্সযুক্ত পদ্ধতিগুলির সাথে কীভাবে মোকাবিলা করবেন?
ব্যবহারকারী 1767316

বেসরকারী কনফিগারেশন ক্লাসগুলি কীভাবে মোকাবেলা করবেন?
ব্যবহারকারী 1767316

44

এখন পর্যন্ত সর্বাধিক ভোট দেওয়া উত্তরটি ভুল নয়, তবে এটি যে গভীরতা আমি দেখতে পছন্দ করি তার মধ্যে যায় না এবং এটি কোনও বৈজ্ঞানিক প্রমাণ দেয় না। বসন্ত বুট দল বুট ২.০-এর জন্য প্রারম্ভকালীন সময় হ্রাস করার জন্য অনুশীলন করেছিল এবং টিকিট 11226 তে প্রচুর দরকারী তথ্য রয়েছে। শর্ত মূল্যায়নের সময়সীমা সম্পর্কিত তথ্য যুক্ত করার জন্য একটি টিকিটও 79৯৯৯ খোলা আছে, তবে এটির কোনও নির্দিষ্ট ইটিএ আছে বলে মনে হয় না।

ডিবাগিং বুট প্রারম্ভের জন্য সর্বাধিক দরকারী এবং পদ্ধতিগত পদ্ধতি ডেভ সিয়ার দ্বারা সম্পন্ন হয়েছে। https://github.com/dsyer/spring-boot-startup-bench

আমারও একইরকম ব্যবহারের ঘটনা ছিল, তাই আমি জেএমএইচের সাথে মাইক্রো-বেঞ্চমার্কিংয়ের জন্য ডেভের দৃষ্টিভঙ্গি নিয়েছিলাম এবং এটির সাথে দৌড়ে এসেছি। ফলাফলটি বুট-বেঞ্চমার্ক প্রকল্প। আমি এটি এমনভাবে তৈরি করেছি যাতে এটি যে কোনও স্প্রিং বুট অ্যাপ্লিকেশনটির জন্য প্রারম্ভকালীন সময় পরিমাপ করতে ব্যবহার করা যেতে পারে, এক্সিকিউটেবল জার ব্যবহার করে bootJar(পূর্বে bootRepackageবুট 1.5 তে ডাকা হত) গ্রেডল টাস্ক দ্বারা উত্পাদিত । এটি নিখরচায় ব্যবহার করুন এবং প্রতিক্রিয়া জানান provide

আমার অনুসন্ধানগুলি নিম্নরূপ:

  1. সিপিইউ বিষয়গুলি। অনেক.
  2. JVM -Xverify দিয়ে শুরু করা : কোনওটিই উল্লেখযোগ্যভাবে সহায়তা করে না
  3. অপ্রয়োজনীয় স্বতঃসিদ্ধকরণগুলি বাদ দিয়ে সহায়তা করে।
  4. ডেভ জেভিএম যুক্তি -XX- এর প্রস্তাব দিয়েছিল: টায়ার্ডসটপএটলিভেল = 1 , তবে আমার পরীক্ষাগুলি সেটির সাথে উল্লেখযোগ্য উন্নতি দেখায়নি। এছাড়াও, -XX:TieredStopAtLevel=1সম্ভবত আপনার প্রথম অনুরোধটি ধীর করবে।
  5. হোস্টনাম রেজোলিউশনটি ধীর হয়ে যাওয়ার খবর পাওয়া গেছে, তবে আমি যে অ্যাপ্লিকেশনগুলি পরীক্ষা করেছি সেগুলিতে এটি কোনও সমস্যা বলে মনে হয়নি।

1
@ user991710 এটি কীভাবে ভেঙেছিল তা নিশ্চিত নয় তবে এটি এখনই ঠিক হয়ে গেছে। প্রতিবেদনের জন্য ধন্যবাদ।
অভিজিৎ সরকার

2
এটি যুক্ত করার জন্য, আপনি দয়া করে কোনও কাস্টম অ্যাপ্লিকেশন দিয়ে আপনার মানদণ্ডটি কীভাবে ব্যবহার করতে পারেন তার একটি উদাহরণ যোগ করতে পারেন? এটির মতোই প্রকল্প হিসাবে যুক্ত করতে হবে minimal, বা জারটি কেবল সরবরাহ করা যেতে পারে? আমি প্রাক্তনটি করার চেষ্টা করেছিলাম কিন্তু খুব একটা পেলাম না।
ব্যবহারকারী 991710

1
চালাবেন না -Xverify:noneউৎপাদনের উপর যেমন কোড যাচাইকরণ ভঙ্গ এবং আপনার কষ্ট রান করতে পারেন। -XX:TieredStopAtLevel=1আপনি যদি অল্প সময়ের জন্য (কয়েক সেকেন্ড) কোনও অ্যাপ্লিকেশন চালান ঠিক আছে তবে তা কম উত্পাদনশীল হবে কারণ এটি জেভিএমকে দীর্ঘ চলমান অপটিমাইজেশন সরবরাহ করবে।
loicmathieu

3
ওরাকল ডকটি তালিকাভুক্ত Use of -Xverify:none is unsupported.করে এর অর্থ কী?
সাকুরা

1
অনেক পুল (নিশ্চিতভাবে ওরাকল ইউসিপি, তবে আমার পরীক্ষায় হিকারি এবং টোম্যাট) পুলে এনক্রিপ্ট ডেটা। আমি আসলে জানি না যে তারা সংযোগের তথ্য এনক্রিপ্ট করছে, বা স্ট্রিমটি মোড়ানো করছে। নির্বিশেষে, এনক্রিপশন এলোমেলো সংখ্যা জেনারেশন ব্যবহার করে এবং তাই অত্যন্ত উপলব্ধ, উচ্চ থ্রুপুট এনট্রপি উত্সটি পারফরম্যান্সে লক্ষণীয় পার্থক্য তৈরি করে।
ড্যানিয়েল

18

স্প্রিং বুট 2.2.M1 স্প্রিং বুটে অলস সূচনাটি সমর্থন করার জন্য বৈশিষ্ট্য যুক্ত করেছে।

ডিফল্টরূপে, যখন কোনও অ্যাপ্লিকেশন প্রসঙ্গটি রিফ্রেশ করা হয়, প্রসঙ্গে প্রতিটি বিন তৈরি করা হয় এবং এর নির্ভরতা ইনজেকশন করা হয়। বিপরীতে, যখন শিমের সংজ্ঞাটি অলসভাবে শুরু করার জন্য কনফিগার করা হয় তখন এটি তৈরি করা হবে না এবং এটির নির্ভরতা যখন না প্রয়োজন ততক্ষণ ইনজেকশনের ব্যবস্থা করা হবে না।

অলস সূচনা সক্ষম করা হলে তা সেট spring.main.lazy-initializationকরতে সত্য

কখন অলস ইনিশিয়ালাইজেশন সক্ষম করবেন অলস সূচনাটি শুরু সময়ের মধ্যে উল্লেখযোগ্য উন্নতি দিতে পারে তবে কিছু উল্লেখযোগ্য ডাউনসাইডও রয়েছে এবং যত্ন সহকারে এটি সক্ষম করা জরুরী

আরও তথ্যের জন্য দয়া করে ডক পরীক্ষা করুন


3
যদি আপনি অলস সূচনা সক্ষম করে থাকেন তবে প্রথমবারের লোডিং দ্রুততর হয় তবে ক্লায়েন্ট যখন প্রথমবার অ্যাক্সেস করে তখন কিছুটা বিলম্ব লক্ষ্য করতে পারে। আমি সত্যিই এটি উন্নয়নের জন্য নয় উন্নয়নের জন্য সুপারিশ করছি।
ইসুরু দেউসসেন্দ্র

@ ইসুড়ু ডেভসেন্দ্রর পরামর্শ অনুসারে, এটি যথাযথভাবে প্রস্তাবিত উপায় নয়, যখন অ্যাপটি লোড সরবরাহ করা শুরু করে তখন এটি বিলম্বকে উল্লেখযোগ্যভাবে বাড়িয়ে তুলতে পারে।
নরেন্দ্র জাগি

এটি কেবল রাস্তায় ক্যান লাথি দেয়।
অভিজিৎ সরকার

10

এই প্রশ্ন / উত্তরে বর্ণিত হিসাবে, আমি মনে করি যে আপনার প্রয়োজন বলে মনে করেন কেবল তাদের যুক্ত করার পরিবর্তে সর্বোত্তম পন্থা হ'ল আপনার প্রয়োজনীয়তা নির্ভরতাগুলি বাদ দিন don't

দেখুন: বসন্ত বুট শুরুর সময় ন্যূনতম করুন

সংক্ষেপে:

কভারের নীচে কী চলছে তা আপনি দেখতে পারবেন এবং কমান্ড-লাইন থেকে অ্যাপ্লিকেশন শুরু করার সময় --debug উল্লেখ করার মতো ডিবাগ লগিং সক্ষম করতে পারবেন। আপনি নিজের অ্যাপ্লিকেশনে ডিবাগ = সত্য নির্দিষ্ট করতে পারেন rop

এছাড়াও, আপনি প্রয়োগের মধ্যে লগিং স্তর সেট করতে পারেন। ব্যক্তিগত হিসাবে সহজ:

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

আপনি যদি না চান এমন একটি স্বতঃ-কনফিগার মডিউল সনাক্ত করেন তবে এটি অক্ষম করা যেতে পারে। এই জন্য ডক্স এখানে পাওয়া যাবে: http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#using-boot-disabling-specific-auto-configuration

একটি উদাহরণ দেখতে হবে:

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

4

ঠিক আছে এখানে বর্ণিত সম্ভাব্য ক্রিয়াগুলির সম্পূর্ণ তালিকা রয়েছে: https://spring.io/blog/2018/12/12/how-fast-is-spring

আমি স্প্রিং সাইডের সবচেয়ে গুরুত্বপূর্ণ নোটগুলি রাখব (কিছুটা সামঞ্জস্য করা):

  • স্প্রিং বুট ওয়েব স্টার্টারগুলি থেকে ক্লাসপাথ বাদ:
    • হাইবারনেট ভ্যালিডেটর
    • জ্যাকসন (তবে স্প্রিং বুট অ্যাকুয়েটরস এটির উপর নির্ভর করে)। আপনার যদি জেএসএন রেন্ডারিং প্রয়োজন হয় তবে গসন ব্যবহার করুন (কেবলমাত্র এমভিসির সাথে বাক্সের বাইরে কাজ করে)।
    • লগব্যাক: পরিবর্তে slf4j-jdk14 ব্যবহার করুন
  • বসন্ত-প্রসঙ্গ-সূচক ব্যবহার করুন। এটি বেশি যোগ করতে যাচ্ছে না, তবে প্রতিটি সামান্য সাহায্য করে।
  • যদি আপনি সামর্থ্য করতে পারেন তবে অ্যাকিউইউটর ব্যবহার করবেন না।
  • স্প্রিং বুট 2.1 এবং স্প্রিং 5.1 ব্যবহার করুন। এটি উপলব্ধ হলে 2.2 এবং 5.2 এ স্যুইচ করুন।
  • spring.config.location(কমান্ড লাইন আর্গুমেন্ট বা সিস্টেম সম্পত্তি ইত্যাদি) দিয়ে স্প্রিং বুট কনফিগারেশন ফাইল (গুলি) এর অবস্থান ঠিক করুন । আইডিই পরীক্ষার উদাহরণ:spring.config.location=file://./src/main/resources/application.properties
  • আপনার যদি এটির প্রয়োজন না হয় তবে জেএমএক্সটি স্যুইচ করুন spring.jmx.enabled=false(স্প্রিং বুট ২.২ এ এটি ডিফল্ট)
  • ডিফল্ট শিম সংজ্ঞা অলস করুন। spring.main.lazy-initialization=trueস্প্রিং বুট ২.২ এ একটি নতুন পতাকা রয়েছে (ব্যবহার করুন)LazyInitBeanFactoryPostProcessor পুরানো স্প্রিংয়ের জন্য )।
  • ফ্যাট জারটি আনপ্যাক করুন এবং একটি স্পষ্ট ক্লাসপথ দিয়ে চালান run
  • সাথে জেভিএম চালান -noverify। এছাড়াও বিবেচনা করুন -XX:TieredStopAtLevel=1(এটি পরে সংরক্ষণের সময় ব্যয় করে জেআইটিকে ধীর করবে)।

উল্লিখিত LazyInitBeanFactoryPostProcessor(আপনি spring.main.lazy-initialization=trueস্প্রিং ২.২ থেকে পাওয়া পতাকা প্রয়োগ করতে না পারলে আপনি এটি বসন্ত 1.5 এর জন্য ব্যবহার করতে পারেন ):

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

আপনি যদি ম্যানুয়াল পরীক্ষার জন্য বিকাশ ঘুরিয়ে আনতে চেষ্টা করছেন তবে আমি ডিটলগুলি ব্যবহারের দৃ strongly পরামর্শ দিচ্ছি ।

ক্লাসপথের ফাইলগুলি পরিবর্তিত হলে অ্যাপ্লিকেশনগুলি স্প্রিং-বুট-ডেভলগুলি ব্যবহার করে স্বয়ংক্রিয়ভাবে পুনরায় চালু হবে art

কেবল পুনরায় কম্পাইল করুন - এবং সার্ভারটি পুনরায় চালু হবে (গ্রোভির জন্য আপনার কেবল উত্স ফাইলটি আপডেট করতে হবে)। আপনি যদি কোনও আইডিই ব্যবহার করেন (যেমন 'vscode'), এটি স্বয়ংক্রিয়ভাবে আপনার জাভা ফাইলগুলি সংকলন করতে পারে, সুতরাং জাভা ফাইলটি সংরক্ষণ করা অপ্রত্যক্ষভাবে কোনও সার্ভার পুনরায় চালু করতে পারে - এবং জাভা এই ক্ষেত্রে গ্রোভির মতোই নির্বিঘ্নে পরিণত হয়।

এই পদ্ধতির সৌন্দর্য হ'ল বর্ধমান পুনঃসূচনা শর্ট সার্কিটগুলি শুরুর কিছু স্ট্র্যাচ স্টেপগুলি - সুতরাং আপনার পরিষেবাটি ফিরে আসবে এবং আরও দ্রুত চালিত হবে!


দুর্ভাগ্যক্রমে, এটি স্থাপনা বা স্বয়ংক্রিয় ইউনিট পরীক্ষার জন্য প্রারম্ভকালীন সময়ের সাথে সহায়তা করে না।


-1

সতর্কতা: আপনি যদি স্বয়ংক্রিয় ডিবি স্কিমা উত্পাদনের জন্য হাইবারনেট ডিডিএল ব্যবহার না করেন এবং আপনি এল 2 ক্যাশে ব্যবহার না করেন তবে এই উত্তরটি আপনার জন্য প্রযোজ্য নয়। সামনে স্ক্রোল করুন।

আমার সন্ধানটি হ'ল হাইবারনেট অ্যাপ্লিকেশন শুরু হওয়ার ক্ষেত্রে উল্লেখযোগ্য সময় যোগ করে। 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. এল 2 ক্যাশে চালু এবং রয়েছে 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. এল 2 ক্যাশে বন্ধ এবং 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 .. = আপডেট আপনার সত্তাগুলি প্রতিফলিত করার জন্য স্কিমা আপডেট করার জন্য প্রয়োজনীয় ডেটাবেস স্কিমাটি স্ক্যান করতে এবং neccesary sQL এর গণনা করে। 'কিছুই না' এই যাচাইকরণটি করে না (এছাড়াও, স্কিমা আপডেট করার চেষ্টা করে না)। সেরা অনুশীলনগুলি হ'ল লিকুইবেসের মতো একটি সরঞ্জাম ব্যবহার করা, যেখানে আপনি আপনার স্কিমা পরিবর্তনগুলি পরিচালনা করবেন এবং আপনি সেগুলি ট্র্যাকও করতে পারবেন।
রাদু টডার

@ রডুডোডার এই প্রশ্নটি এবং আমার উত্তরগুলি স্প্রিং বুটের প্রারম্ভকালীন সময়ের গতি বাড়ানোর বিষয়ে। হাইবারনেট ডিডিএল বনাম লিকুইবেস আলোচনার সাথে তাদের কিছু করার নেই; এই সরঞ্জামগুলির উভয়ই তাদের উপকারিতা এবং বিপরীতে রয়েছে। আমার বক্তব্যটি হ'ল আমরা ডিবি স্কিমা আপডেটটি অক্ষম করতে পারি এবং প্রয়োজনীয় হলে কেবল সক্ষম করতে পারি। শেষ রানের পর থেকে মডেলটি পরিবর্তিত হয়নি এমন সময়েও হাইবারনেট শুরুতে উল্লেখযোগ্য সময় নেয় (ডিবি স্কিমার সাথে স্বয়ংক্রিয়ভাবে উত্পাদিত স্কীমার তুলনা করার জন্য)। L2 ক্যাশে একই পয়েন্ট সত্য।
নেক্সা

হ্যাঁ, আমি এটি জানি, তবে আমার বক্তব্যটি হ'ল এটি সত্যিকার অর্থে কী করে তা ব্যাখ্যা না করা কিছুটা বিপদজনক। আপনি খুব সহজেই আপনার ডিবি খালি দিয়ে শেষ করতে পারেন।
রাদু টডার

@ রাদু টোডার আমার উত্তরে ডিবি সূচনা সম্পর্কে একটি ডকুমেন্টেশন পৃষ্ঠার লিঙ্ক ছিল। আপনি এটি পড়েছেন? এটিতে একটি সর্বাধিক জনপ্রিয় সরঞ্জাম (হাইবারনেট এবং লিকুইবেস, পাশাপাশি জেপিএ এবং ফ্লাইওয়ে) তালিকাভুক্ত একটি বিস্তৃত গাইড রয়েছে। এছাড়াও আজ আমি আমার উত্তরের শীর্ষে একটি স্পষ্ট সতর্কতা যুক্ত করছি। আপনি কি মনে করেন পরিণতি ব্যাখ্যা করতে আমার অন্য কোনও পরিবর্তন দরকার?
নেক্সা

পারফেক্ট। আপনাকে ধন্যবাদ
রাদু টডার

-3

আমি এটি আশ্চর্যজনক মনে করি যে আগে কেউ এই অপ্টিমাইজেশনের পরামর্শ দেয়নি। বিকাশকালে প্রকল্প বিল্ড এবং স্টার্টআপ অনুকূলকরণের জন্য কয়েকটি সাধারণ পরামর্শ এখানে রইল:

  • অ্যান্টিভাইরাস স্ক্যানার থেকে বিকাশ ডিরেক্টরিগুলি বাদ দিন:
    • প্রকল্প ডিরেক্টরি
    • আউটপুট ডিরেক্টরি তৈরি করুন (যদি এটি প্রকল্প ডিরেক্টরিটির বাইরে থাকে)
    • আইডিই সূচক ডিরেক্টরি (যেমন ~ / .IntelliJIdea2018.3)
    • স্থাপনা ডিরেক্টরি (টমক্যাট ওয়েব অ্যাপস)
  • হার্ডওয়্যার আপগ্রেড করুন। দ্রুত সিপিইউ এবং র‌্যাম ব্যবহার করুন, আরও ভাল ইন্টারনেট সংযোগ (নির্ভরতা ডাউনলোড করার জন্য) এবং ডাটাবেস সংযোগ, এসএসডি এ স্যুইচ করুন। একটি ভিডিও কার্ড কিছু যায় আসে না।

সতর্কবাণী

  1. প্রথম বিকল্পটি হ্রাসকৃত সুরক্ষার দামের জন্য আসে।
  2. দ্বিতীয় বিকল্পটির জন্য অর্থ ব্যয় হয় (স্পষ্টতই)।

প্রশ্নটি বুট সময়ের উন্নতি সম্পর্কে, সময় সংকলন নয়।
আর্টঅফ ওয়ারফেয়ার

@ আর্টঅফ ওয়ারফেয়ার আবার প্রশ্নটি পড়ুন। প্রশ্নটি সমস্যাটিকে হিসাবে উল্লেখ করে যে "আমি অসন্তুষ্ট যে এটির অনেক সময় [সময়] লাগে, বেশিরভাগ কারণ এটি বিকাশের প্রবাহকে ভঙ্গ করে"। আমি অনুভব করেছি যে এটি একটি প্রাথমিক সমস্যা এবং আমার উত্তরে এটিকে সম্বোধন করেছি।
naXa

-9

আমার কাছে মনে হচ্ছে আপনি কোনও ভুল কনফিগারেশন সেটিংস ব্যবহার করছেন। মাই কনটেনার এবং সম্ভাব্য দ্বন্দ্বগুলি পরীক্ষা করে শুরু করুন। কারা সর্বাধিক সংস্থান ব্যবহার করছেন তা নির্ধারণের জন্য আপনাকে একবারে প্রতিটি নির্ভরতার জন্য মেমরি মানচিত্রগুলি (ডেটার পরিমাণ দেখুন!) পরীক্ষা করতে হবে - এবং এতে প্রচুর সময়ও লাগে ... (এবং সুডো সুবিধা)। উপায় দ্বারা: আপনি সাধারণত নির্ভরতাগুলির বিরুদ্ধে কোডটি পরীক্ষা করছেন?

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.