PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm cách nào để sử dụng thành phần Java của Máy chủ PostgreSQL Nhúng như một dịch vụ riêng biệt?

Vấn đề cốt lõi ở đây là có thể chia sẻ một số trạng thái giữa hai mục tiêu khác nhau của một plugin:start mục tiêu sẽ khởi chạy một quy trình và sau đó là stop mục tiêu sẽ giết chết nó. Một cách tốt để làm điều đó là sử dụng ContextEnabled giao diện mà tất cả các mojos triển khai. Nó cung cấp một getPluginContext() phương thức trả về một bản đồ (thô), trong đó bạn có thể lưu trữ các đối tượng để chia sẻ giữa các mojos.

Với cách tiếp cận này, bạn có thể lưu trữ thứ gì đó bạn đã tạo trong start mục tiêu của một plugin và lấy lại nó trong stop mục tiêu. Dưới đây là một ví dụ tối giản để hiển thị điều này trong thực tế, trong đó giá trị Chuỗi đơn giản được chia sẻ giữa các mojos.

Thiết lập dự án plugin Maven . Về cơ bản, điều này xuất phát từ việc có một dự án với POM sau, là POM tiêu chuẩn cho một plugin Maven, sử dụng Java 8 và các chú thích cho cấu hình:

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

Lưu ý cách đóng gói của loại maven-plugin tuyên bố với Maven rằng đây là một dự án plugin. Trong dự án mới này, hãy xem xét StartMojo sau :

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

}

Đây là khai báo mới start mojo được ràng buộc theo mặc định với pre-integration-test giai đoạn. Nó lấy bối cảnh plugin và đặt một đối tượng mới vào đó. Ở trên, nó là một POJO tùy chỉnh đơn giản được gọi là MyService nhận một giá trị trong hàm tạo của nó. Đối tượng này được ánh xạ tới một khóa của "myService" , đóng vai trò như một tra cứu.

Sau đó, chúng ta có thể có:

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

}

Đây là khai báo một stop mới mojo được ràng buộc theo mặc định với post-integration-test giai đoạn. Nó truy xuất ngữ cảnh plugin, trích xuất đối tượng dưới khóa "myService" và cuối cùng lấy giá trị của nó và ghi lại nó.

Sau khi đóng gói và cài đặt plugin Maven này (với mvn clean install ) vào repo cục bộ của bạn, bạn có thể sử dụng nó trong một dự án mẫu với

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

Nếu bạn chạy mvn clean verify trong dự án mẫu đó, bạn sẽ có "foo" được in trong nhật ký của bạn, trong post-integration-test giai đoạn. Điều này cho thấy rằng giá trị đã được thiết lập chính xác bởi start mojo, và sau đó được truy xuất chính xác bằng stop mojo.

Tất nhiên, bạn có thể lưu trữ các đối tượng phức tạp trong bản đồ này, không chỉ là một String (có thể có nhiều giải pháp đơn giản hơn). Đáng chú ý, nó có thể là máy chủ lưu trữ cho quá trình process của bạn ví dụ mà bạn muốn dừng lại. Bạn có thể loại bỏ exec-maven-plugin , tạo một plugin Maven mới chứa mã bạn đã có để thiết lập cơ sở dữ liệu nhúng trong start mục tiêu, lưu trữ phiên bản quy trình trong ngữ cảnh plugin trong mục tiêu này và cuối cùng dừng quá trình này sau trong một stop khác mojo bằng cách truy xuất nó từ ngữ cảnh plugin.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chỉ mục chữ thường của Flask-SQLAlchemy - bỏ qua chức năng, không được phản ánh SQLAlchemy hỗ trợ

  2. Bảng điều khiển Rails - Tìm nơi được tạo vào =ngày nhất định

  3. làm thế nào để trả về bảng tạm thời từ hàm postgres?

  4. Tổng hợp các nhóm nút / cạnh được kết nối

  5. Chèn dataframe vào postgresql sqlalchemy với idx autoincrement