Heroku और Postgres के साथ स्प्रिंग बूट 2.x के लिए सबसे आसान तरीका
मैंने सभी उत्तर पढ़े, लेकिन जॉनिक जो खोज रहा था वह नहीं मिला:
<ब्लॉकक्वॉट>मैं जेपीए/हाइबरनेट का उपयोग करके स्प्रिंग बूट ऐप में HerokuPostgres से कनेक्ट करने का सबसे सरल, साफ तरीका ढूंढ रहा हूं
अधिकांश लोग स्प्रिंग बूट और हरोकू के साथ जिस विकास प्रक्रिया का उपयोग करना चाहते हैं, उसमें परीक्षण और तेजी से विकास चक्रों के लिए एक स्थानीय H2 इन-मेमोरी डेटाबेस शामिल है - और हरोकू पर स्टेजिंग और उत्पादन के लिए हरोकू पोस्टग्रेज डेटाबेस।
- पहली बात है - इसके लिए आपको स्प्रिंग प्रोफाइल का उपयोग करने की आवश्यकता नहीं है!
- दूसरा:आपको कोई कोड लिखने/बदलने की आवश्यकता नहीं है!
आइए एक नजर डालते हैं कि हमें कदम दर कदम क्या करना है। मेरे पास एक उदाहरण प्रोजेक्ट है जो पोस्टग्रेज़ के लिए पूरी तरह से काम कर रहे हेरोकू परिनियोजन और कॉन्फ़िगरेशन प्रदान करता है - केवल पूर्णता के लिए, यदि आप इसे स्वयं परीक्षण करना चाहते हैं:github.com/jonashackt/spring-boot-vuejs।
Pom.xml
हमें निम्नलिखित निर्भरता की आवश्यकता है:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- In-Memory database used for local development & testing -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<!-- Switch back from Spring Boot 2.x standard HikariCP to Tomcat JDBC,
configured later in Heroku (see https://stackoverflow.com/a/49970142/4964553) -->
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
</dependency>
<!-- PostgreSQL used in Staging and Production environment, e.g. on Heroku -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.2</version>
</dependency>
यहां एक मुश्किल काम है tomcat-jdbc
. का उपयोग , लेकिन हम इसे एक सेकंड में कवर कर देंगे।
हेरोकू पर पर्यावरण चर कॉन्फ़िगर करें
हेरोकू पर्यावरण चर में Config Vars
. नाम दिए गए हैं . आपने सही सुना, हमें केवल पर्यावरण चर को कॉन्फ़िगर करना है! हमें बस सही लोगों की जरूरत है। इसलिए https://data.heroku.com/ पर जाएं (मुझे लगता है कि आपके हेरोकू ऐप के लिए पहले से ही एक पोस्टग्रेस डेटाबेस कॉन्फ़िगर किया गया है, जो डिफ़ॉल्ट व्यवहार है)।
अब अपने एप्लिकेशन के संबंधित Datastore
. पर क्लिक करें और Settings
. पर स्विच करें टैब। फिर View Credentials...
. पर क्लिक करें , जो कुछ इस तरह दिखना चाहिए:
अब एक नया ब्राउज़र टैब खोलें और अपने Heroku एप्लिकेशन की Settings
. पर जाएं टैब भी। Reveal Config Vars
. पर क्लिक करें और निम्नलिखित पर्यावरण चर बनाएं:
SPRING_DATASOURCE_URL
=jdbc :postgresql ://YourPostgresHerokuHostNameयहां :5432/YourPostgresHerokuDatabaseNameयहां (अग्रणीjdbc:
. पर ध्यान दें औरql
postgres
. के अतिरिक्त !)SPRING_DATASOURCE_USERNAME
=YourPostgresHerokuUserNameHereSPRING_DATASOURCE_PASSWORD
=YourPostgresHerokuPasswordHereSPRING_DATASOURCE_DRIVER-CLASS-NAME
=org.postgresql.Driver
(इसकी हमेशा आवश्यकता नहीं होती है क्योंकि स्प्रिंग बूट इसे url से अधिकांश डेटाबेस के लिए निकाल सकता है, बस यहाँ पूर्णता के लिए)SPRING_JPA_DATABASE-PLATFORM
=org.hibernate.dialect.PostgreSQLDialect
SPRING_DATASOURCE_TYPE
=org.apache.tomcat.jdbc.pool.DataSource
SPRING_JPA_HIBERNATE_DDL-AUTO
=update
(यह स्वचालित रूप से आपकी जेपीए इकाइयों के अनुसार आपकी टेबल बनाएगा, जो वास्तव में बहुत अच्छा है - क्योंकि आपकोCREATE
के साथ बाधा डालने की आवश्यकता नहीं है। SQL कथन या DDL फ़ाइलें)
हेरोकू में यह इस तरह दिखना चाहिए:
अब आपको बस इतना करना है! हर बार जब आप कॉन्फिग वेरिएबल बदलते हैं तो आपका हरोकू ऐप फिर से शुरू हो जाता है - इसलिए आपका ऐप अब स्थानीय रूप से एच 2 चलाना चाहिए, और हेरोकू पर तैनात होने पर पोस्टग्रेएसक्यूएल से जुड़ा होना चाहिए।
बस अगर आप पूछ रहे हैं:हम Hikari के बजाय Tomcat JDBC को कॉन्फ़िगर क्यों करते हैं
जैसा कि आपने देखा होगा, हमने tomcat-jdbc
. जोड़ा है हमारे pom.xml पर निर्भरता और कॉन्फ़िगर किया गया SPRING_DATASOURCE_TYPE=org.apache.tomcat.jdbc.pool.DataSource
पर्यावरण चर के रूप में। इस कहावत के बारे में दस्तावेज़ों में केवल एक छोटा सा संकेत है
आप उस एल्गोरिथम को पूरी तरह से बायपास कर सकते हैं और स्प्रिंग.डेटासोर्स.टाइप प्रॉपर्टी सेट करके उपयोग करने के लिए कनेक्शनपूल निर्दिष्ट कर सकते हैं। यह विशेष रूप से महत्वपूर्ण है यदि आप अपना एप्लिकेशन टॉमकैट कंटेनर में चलाते हैं, ...
स्प्रिंग बूट 2.x मानक HikariCP का उपयोग करने के बजाय मैं टॉमकैट पूलिंग डेटासोर्स पर वापस जाने के कई कारण हैं। जैसा कि मैंने यहां पहले ही स्पष्ट किया है, यदि आप spring.datasource.url
निर्दिष्ट नहीं करते हैं , स्प्रिंग हमारे PostgreSQL एक के बजाय एम्बेडेड im-memory H2 डेटाबेस को ऑटोवायर करने का प्रयास करेगा। और हिकारी के साथ समस्या यह है कि यह केवल spring.datasource.jdbc-url
का समर्थन करता है ।
दूसरा, अगर मैं हिकारी के लिए दिखाए गए हेरोकू कॉन्फ़िगरेशन का उपयोग करने का प्रयास करता हूं (इसलिए SPRING_DATASOURCE_TYPE
को छोड़कर) और SPRING_DATASOURCE_URL
बदल रहा है करने के लिए SPRING_DATASOURCE_JDBC-URL
) मैं निम्नलिखित अपवाद में भाग लेता हूं:
Caused by: java.lang.RuntimeException: Driver org.postgresql.Driver claims to not accept jdbcUrl, jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
इसलिए मुझे हिकारीसीपी के साथ हेरोकू और पोस्टग्रेज पर काम करने वाला स्प्रिंग बूट 2.x नहीं मिला, लेकिन टॉमकैट जेडीबीसी के साथ - और मैं अपनी विकास प्रक्रिया को ब्रेक नहीं करना चाहता जिसमें स्थानीय एच 2 डेटाबेस पहले से वर्णित है। याद रखें:हम जेपीए/हाइबरनेट का उपयोग करके स्प्रिंग बूट ऐप में हेरोकू पोस्टग्रेज से कनेक्ट करने का सबसे सरल, सबसे साफ तरीका ढूंढ रहे थे!