不支持的事件循环组类型:使用pgjdbc-ng的NioEventLoopGroup

时间:2019-02-09 00:49:22

标签: java postgresql

史蒂夫·泰勒(Steve Taylor)在reviewing之后 我试图在我的其余API中使用它,但是我没有设法与数据库建立连接,我试图在主线程和辅助线程中创建ListenNotify类的实例,但未取得良好的结果,请提供一些帮助。

package com.curu.open.rest.notifications.PostgresChanel;

import java.sql.SQLException;
import java.sql.Statement;

import com.impossibl.postgres.api.jdbc.PGConnection;
import com.impossibl.postgres.api.jdbc.PGNotificationListener;
import com.impossibl.postgres.jdbc.PGDataSource;

public class ListenNotify {
  // Database connection
  PGConnection connection;

  public ListenNotify() {
    // Create the listener callback
    PGNotificationListener listener = new PGNotificationListener() {
      @Override
      public void notification(int processId, String channelName, String payload) {
        System.out.println("/channels/" + channelName + " " + payload);
      }
    };
    try {
      PGDataSource dataSource = new PGDataSource();
      dataSource.setHost("localhost");
      dataSource.setPort(5432);
      dataSource.setDatabaseName("test");
      dataSource.setUser("postgres");
      dataSource.setPassword("postgres");
      // Log into the db
      connection = (PGConnection) dataSource.getConnection();
      // add the callback listener created earlier to the connection
      connection.addNotificationListener(listener);
      // Tell Postgres to send NOTIFY q_event to our connection and listener
      Statement statement = connection.createStatement();
      statement.execute("LISTEN my_event");
      statement.close();
    } catch (SQLException e) {
      e.printStackTrace();
    }
  }
}
  

com.impossibl.postgres.jdbc.PGSQLSimpleException:连接错误:       java.lang.IllegalArgumentException:不支持的事件循环组类型:       NioEventLoopGroup位于com.impossibl.postgres.jdbc.ErrorUtils.makeSQLException(ErrorUtils.java:137)     在   com.impossibl.postgres.jdbc.ConnectionUtil.createConnection(ConnectionUtil.java:212)     在   com.impossibl.postgres.jdbc.AbstractDataSource.createConnection(AbstractDataSource.java:137)     在   com.impossibl.postgres.jdbc.PGDataSource.getConnection(PGDataSource.java:71)     在   com.impossibl.postgres.jdbc.PGDataSource.getConnection(PGDataSource.java:63)     在   com.curu.open.rest.notifications.PostgresChanel.ListenNotify。(ListenNotify.java:58)     在   com.curu.open.NotificationDispacherTimerTask.run(NotificationDispacherTimerTask.java:29)     在java.util.TimerThread.mainLoop(未知源)在   java.util.TimerThread.run(未知来源)

1 个答案:

答案 0 :(得分:0)

无论执行程序如何,pgjdbc-ng的传递依赖都不会添加到类路径中。

一种解决方案是使用在一个jar中包含所有依赖项包的uber jar。

要通过Maven使用uber jar,您需要在依赖项规范中添加“ all”分类器,如

<dependency>
  <groupId>com.impossibl.pgjdb-ng</groupId>
  <artifactId>pgjdb-ng</artifactId>
  <version>0.8.2</version>
  <classifier>all</classifier>
</dependency>

或者,您可以手动下载uber jar并将其添加到您的类路径中。 User Guide

的“手动下载”部分提供了更多信息。

注意:如果您以包含Maven的传递依赖项的方式执行程序,则不必使用uber jar。