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)
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代码或者调整表字段类型。
posted @ 2017-11-03 17:16  闻歌感旧  阅读(1236)  评论(0编辑  收藏  举报