JBoss EAP 为应用项目配置PostgreSQL数据源

一、前言

客户在计划将业务向云平台迁移,这些天也在测试将数据库由Oracle替换为开源的PostgrSQL。为什么选PostgreSQL?因为这是对应用程序代码修改最小的方案,没有之一!

PostgreSQL数据库的简要信息为:服务器loacalhost,端口5432,数据库projadm,用户名/密码:projadm/proj2013。

开始前,在https://jdbc.postgresql.org/download.html下载与JBoss版本和JDK版本匹配的JDBC驱动包,存放某目录(最好不含汉字或特殊字符,因为随后用到的jboss-cli对复制粘贴太差劲),假设为D:\PostgreSQL\postgresql-42.1.4.jar。

二、JBoss EAP配置

1)  设置环境变量JBOSS_HOME

如果计算机上安装了多个JBoss,此步骤不可忽略,否则后续步骤更改的是该环境变量所指JBoss实例的配置,而很可能不是期望的应用项目。假设为D:\JBOSS-EAP-7.0。

2) 打开一个cmd窗口,启动JBoss(假设为standalone模式):

cd D:\JBOSS-EAP-7.0\bin

standalone.bat

3) 另外打开一个cmd窗口,在jboss-cli命令行增加PostgreSQL数据源相关设置:

cd D:\JBOSS-EAP-7.0\bin

jboss-cli.bat

进入jboss-cli命令行模式后,依次执行:

#连接jboss实例
connect
# 增加PostgreSQL模块
module add --name=com.postgresql --resources=D:\PostgreSQL\postgresql-42.1.4.jar --dependencies=javax.api,javax.transaction.api
# 增加jdbc-driver驱动描述
/subsystem=datasources/jdbc-driver=postgresql:add(driver-name=postgresql,driver-module-name=com.postgresql,driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource)
# 增加jndi描述
data-source add --name=PostgresDS --jndi-name=java:jboss/PostgresDS --driver-name=postgresql --connection-url=jdbc:postgresql://localhost:5432/projadm --user-name=projadm --password=proj2013 --validate-on-match=true --background-validation=false --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter
#删除Oracle数据源(OracleDS)
xa-data-source remove --name=OracleDS

三、检验

用文本编辑器打开D:\JBOSS-EAP-7.0\standalone\configuration\standalone.xml,会查找到关于PostgreSQL的jndi和driver的描述信息,内容大致为:

<profile>
…
<subsystem xmlns="urn:jboss:domain:datasources:4.0">
    <datasources>
        <datasource jndi-name="java:jboss/PostgresDS" pool-name="PostgresDS">
          <connection-url>jdbc:postgresql://localhost:5432/projadm</connection-url>
          <driver>postgresql</driver>
          <security>
              <user-name>projadm</user-name>
              <password>proj2013</password>
          </security>
          <validation>
              …
          </validation>
       </datasource>
       <drivers>
          …
          <driver name="postgresql" module="com.postgresql">
          <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
          </driver>
       </drivers>
    </datasources>
 </subsystem>
…
</profile>

此外,在D:\JBoss-EAP-7.0\modules\com目录多出postgresql文件夹,其下的main子文件夹包含驱动包postgresql-42.1.4.jar和module.xml配置文件,内容大致为:

    <resources>
        <resource-root path="postgresql-42.1.4.jar"/>
    </resources>

    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>

四、应用修改

这部分会因所使用的框架不同而有很大差异,只列出本项目所涉及到一些内容。

  • maven工程修改pom,增加对驱动文件的依赖:
   <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>${postgresql.version}</version>
    </dependency>  
  • 某些情况下,可能需要手工拷贝驱动文件postgresql-42.1.4.jar到相应的lib目录;
  • JPA工程修改persitense.xml,替换原来与Oracle有关的部分:
<persistence-unit name="jpaUnit" transaction-type="JTA">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <!-- <jta-data-source>java:jboss/datasources/HSOracleDS</jta-data-source> -->
    <jta-data-source>java:jboss/PostgresDS</jta-data-source>
    <properties>
        <!-- <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle12cDialect" /> -->
        <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
    …
  • 应用程序中涉及到的其它配置,具体项目具体分析吧;
  • java代码中,除一些明显之处(如使用nvl函数、decode函数、sysdate)以外,令人更头疼的是类型匹配。由于PostgreSQL对类型匹配要求严格,不像Oracle那样默许decimal与varchar、decimal与boolean等相互间的隐式转换,需要修改Java代码或者调整表字段类型。
时间: 2024-08-15 06:56:01

JBoss EAP 为应用项目配置PostgreSQL数据源的相关文章

通过weblogic配置log4jdbc数据源,在项目中使用该数据源,输出sql

