我在Glassfish 4.1上运行了一个使用JDBC资源的应用程序。在应用程序本身中,我有一个persistence.xml
文件,列出了所有实体,并告诉容器要使用哪个JDBC资源。我已经定义了一些属性来记录它执行的SQL。它看起来像这样:
<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 Resources并在那里添加了2个属性,但这并不起作用。
有没有办法删除特定环境&#34;值persistence.xml
文件和Glassfish配置中的值?我现在用Google搜索了一段时间,但似乎没有找到正确的溶剂。我找到的是Hibernate可以选择指定一个&#34;配置文件&#34;但我还没有找到这个用于EclipseLink。
答案 0 :(得分: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
答案 1 :(得分:0)
根据glassfish documentation,persistence.xml设置优先于全局设置,因此我不建议您稍后要覆盖的persistence.xml文件中的任何内容。
也就是说,EclipseLink服务器集成可以使用服务器日志,允许外部控制设置。有关在应该控制EclipseLink写入的日志文件的glassfish中设置日志记录属性的说明,请参阅this。否则,您可以在peristence.xml文件中定义不同的日志机制,例如log4J或您可以按照here
的方式控制您希望的方式的自定义机制。