【问题标题】:How can I use environment variable in hibernate config file?如何在休眠配置文件中使用环境变量?
【发布时间】:2016-11-06 05:37:55
【问题描述】:

我目前正在通过属性文件在休眠(版本 4.0.1)文件中使用数据库参数。

我想使用环境变量中的一些数据库参数。如何在加载到上下文之前从 java 文件中获取值并设置到 xml 文件中。

<bean id="propertyConfigurer"
    class="org.jasypt.spring31.properties.EncryptablePropertyPlaceholderConfigurer">
        <constructor-arg ref="configurationEncryptor" />
        <property name="locations">
            <list>
                <value>classpath:/test/demo/prop/DataParam.properties</value>
            </list>
        </property>
    </bean>

<bean id="data" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass">
            <value>${driverClass}</value>
        </property>
        <property name="jdbcUrl">
            <value>${dbconnecturl}</value>
        </property> 
        .
        .
        .
</beans>

我有一些想法要创建一个 Configuration 类的对象,但我不知道在哪里编写该代码以及如何实现它。

【问题讨论】:

    标签: java database spring hibernate jakarta-ee


    【解决方案1】:

    您需要使用spring表达式语言来配置OS环境变量的属性,如下所示:

    <bean id="propertyConfigurer"
            class="org.jasypt.spring31.properties.EncryptablePropertyPlaceholderConfigurer">
                <constructor-arg ref="configurationEncryptor" />
                <property name="locations">
                    <list>
                        <value>classpath:/test/demo/prop/DataParam.properties</value>
                    </list>
                </property>
            </bean>
    
        <bean id="data" class="com.mchange.v2.c3p0.ComboPooledDataSource">
                <property name="driverClass">
                    <value>#{ systemProperties['driverClass']}</value>
                </property>
                <property name="jdbcUrl">
                    <value>#{ systemProperties['dbconnecturl']}</value>
                </property> 
                .
                .
                .
        </beans>
    

    【讨论】:

    • 感谢您的解决方案。如果我的 JDBC URL 由 2 个环境变量和一些字符串组成,我该怎么办。在那种情况下应该是什么语法。我怎样才能合并?如果我写这样的东西会起作用吗?在我的本地系统 URL 是 connectionUrl=jdbc:edb://127.0.0.1:5432/test "#{ jdbc:edb://systemProperties['OPENSHIFT_POSTGRESQL_DB_HOST']:systemProperties[ 'OPENSHIFT_POSTGRESQL_DB_PORT']//测试 }"
    • #{ (systemProperties['dbconnecturl1']}).concat(systemProperties['dbconnecturl2']}) }
    【解决方案2】:

    例如,您可以使用&lt;property name="username" value="#{systemProperties['dbUsername']}"/&gt;

    变量systemProperties是预定义的,你可以查看Xml Based Configuration了解更多详情。

    【讨论】:

      猜你喜欢
      • 2019-11-08
      • 1970-01-01
      • 2022-12-21
      • 1970-01-01
      • 2019-01-25
      • 1970-01-01
      • 2020-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多