如何使用环境变量配置 Hibernate

     2023-02-26     164

关键词:

【中文标题】如何使用环境变量配置 Hibernate【英文标题】:How can I configure Hibernate with environment variable 【发布时间】:2012-01-11 02:12:45 【问题描述】:

所以我想在 heroku 上部署我的 java 应用程序。部署后,它会设置一个环境变量 DATABASE_URL。我想用它作为我的休眠网址。我目前有 hibernate.cfg.xml 并在那里设置了 url jdbc:postgresql://localhost:port/db 像这样。如何将其更改为 DATABASE_URL?

【问题讨论】:

【参考方案1】:

其中一种方法是在创建 SessionFactory 之前使用 Configuration 中的 setProperty(String propertyName, String value) 显式覆盖 hibernate.connection.url 的值。

要获取环境变量,可以使用System.getenv(String name)。

/**Load the hibernate.cfg.xml from the classpath**/
Configuration cfg = new Configuration();
cfg.setProperty("hibernate.connection.url", System.getenv("DATABASE_URL"));
SessionFactory sessionFactory = cfg.buildSessionFactory();

【讨论】:

非常感谢您在几分钟前解决了这个问题。 :) 请告诉我是否可以。祝你好运:) 您可能需要调整从 System.getenv("DATABASE_URL") 返回的字符串。【参考方案2】:

希望对你有帮助,

我正在使用 Jboss AS 5.x 的 HSQL DB 和休眠来动态创建表并使用以下 *.cfg.xml 文件。

使用$JBOSS_HOME 作为环境变量。

<?xml version="1.0" encoding="UTF-8"?>

    <session-factory>

            <!-- Database connection settings -->

            <property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
            <property name="connection.url">jdbc:hsqldb:$JBOSS_HOME/server/test/data/hypersonic/localDB</property>
            <property name="connection.username">sa</property>

            <property name="connection.password"></property>

            <!-- JDBC connection pool (use the built-in) -->
            <property name="connection.pool_size">1</property>

            <!-- SQL dialect -->
            <property name="dialect">org.hibernate.dialect.HSQLDialect</property>

            <!-- Enable Hibernate's automatic session context management -->
            <property name="current_session_context_class">thread</property>

            <!-- Disable the second-level cache -->
            <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

            <!-- Echo all executed SQL to stdout -->
            <property name="show_sql">true</property>
            <!-- Drop and re-create the database schema on startup -->

            <property name="hbm2ddl.auto">update</property>
            <!--  Mapping files  -->
            <mapping resource="friends_presence_log.hbm.xml" />
            <mapping resource="profileuuid.hbm.xml" />
    </session-factory>

所以,这意味着如果你想在 Jboss 配置中使用环境变量,那么你可以正常使用,稍后由内部 hibernate.jar 实用程序获取,你可以像在 java 程序中一样正常获得连接或其他东西。

【讨论】:

使用 $VAR 不会被解析【参考方案3】:

我搜索了很多其他解决方案,而没有在 java 本身中进行任何编程。 我得出以下结论。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
                                     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
    <property name="hibernate.check_nullability">false</property>
    <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
    <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
    <property name="hibernate.connection.username">$hibernate_username</property>
    <property name="hibernate.connection.password">$hibernate_password</property>
    <property name="hibernate.connection.url">jdbc:postgresql://$hibernate_db_host/$hibernate_db_name</property>
    <property name="hibernate.search.autoregister_listeners">false</property>
    <property name="hibernate.hbm2ddl.auto">update</property>
    <property name="hibernate.show_sql">$hibernate_show_sql</property>
</session-factory>
</hibernate-configuration>

我使用以下 vmargs 启动我的应用程序:

-Dhibernate_username=test -Dhibernate_password=testpassword -Dhibernate_db_host=localhost -Dhibernate_db_name=test -Dhibernate_show_sql=true

我将此解决方案发布到此旧帖子,因为我在旧论坛帖子中发现了此问题(Google Search Side 3+ ^^)。而且我认为这非常有用。

【讨论】:

为什么我们需要将它们作为 VM 参数传入,而不仅仅是在环境变量中设置它们? 在我们的用例中,休眠配置文件被打包在一个 jar 文件中。我们的客户编辑这些文件有点乏味。这就是我们将它们打包在 VM 参数中的原因,它们更易于配置。 感谢您对旧话题的回复!有没有什么方法可以像你一样设置它,而不是 VMargs 使用环境变量?【参考方案4】:

