使用wildfly插入Postgres'json列[英] Inserting Postgres' json column using wildfly

本文是小编为大家收集整理的关于使用wildfly插入Postgres'json列的处理方法,想解了使用wildfly插入Postgres'json列的问题怎么解决?使用wildfly插入Postgres'json列问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我正在运行一个 web 应用程序,它是一个 rest API,我正在使用 wildfly 9.0.2 和 PostgreSQL.数据库连接使用的是最新的jdbc4.2驱动,jre是oracle的jr8.

我按照 topic,并让它运行完美,到目前为止我使用 wildfly 管理控制台安装了数据源.

所以当我尝试插入 json 字段时,问题就来了.我很快意识到 JDBC 没有像 String、Integer、Timestamp 等那样插入 json 字段的直接方法.所以我在网上找到了这个解决方案,我现在不记得了:

oPGobject jsonObject = new PGobject();
jsonObject.setType("json");
jsonObject.setValue(new Gson().toJson(ctrlClienteComunicacao));
preparedStatement.setObject(++i,jsonObject);

这个解决方案工作正常,因为我尝试从一个简单的主类运行它并且我可以插入任何我想要的 json,但是当我在 Wildfly 上运行时尝试此代码时,我得到了这个类未找到错误:

java.lang.NoClassDefFoundError: org/postgresql/util/PGobject

我的第一个尝试是从 JDBC 库中删除提供的属性,以便将其包含在 .war 中.然后我得到一个新的错误:

org.postgresql.util.PSQLException: Can't infer the SQL type to use for an instance of org.postgresql.util.PGobject. Use setObject() with an explicit Types value to specify the type to use.

经过几次尝试后,我意识到将 jar 包含在 war 中会使 wildfly 将其部署为驱动程序.

[org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-2) WFLYJCA0018: Started Driver service with driver-name = VirtualForum.war_org.postgresql.Driver_9_4

所以我尝试了不同的方法,在部署战争时,我将数据源从原始 pgsql 驱动程序更改为在应用程序部署期间启动的驱动程序,它有效!我可以插入 json 字段.

但我认为这不是一个合适的解决方案,因为我更喜欢使用安装在 wildfly 上的驱动程序.

我为我的英语和问题布局道歉,这是我的第一个问题.

推荐答案

将 org.postgres 依赖添加到 war manifest 为我解决了这个问题.

这是一个 maven 片段:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <archive>
                    <manifestEntries>
                        <Dependencies>org.postgres</Dependencies>
                    </manifestEntries>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

这是生成的MANIFEST.MF(见最后一行):

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: dedek
Created-By: Apache Maven 3.3.3
Build-Jdk: 1.8.0_51
Dependencies: org.postgres

本文地址:https://www.itbaoku.cn/post/1764006.html