史蒂夫·泰勒(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(未知来源)
答案 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。