2016-03-31 80 views
0

我有一個運行在使用JDBC資源的Glassfish 4.1上的應用程序。在應用程序本身中,我有一個persistence.xml文件,它列出了所有的實體,並告訴容器使用哪個JDBC資源。我已經定義了一些屬性來記錄它執行的SQL。它看起來像這樣:glassfish中的JPA persistence.xml屬性JDBC資源

<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
    <persistence-unit name="MyResource_PU" transaction-type="JTA"> 
     <jta-data-source>jdbc/my_resource</jta-data-source> 
     <class>com.example.entities.EntityOne</class> 
     <class>com.example.entities.EntityTwo</class> 
     <class>com.example.entities.EntityThree</class> 
     <exclude-unlisted-classes>true</exclude-unlisted-classes> 
     <properties> 
      <property name="eclipselink.logging.level.sql" value="FINE"/> 
      <property name="eclipselink.logging.parameters" value="true"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

現在,當這個應用程序進入生產,我不希望SQL被記錄。所以每次我發佈時,我都需要提醒自己改變eclipselink.logging的屬性。

我想,應該有更好的方法來處理這個問題。所以我去了Glassfish管理控制檯,到了JDBC資源並在那裏添加了2個屬性,但這不起作用。

是否有任何方法從persistence.xml文件和Glassfish配置中刪除「環境特定」值?我已經搜索了一段時間,但似乎沒有找到正確的溶劑。我發現的是,Hibernate可以選擇指定一個「配置文件」,但是我還沒有發現EclipseLink。

回答

0

我們在不同的文件中爲每個環境使用了維護屬性文件,例如DEV,QA,PROD,UAT等,並在構建過程中複製其中的一個。

Ant build 

<property environment="env" /> 
       <!-- ***** COMMAND LINE ARGUMENTS DEMOED HERE --> 
       <property name="build_type" value= "${env.build_type}"/> 

<copy todir="deploy"> 
    <fileset dir="src_dir"/> 
    <globmapper from=${env.build_type}".persistence.xml" to="persistence.xml"/> 
</copy> 

運行建立這樣

ant -Denv.build_type=PROD 

這將複製到PROD.persistence.xml persistence.xml中

ant -Denv.build_type=DEV 

這將複製到DEV.persistence.xml persistence.xml中

+0

這可以工作,但你有一個環境依賴的耳朵文件。這是我想避免的。沒有辦法繞過它嗎? (順便說一下,我使用maven,但這沒有問題) – Erates

+0

使用Spring配置文件,您可以啓動實體管理器bean,具體取決於將引用persistence.xml的活動配置文件,如dev-persistence.xml,test- persisitence.xml,prod-您的環境的persistence.xml。您可以使用web.xml設置活動配置文件。大多數情況下,web.xml不會改變那麼多,所以你可以通過爲該環境設置spring配置文件活動屬性來將web.xml保存在存儲庫中。 – AGdev

+0

將值存儲在環境變量中,讓程序從此處讀取。 – AGdev

0

根據glassfish documentation,persistence.xml設置意味着優先於全局s所以我不會推薦任何你想在稍後重寫的persistence.xml文件。

也就是說,EclipseLink服務器集成可以利用服務器日誌,允許外部控制設置。請參閱this以瞭解如何設置glassfish中的日誌記錄屬性,以控制EclipseLink寫入的日誌文件。否則,你可以在你的peristence.xml文件中定義一個不同的日誌機制,比如log4J或者一個自定義的日誌機制,你可以控制你希望如何觸及here