我正在运行一个 web 应用程序,它是一个 rest API,我正在使用 wildfly 9.0.2 和 PostgreSQL。数据库连接使用的是最新的jdbc4.2驱动,jre是oracle的jr8。
我按照这个 topic 安装了 jdbc ,到目前为止,它运行完美,我使用 wildfly 管理控制台安装了数据源。
因此,当我尝试插入一个 json 字段时,问题就来了。我很快意识到 JDBC 没有直接的方法来插入 json 字段,因为它有 String、Integer、Timestamp 等。所以我在网上找到了这个解决方案,我现在不记得了:
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
所以我尝试了一种不同的方法,在部署 war 时,我将数据源从原来的 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
关于java - 使用 wildfly 插入 Postgres 的 json 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33441201/