PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да използвам Java компонента Embedded PostgreSQL Server като отделна услуга?

Основният проблем тук е да можете да споделяте някакво състояние между две различни цели на плъгин:start цел, която би стартирала процес и след това stop гол, който би го убил. Добър начин да направите това е да използвате ContextEnabled интерфейс, който всички mojos изпълняват. Той предоставя getPluginContext() метод, който връща (сурова) карта, в която можете да съхранявате обекти, които да се споделят между mojos.

С този подход можете да съхранявате нещо, което сте създали в start цел на плъгин и го върнете обратно в stop цел. Ето минималистичен пример, който показва това в действие, където проста стойност на низ се споделя между mojos.

Настройване на проект за плъгин на Maven . Това основно се свежда до наличието на проект със следния POM, който е стандартният POM за плъгин Maven, използващ Java 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 който декларира на Maven, че това е плъгин проект. В този нов проект разгледайте следното 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" , и накрая получава неговата стойност и я регистрира.

След опаковането и инсталирането на този плъгин Maven (с 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 в този примерен проект в крайна сметка ще имате "foo" отпечатани във вашите регистрационни файлове, в post-integration-test фаза. Това показва, че стойността е правилно зададена от start mojo и след това правилно извлечен от stop моджо.

Разбира се, можете да съхранявате сложни обекти в тази карта, а не само String (за което може да има по-прости решения). За отбелязване е, че може да бъде хост за вашия process случай, който искате да спрете. Можете да се отървете от exec-maven-plugin , създайте нов плъгин Maven, съдържащ кода, който вече имате, за да настроите вградената база данни в start цел, съхранете екземпляра на процеса в контекста на приставката в тази цел и накрая спрете този процес по-късно в друга stop mojo, като го извлечете от контекста на приставката.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Импортиране на .sql файл на windows в postgresql

  2. Postgres, таблица1 отляво се присъединява към таблица2 само с 1 ред на ID в таблица1

  3. дали sql изразът гарантира атомарност в postgres

  4. Как да актуализирате множество записи с помощта на peewee

  5. Как мога да преобразувам всички колони в моята база данни в нечувствителни към главни и малки букви