sql >> Databáze >  >> RDS >> PostgreSQL

Jak používat komponentu Embedded PostgreSQL Server Java jako samostatnou službu?

Hlavním problémem je zde možnost sdílet nějaký stav mezi dvěma různými cíli pluginu:start cíl, který spustí proces, a poté stop cíl, který by to zabil. Dobrým způsobem, jak toho dosáhnout, je využít ContextEnabled rozhraní, které implementují všechny mojos. Poskytuje getPluginContext() metoda, která vrací (surovou) mapu, ve které můžete ukládat objekty, které mají být sdíleny mezi mojos.

S tímto přístupem můžete uložit něco, co jste vytvořili v start cíl pluginu a získat jej zpět v stop fotbalová branka. Zde je minimalistický příklad, který to ukáže v akci, kde je mezi mojos sdílená jednoduchá hodnota String.

Nastavit projekt pluginu Maven . V podstatě jde o to mít projekt s následujícím POM, což je standardní POM pro plugin Maven, používající Java 8 a anotace pro konfiguraci:

<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>

Všimněte si balení typu maven-plugin což Mavenovi prohlašuje, že se jedná o projekt pluginu. V tomto novém projektu zvažte následující 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"));
    }

}

Toto deklaruje nový start mojo který je ve výchozím nastavení vázán na pre-integration-test fáze. Načte kontext pluginu a vloží do něj nový objekt. Ve výše uvedeném je to jednoduché vlastní POJO s názvem MyService který nabývá hodnoty ve svém konstruktoru. Tento objekt je namapován na klíč "myService" , který slouží jako vyhledávací.

Pak můžeme mít:

@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());
    }

}

Toto je deklarování nového stop mojo, který je ve výchozím nastavení vázán na post-integration-test fáze. Získá kontext pluginu, extrahuje objekt pod klíčem "myService" a nakonec získat jeho hodnotu a zaprotokolovat ji.

Po zabalení a instalaci tohoto pluginu Maven (s mvn clean install ) do místního úložiště, můžete jej použít ve vzorovém projektu s

<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>

Pokud spustíte mvn clean verify v tomto ukázkovém projektu skončíte s "foo" vytištěno ve vašich protokolech v post-integration-test fáze. To ukazuje, že hodnota byla správně nastavena pomocí start mojo a poté správně načteno pomocí stop mojo.

Do této mapy můžete samozřejmě ukládat složité objekty, nejen String (pro které by mohlo být jednodušších řešení). Zejména to může být hostitel pro váš process případ, který chcete zastavit. Můžete se zbavit exec-maven-plugin , vytvořte nový plugin Maven obsahující kód, který již máte k nastavení vestavěné databáze v start cíl, uložte instanci procesu v kontextu pluginu v tomto cíli a nakonec tento proces zastavte později v jiném stop mojo jeho načtením z kontextu pluginu.



  1. Mysql stop slova a zápas

  2. Atomic MySQL transakce v Anorm

  3. php mysql získat proměnná data z databáze a vypočítat

  4. Úroveň izolace SERIALIZABLE v Spring-JDBC