如果你使用像 gradle 这样的构建工具,你可以使用 @...@ 括起来的占位符,如下所示:

<?xml version = "1.0" encoding = "utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM 
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
   <session-factory>
      <property name = "hibernate.dialect">
         @db_dialect@
      </property>

      <property name = "hibernate.connection.driver_class">
         @db_driver@
      </property>

      <!-- Assume test is the database name -->

      <property name = "hibernate.connection.url">
         @db_url@
      </property>

      <property name = "hibernate.connection.username">
         @db_user@
      </property>

      <property name = "hibernate.connection.password">
         @db_password@
      </property>

      <!-- Cannot use anything other than "validate" in production. --> 
      <property name="hibernate.hbm2ddl.auto">validate</property>

      <!-- Connection pooling -->
      <property name="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property>
      <property name="hibernate.c3p0.min_size">1</property>
      <property name="hibernate.c3p0.max_size">500</property>
      <property name="hibernate.c3p0.timeout">120</property>
      <property name="hibernate.c3p0.max_statements">1024</property>

      <!-- Your mappings -->
   </session-factory>
</hibernate-configuration>

然后在 build.gradle 你会有这样的东西:

def db_driver = System.getenv('MYAPP_DB_DRIVER')
def db_url = System.getenv('MYAPP_DB_URL')
def db_dialect = System.getenv('MYAPP_DB_DIALECT')

processResources 
    filesMatching(['**/*.xml', '**/*.properties', '**/*.json']) 
        filter ReplaceTokens, tokens: [
            'db_driver': db_driver,
            'db_url': db_url,
            'db_dialect': db_dialect,
        ]
    

【讨论】:

如何在 GitLab Omnibus 配置中使用环境变量

】如何在GitLabOmnibus配置中使用环境变量【英文标题】:HowtouseenvironmentvariablesinGitLabOmnibusconfiguration【发布时间】:2020-02-2904:05:31【问题描述】:我在Kubernetes集群上运行GitLab。我有一个包含我所有综合配置的ConfigMap。ConfigMap被挂... 查看详情

如何通过 Elasticbeanstalk 配置文件(使用 Docker)访问环境变量?

】如何通过Elasticbeanstalk配置文件(使用Docker)访问环境变量?【英文标题】:HowdoyougetaccesstoenvironmentvariablesviaElasticbeanstalkconfigurationfiles(usingDocker)?【发布时间】:2014-12-3117:27:49【问题描述】:例如,如果我想挂载一个由环境变... 查看详情

如何使用环境变量覆盖 ASP.NET Core 配置数组设置

】如何使用环境变量覆盖ASP.NETCore配置数组设置【英文标题】:HowtooverrideASP.NETCoreconfigurationarraysettingsusingenvironmentvariables【发布时间】:2016-10-0601:19:00【问题描述】:TL;DR在一个ASP.NETCore应用程序中,我有一个appsettings.json配置文... 查看详情

如何使用 vue-cli 3 配置环境变量?

】如何使用vue-cli3配置环境变量?【英文标题】:Howtoconfigureenvironmentvariableswithvue-cli3?【发布时间】:2019-04-1005:37:00【问题描述】:我尝试在vue-cli中使用环境变量,但不起作用,每次使用console.log(process.env.VUE_APP_BASE_URI)时都会说... 查看详情

环境变量是什么?如何配置环境变量

环境变量是什么呢?其实我们可以把它理解为【系统的视线范围】,没错,配置进入了环境变量的程序,就等于是进入了系统的视线范围,打开DOS命令窗口后输入程序名,系统就会把在其视线内的(环境变量内)的程序找出来,... 查看详情

mac下如何配置环境变量

本文以配置JDK的环境变量为例,示范如何配置环境变量,后续在安装Android、Maven、MongoDB等时都会需要配置相应的环境变量。1.在英文输入法的状态下,按键盘“Ctrl+空格”组合键,调出Spotlight搜索,在这里可以快速启动终... 查看详情

使用firebase托管时如何在vuejs的环境变量中保存firebase配置参数

