स्प्रिंग-बूट: मैं अधिकतम संख्या में कनेक्शन की तरह जेडडीबीसी पूल गुण कैसे सेट करूं?


81

स्प्रिंग-बूट एक बहुत बढ़िया उपकरण है, लेकिन जब यह अधिक उन्नत कॉन्फ़िगरेशन की बात आती है, तो प्रलेखन थोड़ा विरल होता है। मैं अपने डेटाबेस कनेक्शन पूल के लिए अधिकतम आकार जैसे गुण कैसे सेट कर सकता हूं?

स्प्रिंग-बूट का समर्थन करता है tomcat-jdbc, HikariCPऔर Commons DBCPमूल रूप से वे सभी उसी तरह कॉन्फ़िगर किए गए हैं?


मुझे BoneCP या C3P0 जैसे एक अलग DataSource प्रदाता का उपयोग करना बेहतर लगता है
Luiggi मेंडोज़ा

3
-Dspring.datasource.tomcat.initial-size=10(डिफ़ॉल्ट 10 है)
क्रिस्टोफ रूसो

जवाबों:


122

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

Tomcat-jdbc के लिए अधिकतम पूल आकार सेट करने के लिए, इस प्रॉपर्टी को अपनी .properties या .yml फ़ाइल में सेट करें:

spring.datasource.maxActive=5

यदि आप चाहें तो आप निम्नलिखित का भी उपयोग कर सकते हैं:

spring.datasource.max-active=5

आप इस तरह से कोई भी कनेक्शन पूल प्रॉपर्टी सेट कर सकते हैं। यहाँ समर्थित गुणों की एक पूरी सूची हैtomcat-jdbc

यह समझने के लिए कि यह अधिक सामान्य रूप से कैसे काम करता है, आपको स्प्रिंग-बूट कोड में थोड़ा खुदाई करने की आवश्यकता है।

स्प्रिंग-बूट इस तरह से डेटा स्रोत का निर्माण करता है ( यहां देखें , लाइन 102):

@ConfigurationProperties(prefix = DataSourceAutoConfiguration.CONFIGURATION_PREFIX)
@Bean
public DataSource dataSource() {
    DataSourceBuilder factory = DataSourceBuilder
            .create(this.properties.getClassLoader())
            .driverClassName(this.properties.getDriverClassName())
            .url(this.properties.getUrl())
            .username(this.properties.getUsername())
            .password(this.properties.getPassword());
    return factory.build();
}

DataSourceBuilder यह जानने के लिए ज़िम्मेदार है कि कौन सी पूलिंग लाइब्रेरी का उपयोग करना है, प्रत्येक क्लास क्लास की कक्षा की जाँच के लिए जाँच करके। यह तब DataSource का निर्माण करता है और इसे dataSource()फ़ंक्शन पर लौटाता है ।

इस बिंदु पर, जादू उपयोग करने में किक करता है @ConfigurationProperties। यह एनोटेशन स्प्रिंग को प्रीफिक्स CONFIGURATION_PREFIX(जो है spring.datasource) वाले गुणों की तलाश करने के लिए कहता है । प्रत्येक संपत्ति जो उस उपसर्ग के साथ शुरू होती है, वसंत उस संपत्ति के साथ डेटा स्रोत पर सेटर को कॉल करने का प्रयास करेगा।

बिलाव डेटा स्रोत का एक विस्तार है DataSourceProxy है, जो विधि है setMaxActive()

और यह है कि कैसे अपने spring.datasource.maxActive=5सही ढंग से लागू हो जाता है!

अन्य कनेक्शन पूल के बारे में क्या

मैंने कोशिश नहीं की है, लेकिन यदि आप अन्य स्प्रिंग-बूट समर्थित कनेक्शन पूल (वर्तमान में HikariCP या कॉमन्स DBCP) में से एक का उपयोग कर रहे हैं, तो आपको उसी तरह से गुण सेट करने में सक्षम होना चाहिए, लेकिन आपको प्रोजेक्ट देखने की आवश्यकता होगी क्या उपलब्ध है यह जानने के लिए प्रलेखन।


6
उस पर एक स्पष्ट दस्तावेज है (जैसा कि होता है): docs.spring.io/spring-boot/docs/current/reference/htmlsingle/… । इसके अलावा, आप ऐप शुरू कर सकते हैं और / configprops (Actuator के साथ) देख सकते हैं। प्रलेखन के लिए समस्या यह है कि सभी डेटा स्रोत कार्यान्वयन में थोड़ा अलग गुण हैं (आप सिर्फ जावा बीन के लिए बाध्य हैं)।
डेव सीर

