情况如下:
有一个我向其发送请求的 postgreSQL 服务器。该查询返回一个带有间隔格式字段的表。为了接收这样一个字段的数据,有一个类 org.postgresql.util.PGInterval,这样一个值应该被接受大约如下:(org.postgresql.util.PGInterval) rs.getObject("interval").
我通过 DataSource 连接到数据库
模块.xml
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.3" name="org.postgresql" slot="main">
<resources>
<resource-root path="postgresql-9.4.1208.jre7.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
<module name="javax.servlet.api" optional="true"/>
</dependencies>
</module>
独立的.xml ...
<datasource jta="true" jndi-name="java:/Test" pool-name="Test" enabled="true" use-ccm="true">
<connection-url>jdbc:postgresql://127.0.0.1:5432/PUP_P</connection-url>
<driver-class>org.postgresql.ds.PGConnectionPoolDataSource</driver-class>
<connection-property name="serverName">
127.0.0.1
</connection-property>
<connection-property name="databaseName">
Test
</connection-property>
<connection-property name="portNumber">
5432
</connection-property>
<connection-property name="prepareThreshold">
3
</connection-property>
<driver>postgresql</driver>
<pool>
<min-pool-size>1</min-pool-size>
<initial-pool-size>1</initial-pool-size>
<max-pool-size>10</max-pool-size>
<prefill>true</prefill>
</pool>
<security>
<user-name>uset</user-name>
<password>pass</password>
</security>
<validation>
<valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"/>
<background-validation>true</background-validation>
<exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"/>
</validation>
</datasource>
...
在 Java 中
@Resource(lookup = "java:/Test")
DataSource dts;
try (Connection con = newDS.getConnection();
//и т.д.
但。例如,如果我进一步写
org.postgresql.util.PGInterval var = new org.postgresql.util.PGInterval();
然后IDEA告诉我项目中没有这样的库,我需要导入它。当然,您可以手动导入所需的库(使用 gradle),但前提是您不猜测版本 org.postgresql.util.PGInterval 将不起作用,因此您需要以某种方式获取 org.postgresql.util。来自 module.xml 中指定的 JDBC 的 PGInterval。怎么做?
PS:即使库的版本匹配,(org.postgresql.util.PGInterval) rs.getObject("interval").
也会报错,因为。他们将是不同的班级。
据我了解,可以通过告诉gradle从wildfly获取编译组:'org.postgresql',名称:'postgresql',版本:'9.4-1203-jdbc42'来修复错误,但是该怎么做
您需要使项目依赖于所需的 postgresql 版本,但仅在编译时。那些。编译后的项目不应包含 postgresql。
Wildfly 有自己的类加载规则。该文档描述了它的工作原理以及如何设置它。我不能肯定地说,但这可能是它应该如何工作的。用这个填充物
创建一个文件
WEB-INF/jboss-deployment-structure.xml
如果有的话,请吸烟野蝇手册。
module
除了模块名称本身之外,您可能还需要在元素中指定一些其他属性。