】使用firebase托管时如何在vuejs的环境变量中保存firebase配置参数【英文标题】:Howtosavefirebaseconfigparametersinenvironmentvariablesinvuejswhenusingfirebasehosting【发布时间】:2019-12-3008:52:42【问题描述】:我是Firebase的新手。我已经将它应用... 查看详情

如何使用 METEOR_SETTINGS 环境变量在 AWS/EBS 上配置 Meteor

】如何使用METEOR_SETTINGS环境变量在AWS/EBS上配置Meteor【英文标题】:HowtoconfigMeteoronAWS/EBSusingMETEOR_SETTINGSenvironmentvariable【发布时间】:2016-04-1803:00:51【问题描述】:尝试在AWS/EBS(AmazonWebServices,ElasticBeanstalk)环境中设置Meteor。Meteo... 查看详情

mac下如何配置环境变量

参考技术A本文以配置JDK和SDK的环境变量为例,示范如何配置环境变量,后续在安装Android、Maven、MongoDB等时都会需要配置相应的环境变量。1.打开终端,根目录输入vim.bash_profile并打开:2.输入如下配置(根据自己的路径进行修改)然... 查看详情

如何从应用程序模块配置环境变量或将环境变量传递给角度库?

】如何从应用程序模块配置环境变量或将环境变量传递给角度库?【英文标题】:Howtoconfigureorpassenvironmentvariabletoangularlibraryfromapplicationmodule?【发布时间】:2019-09-0507:54:06【问题描述】:我有一个调用后端javaAPI的Angular库。我希... 查看详情

使用环境变量在 Spring Boot 中配置 MongoDB

...境变量配置与MongoDB的连接-即我已经按照在线示例展示了如何通过application.properties配置我的mongo数据库/主机/端口,但 查看详情

使用在线openjdk安装jdk如何找到并配置环境变量

参考技术A1.查找java相关得列表:yum-ylistjava*2.到这一步之后,就继续安装jdk:yum-yinstalljava-1.8.0-openjdk*。这个过程可能要持续几分钟的时间,跟自己的网速有一定的关系。3.等到完成之后,检查jdk是否安装成功:java-version。查找安... 查看详情

如何设置androidsdk的环境变量

AndroidSDK环境变量配置配置如下:1.打开系统环境变量,在系统变量 里点新建,弹出新建系统变量对话框,设置如下:2.变量名:Android_SKD_HOME   //名字随便你取啦,不冲突,合法即可3.变量值:D:\\AndroidSDK         //此处写AndroidSDK... 查看详情

您可以在配置文件中使用 fluentd 的环境变量吗

...ntd【发布时间】:2015-01-2918:36:29【问题描述】:我想知道如何在Fluentd配置中使用环境变量,我试过了:<match**>typeelasticsearchlogstash_formattruelogstash_prefix$ENV_VARho 查看详情

如何创建简易node环境并使用

一、首先要安装node,下载地址(http://nodejs.cn/download/),然后打开cmd命令窗口检测node是否安好:如此显示,则说明已经安装成功,接下来配置环境变量,打开我的电脑-->属性-->环境变量,配置成:系统变量(新增):NODE_PATH:... 查看详情

如何在 Angularjs Protractor 中使用系统环境变量?

】如何在AngularjsProtractor中使用系统环境变量?【英文标题】:HowcanIuseSystemEnvironmentVariablesinAngularjsProtractor?【发布时间】:2014-06-0703:21:51【问题描述】:我的计划是将用户名和密码存储为系统环境变量,并在AngularjsProtractor配置文... 查看详情

macosx-如何在bash_profile中配置全局环境变量

我们知道,在Linux操作系统下,配置环境变量是使用如下命令:vim/etc/profile在OSX下,我们用如下命令打开环境变量配置文件:open~/.bash_profile 典型的环境变量配置如下: #javaexportJAVA_HOME=/home/myuser/jdk1.7.0_03exportPATH=$JAVA_HOME/bin:$PATHexpor... 查看详情

如何在 IntelliJ 中设置 spring 活动配置文件环境变量

】如何在IntelliJ中设置spring活动配置文件环境变量【英文标题】:howtosetspringactiveprofileenvironmentvariableinIntelliJ【发布时间】:2017-05-0519:16:31【问题描述】:我在Eclipse中使用SpringBoot应用程序(maven项目)。当我运行maven项目的testclea... 查看详情