说一下配置: 服务器weblogic 项目使用的是spring管理Bean,数据源配置也是基于Spring的dbcp数据源,并且用log4jdbc进行sql日志打印,采用logback+slf4j日志打印.log4jdbc能够很好打印sql,并且参数也带上了,这在项目开发与后期系统出现的问题查找原因都有很大的帮助. 数据库配置如下: jdbc.driverClassName=net.sf.log4jdbc.DriverSpy jdbc.url=jdbc:oracle:thin:@ip:port/

JBOSS EAP 6 系列四 EJB实现——调用(贯穿始终的模块)

本文主要介绍在JBOSS EAP 6.2(或者JBOSS AS7)中模块是如何贯穿EJB实现的始终.延续上一博文<认识模块的使用>的话题继续聊JBOSS做为模块申明式容器的这一特性在EJB实现中的完全贯彻. Session bean JBOSS EAP(AS7)中默认的EJB是3.1版本遵循JSR318规范.EJB从3.0开始已经全面引入Annotation的概念,3.0以前的EJB需要在XML文件里面对Bean所做的配置都能通过标签的方式在代码中实现.同时,之前为了工厂模式而做的双接口Hom

动态配置 JBOSS ( eap 6.2 ) 数据源

操作环境 windows + jboss eap 6.2 + MyEclipse 10.0 项目用的是jboss eap 6.2,作为Red公司升级后的eap稳定版. 相比之前的 AS 系列,不管是安全性和集群的稳定性,加上天然的出厂配置上都好了非常多. 对于开发人员来讲.省去了非常多工作. 配置远程接口 <interface name="management"> <inet-address value="${jboss.bind.address.manag

JBOSS EAP 6 系列三 Oracle、Mysql数据源的配置(驱动)—认识模块的使用

本文介绍JBOSS EAP 6.2中Oracle数据源的配置方式.结合之前JBOSS EAP 6.2新功能,本文初识JBOSS模块申明式容器这一特性. 模块申明式容器:JBOSS EAP不再有lib的概念,一切都是module.无论是系统调用的lib,用户编制的lib,或者应用程序引用到的第三方lib都以模块的方式构建起来,并在使用的地方申明具体使用哪个模块. 以下分三步介绍数据源的配置: 将数据库驱动构建为JBOSS内的模块 为JBOSS容器加载驱动模块 为JBOSS容器配置数据源 1.将数据

JBOSS EAP 6 系列六 公共模块的jar配置到jboss的modules详细配置

公司项目中遇到并要解决的问题 1:原则上除了自己写的代码之外,公共的jar不应该都在打包的时候打包到ear里面,这样的话包太大,也不符合的分层的逻辑,在jboss容器内部,每个ear的包重复jar都会调入jboss内部,而造成浪费过多地的服务器资源,会出现不定期的异常. 2:jboss eap 6.*系列,需要模块化配置,需要加载的jar,解决如何在jboss里面配置 3:公共的jar在jboss里面已经配置,加载--但是源码运行的时候不能根据maven的配置,加载jar的路径的问题 第一步:配

动态配置 JBOSS ( eap 6.2 ) DataSource

操作环境 windows + jboss eap 6.2 + MyEclipse 10.0 配置远程接口 <interface name="management"> <inet-address value="${jboss.bind.address.management:127.0.0.1}"/> </interface> <socket-binding name="management-native"

jboss eap 6.3 域(Domain)模式配置

jboss提供了二种运行模式:standalone(独立运行模式).domain(域模式),日常开发中,使用standalone模式足已:但生产部署时,一个app,往往是部署在jboss集群环境中的,如果所有jboss server均采用standalone模式,会给运维带来极大的工作量,需要每台jboss server上逐一部署/更新,显然不适合. domain模式正是为了解决这一问题,该模式下,所有jboss server可以划分成不同的group(注:这里的jboss server并不一定

linux下jboss eap 6.3 域(Domain)模式配置

jboss eap 6.3 域(Domain)模式配置(开始之前先安装jdk) jboss提供了二种运行模式:standalone(独立运行模式).domain(域模式),日常开发中,使用standalone模式足已:但生产部署时,一个app,往往是部署在jboss集群环境中的,如果所有jboss server均采用standalone模式,会给运维带来极大的工作量,需要每台jboss server上逐一部署/更新,显然不适合. domain模式正是为了解决这一问题,该模式下,所有jboss s

linux下jboss eap 6.3 集群(cluster)配置

jboss eap 6.3 集群(cluster)配置 接上一篇继续,Domain模式解决了统一管理多台jboss的问题,今天我们来学习如何利用mod_cluster来实现负载均衡.容错. mod_cluster是jboss的一个开源集群模块(基于apache 2.2.x),官网地址为http://mod-cluster.jboss.org/ ,下面是使用步骤: 一.从官网下载binary文件 http://mod-cluster.jboss.org/downloads/1-2-6-Final-