sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan bruger man Embedded PostgreSQL Server Java-komponenten som en separat tjeneste?

Kerneproblemet her er at være i stand til at dele en tilstand mellem to forskellige mål for et plugin:en start mål, der ville starte en proces og derefter et stop mål, der ville dræbe den. En god måde at gøre det på er at gøre brug af ContextEnabled grænseflade, som alle mojos implementerer. Det giver en getPluginContext() metode, der returnerer et (rå) kort, hvor du kan gemme objekter, der skal deles mellem mojos.

Med denne tilgang kan du gemme noget, du har oprettet i start mål for et plugin, og få det tilbage i stop mål. Her er et minimalistisk eksempel for at vise dette i aktion, hvor en simpel strengværdi deles mellem mojos.

Opsæt et Maven plugin-projekt . Dette kommer dybest set ned til at have et projekt med følgende POM, som er standard POM for et Maven plugin, ved hjælp af Java 8 og annoteringer til konfiguration:

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

Bemærk emballagen af ​​typen maven-plugin som erklærer til Maven, at dette er et plugin-projekt. I dette nye projekt skal du overveje følgende 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"));
    }

}

Dette erklærer en ny start mojo som som standard er bundet til pre-integration-test fase. Den henter plugin-konteksten og sætter et nyt objekt i den. I ovenstående er det en simpel brugerdefineret POJO kaldet MyService som tager en værdi i sin konstruktør. Dette objekt er knyttet til en nøgle af "myService" , som fungerer som opslag.

Så kan vi have:

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

}

Dette erklærer et nyt stop mojo, som som standard er bundet til post-integration-test fase. Den henter plugin-konteksten, udtrækker objektet under nøglen "myService" , og endelig få dens værdi og logge den.

Efter pakning og installation af dette Maven-plugin (med mvn clean install ) ind i din lokale repo, kan du bruge den i et eksempelprojekt med

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

Hvis du kører mvn clean verify på det eksempelprojekt vil du ende med at have "foo" udskrevet i dine logfiler, i post-integration-test fase. Dette viser, at værdien var korrekt indstillet af start mojo, og derefter korrekt hentet af stop mojo.

Selvfølgelig kan du gemme komplekse objekter i dette kort, ikke kun en String (hvilket der kunne være mere simple løsninger til). Det kan især være en vært for din process eksempel, du vil stoppe. Du kan slippe af med exec-maven-plugin , opret et nyt Maven-plugin, der indeholder den kode, du allerede har til at opsætte den indlejrede database i en start mål, gem procesforekomsten i plugin-konteksten i dette mål, og stop endelig denne proces senere i et andet stop mojo ved at hente det fra plugin-konteksten.



  1. Kom godt i gang Justering af ydeevne i Azure SQL Database

  2. Hurtigste OLEDB læst fra ORACLE

  3. Hvordan opretter jeg en midlertidig tabel ud fra en type?

  4. Brugerdefinerede DQL-funktioner i doctrine2