कनेक्शन पूल से संबंधित कीवर्ड खोजते समय @DaveSyer, इसके बहुत एसईओ अनुकूल नहीं होने का संकेत देने के लिए धन्यवाद। मैं इस बात से सहमत हूं कि अंतर कनेक्शन पूल के अलग-अलग कॉन्फ़िगरेशन हैं, इसलिए मैंने उस पर एक खंड जोड़ा है। मैं जवाब अपडेट कर दूंगा।
JBCP

8
अन्य उत्तर देखें जैसे कि डैनियल और वाइल्डलूप। बाद के वसंत बूट संस्करणों के रूप में, कई सेटिंग्स को प्रदाता-विशिष्ट सेटिंग्स सेट करने की आवश्यकता होती है। जैसे spring.datasource.tomcat.max-activeया spring.datasource.hikari.maximum-pool-size
डैन टान्नर

मेरे केस के लिए केवल spring.datasource.maxActive=1काम किया। यह लाइन spring.datasource.max-active=1मेरे काम नहीं आई। स्प्रिंग बूट संस्करण2.2.2.RELEASE
राफेल

32

स्प्रिंग-बूट (1.4.1.RELEASE) के वर्तमान संस्करण में, प्रत्येक पूलिंग डेटा स्रोत कार्यान्वयन के गुणों के लिए अपना उपसर्ग है।

उदाहरण के लिए, यदि आप tomcat-jdbc का उपयोग कर रहे हैं:

spring.datasource.tomcat.max-wait=10000

आप स्पष्टीकरण यहाँ पा सकते हैं

spring.datasource.max-wait=10000

इसका अब कोई प्रभाव नहीं है।


15

स्प्रिंग बूट 2.x में आपको प्रदाता विशिष्ट गुणों का संदर्भ देना होगा।

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-sql.html#boot-features-connect-to-production.atatabase

डिफ़ॉल्ट, हाइकरी के साथ सेट किया जा सकता है spring.datasource.hikari.maximum-pool-size


6

विभिन्न कनेक्शन पूल में अलग-अलग कॉन्फ़िगरेशन हैं।

उदाहरण के लिए टॉम्कट (डिफ़ॉल्ट) की उम्मीद है:

spring.datasource.ourdb.url=...

और HikariCP इससे खुश होंगे:

spring.datasource.ourdb.jdbc-url=...

हम बॉयलरप्लेट कॉन्फ़िगरेशन के बिना दोनों को संतुष्ट कर सकते हैं:

spring.datasource.ourdb.jdbc-url=${spring.datasource.ourdb.url}

कनेक्शन पूल प्रदाता को परिभाषित करने के लिए कोई संपत्ति नहीं है।

स्रोत DataSourceBuilder.java पर एक नज़र डालें

यदि टॉम्काट, HikariCP या कॉमन्स DBCP क्लासपाथ पर हैं, तो उनमें से एक का चयन किया जाएगा (पहले टॉमकैट के साथ उस क्रम में)।

... तो, हम आसानी से इस मावेन कॉन्फ़िगरेशन (pom.xml) का उपयोग करके कनेक्शन पूल प्रदाता को बदल सकते हैं:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.apache.tomcat</groupId>
                <artifactId>tomcat-jdbc</artifactId>
            </exclusion>
        </exclusions>
    </dependency>       

    <dependency>
        <groupId>com.zaxxer</groupId>
        <artifactId>HikariCP</artifactId>
    </dependency>

3

आपके आवेदन के प्रकार / आकार / लोड / नहीं के आधार पर। उपयोगकर्ताओं के ..etc - u आपके उत्पादन गुणों के रूप में निम्नलिखित रख सकते हैं

spring.datasource.tomcat.initial-size=50
spring.datasource.tomcat.max-wait=20000
spring.datasource.tomcat.max-active=300
spring.datasource.tomcat.max-idle=150
spring.datasource.tomcat.min-idle=8
spring.datasource.tomcat.default-auto-commit=true

जोड़ना spring.datasource.tomcat.max-active=5 spring.datasource.tomcat.max-idle=5मेरे लिए काफी था, धन्यवाद!
L.Butz
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.