PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

एक अलग सेवा के रूप में एंबेडेड पोस्टग्रेएसक्यूएल सर्वर जावा घटक का उपयोग कैसे करें?

यहां मुख्य समस्या प्लगइन के दो अलग-अलग लक्ष्यों के बीच कुछ स्थिति साझा करने में सक्षम होना है:एक start लक्ष्य जो एक प्रक्रिया शुरू करेगा, और फिर एक stop लक्ष्य जो इसे मार देगा। ऐसा करने का एक अच्छा तरीका ContextEnabled इंटरफ़ेस जो सभी मोजो लागू करते हैं। यह एक getPluginContext() विधि जो एक (कच्चा) नक्शा लौटाती है, जिसमें आप वस्तुओं को मोजो के बीच साझा करने के लिए संग्रहीत कर सकते हैं।

इस दृष्टिकोण के साथ, आप अपने द्वारा बनाई गई किसी चीज़ को start . में संग्रहीत कर सकते हैं एक प्लगइन का लक्ष्य, और इसे वापस stop . में प्राप्त करें लक्ष्य। इसे क्रिया में दिखाने के लिए यहां एक सरल उदाहरण दिया गया है, जहां मोजो के बीच एक साधारण स्ट्रिंग मान साझा किया जाता है।

Maven प्लगइन प्रोजेक्ट सेट करें . यह मूल रूप से निम्नलिखित पीओएम के साथ एक प्रोजेक्ट रखने के लिए नीचे आता है, जो जावा 8 और कॉन्फ़िगरेशन के लिए एनोटेशन का उपयोग करके मेवेन प्लगइन के लिए मानक पीओएम है:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>sample.plugin</groupId>
  <artifactId>test-maven-plugin</artifactId>
  <version>1.0.0</version>
  <packaging>maven-plugin</packaging>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-plugin-plugin</artifactId>
        <version>3.5</version>
      </plugin>
    </plugins>
  </build>
  <dependencies>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-plugin-api</artifactId>
      <version>3.3.9</version>
    </dependency>

    <!-- dependencies to annotations -->
    <dependency>
      <groupId>org.apache.maven.plugin-tools</groupId>
      <artifactId>maven-plugin-annotations</artifactId>
      <version>3.4</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>
</project>

maven-plugin type प्रकार की पैकेजिंग पर ध्यान दें जो मेवेन को घोषित करता है कि यह एक प्लगइन प्रोजेक्ट है। इस नए प्रोजेक्ट में, निम्नलिखित पर विचार करें StartMojo :

@Mojo(name = "start", defaultPhase = LifecyclePhase.PRE_INTEGRATION_TEST)
public class StartMojo extends AbstractMojo {

    @SuppressWarnings("unchecked")
    @Override
    public void execute() throws MojoExecutionException {
        getPluginContext().put("myService", new MyService("foo"));
    }

}

यह एक नया start मोजो जो डिफ़ॉल्ट रूप से pre-integration-test अवस्था। यह प्लगइन संदर्भ को पुनः प्राप्त करता है और इसमें एक नई वस्तु डालता है। उपरोक्त में, यह एक साधारण कस्टम POJO है जिसे MyService . कहा जाता है जो इसके कंस्ट्रक्टर में एक वैल्यू लेता है। यह ऑब्जेक्ट "myService" . की कुंजी से मैप किया गया है , जो लुक-अप के रूप में कार्य करता है।

तब, हमारे पास हो सकता है:

@Mojo(name = "stop", defaultPhase = LifecyclePhase.POST_INTEGRATION_TEST)
public class StopMojo extends AbstractMojo {

    @Override
    public void execute() throws MojoExecutionException {
        MyService service = (MyService) getPluginContext().get("myService");
        getLog().info(service.getValue());
    }

}

यह एक नया stop घोषित कर रहा है mojo जो डिफ़ॉल्ट रूप से post-integration-test अवस्था। यह प्लगइन संदर्भ को पुनः प्राप्त करता है, ऑब्जेक्ट को कुंजी "myService" . के तहत निकालता है , और अंत में इसका मान प्राप्त करें और इसे लॉग करें।

इस मावेन प्लगइन को पैकेजिंग और इंस्टॉल करने के बाद (mvn clean install . के साथ) ) अपने स्थानीय रेपो में, आप इसे

. के साथ एक नमूना परियोजना में उपयोग कर सकते हैं
<plugin>
  <groupId>sample.plugin</groupId>
  <artifactId>test-maven-plugin</artifactId>
  <executions>
    <execution>
      <id>sample</id>
      <goals>
        <goal>start</goal>
        <goal>stop</goal>
      </goals>
    </execution>
  </executions>
</plugin>

अगर आप mvn clean verify run चलाते हैं उस नमूना प्रोजेक्ट पर, आपके पास "foo" . होगा post-integration-test . में आपके लॉग में प्रिंट किया गया अवस्था। इससे पता चलता है कि start . द्वारा मान सही ढंग से सेट-अप किया गया था mojo, और फिर stop . द्वारा सही ढंग से पुनर्प्राप्त किया गया मोजो।

बेशक, आप इस मानचित्र में जटिल वस्तुओं को संग्रहीत कर सकते हैं, न कि केवल एक String (जिसके लिए और अधिक सरल उपाय हो सकते हैं)। विशेष रूप से, यह आपकी process . के लिए एक होस्ट हो सकता है उदाहरण है कि आप रोकना चाहते हैं। आप exec-maven-plugin से छुटकारा पा सकते हैं , एक नया मावेन प्लगइन बनाएं जिसमें वह कोड हो जिसमें आपको पहले से एम्बेडेड डेटाबेस को start में सेट करना होगा लक्ष्य, इस लक्ष्य में प्लगइन संदर्भ में प्रक्रिया उदाहरण संग्रहीत करें, और अंत में इस प्रक्रिया को बाद में एक और stop में रोकें मोजो को प्लगइन संदर्भ से पुनर्प्राप्त करके।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres डेटाबेस से सभी फ़ंक्शन ड्रॉप करें

  2. से हटाएं ... पर या उसके पास सिंटैक्स त्रुटि रिपोर्टिंग।

  3. Postgresql क्वेरी एक वर्ष के भीतर प्रति माह गिनती पाने के लिए

  4. Postgres दृश्यों के लिए पंक्ति स्तरीय सुरक्षा सक्षम क्यों नहीं है?

  5. Postgresql प्रत्येक आईडी के लिए अंतिम पंक्ति निकालें