【问题标题】:How can I modify java properties on the fly?如何即时修改 java 属性?
【发布时间】:2014-05-25 11:07:56
【问题描述】:

我正在寻找如何在安装过程中控制 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=update 工作正常。但这是手工作业。有没有人知道如何在没有像 Puppet 这样的大工具的情况下自动制作它?

谢谢, 塞尔吉·K。

【问题讨论】:

  • “更新”有什么问题?如果架构不存在,它会创建它,如果存在,它会更新它。
  • 其实没有错。我的数据库包含我使用的数据。此数据会自动插入 hibernate.hbm2ddl.import_files 属性。当我安装我的应用程序时,我希望将这些数据保存在数据库中。但此属性仅适用于创建和创建删除值。所以,我想动态修改它。并在安装应用程序时设置“创建”,在我重新启动或更新它时设置“更新”。就是这样。

标签: java spring hibernate jpa properties


【解决方案1】:

以前从未尝试过动态更改此设置,但您可以从实体管理器访问该属性映射:

entityManager.getEntityManagerFactory().getProperties()

【讨论】:

  • 这如何回答这个问题?
  • 你有没有想过 Spring 可以理解不同的阶段(安装、更新或删除)。我知道 rpm-maven-plugin 包含目标:preinstallScriptlet 和 postinstallScriptlet。但据我所知,他无法在应用程序中得到控制。
猜你喜欢
  • 2012-01-02
  • 2013-04-05
  • 2016-02-27
  • 1970-01-01
  • 2018-12-27
  • 2013-06-03
  • 2014-01-29
  • 2016-12-30
  • 2015-08-30
相关资源
最近更新 更多