標籤:load 一個 char 複製 cli html main 使用者名稱 期望
一、前言
客戶在計劃將業務向雲平台遷移,這些天也在測試將資料庫由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>
四、應用修改
這部分會因所使用的架構不同而有很大差異,只列出本項目所涉及到一些內容。
<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代碼或者調整表欄位類型。
JBoss EAP 為應用項目配置PostgreSQL資料來源