2014-04-11 61 views
1

我正在寻找如何在安装过程中控制java属性的方式。如何即时修改Java属性?

我在我的应用程序中有Spring Data JPA + Hibernate。我在bean中配置了jpa属性。并将其移至属性文件。

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="persistenceXmlLocation" value="classpath*:META-INF/persistence.xml"></property> 
    <property name="persistenceUnitName" value="hibernatePersistenceUnit"/> 
    <property name="dataSource" ref="dataSource"/> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" /> 
    </property> 
    <property name="jpaPropertyMap"> 
     <map> 
      <entry key="hibernate.hbm2ddl.auto" value="${hibernate.hbm2ddl}"/> 
      <entry key="hibernate.show_sql" value="${hibernate.show.sql}" /> 
      <entry key="hibernate.dialect" value="${hibernate.dialect}" /> 
     </map> 
    </property> 
</bean> 

属性文件:prop-local-override.properties其中local是环境变量。

hibernate.hbm2ddl=update 
#hibernate.dialect=org.hibernate.dialect.HSQLDialect 
hibernate.show.sql=true 

因此,一切工作正常。但是我想在安装过程中更改hibernate.hbm2ddl。我使用rpm包来安装我的应用程序。例如,我想在安装应用程序时将此属性设置为“创建”。并在每次重新启动后返回更新。

看起来像-Dhibernate.hbm2ddl =更新正常。但这是手动工作。有没有人有一些想法如何自动,没有像Puppet这样的大工具?

感谢, 谢尔盖·K.

+0

什么'更新'有误吗?它创建模式,如果它不存在,并且它存在,它将更新它。 –

+0

其实没什么不对。我的数据库包含我使用的数据。该数据自动插入到hibernate.hbm2ddl.import_files属性中。当我安装我的应用程序时,我想在数据库中拥有这些数据。但此属性仅适用于创建和创建删除值。所以,我想动态修改它。安装应用程序时设置“创建”,重新启动或更新时设置“更新”。而已。 –

回答

0

没试过之前动态变化的,但你可以从你的实体管理器访问该属性映射:

entityManager.getEntityManagerFactory()的GetProperties()

+0

这是如何回答这个问题的? – Prasad

+0

你有没有想过Spring可以理解不同的阶段(安装,更新或删除)。我知道rpm-maven-plugin包含目标:preinstallScriptlet和postinstallScriptlet。但据我所知,他无法在应用程序中获得控制权。 –