Как я могу настроить Hibernate с переменной среды - PullRequest
8 голосов
/ 02 декабря 2011

Так что я хочу развернуть мое приложение Java на heroku.После развертывания он устанавливает переменную среды DATABASE_URL.Я хочу использовать это как мой URL для спящего режима.В настоящее время у меня есть hibernate.cfg.xml, и я установил URL-адрес jdbc: postgresql: // localhost: port / db следующим образом.Как я могу изменить его на DATABASE_URL?

Ответы [ 3 ]

11 голосов
/ 02 декабря 2011

Одним из способов является использование setProperty (String propertyName, String value) из Конфигурация для явного переопределения значения hibernate.connection.url перед созданием SessionFactory.

Чтобы получить переменные среды, вы можете использовать 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();
10 голосов
/ 08 октября 2015

Я много искал другое решение, не программируя ничего в самой 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+ ^^).И я думаю, что это очень полезно.

1 голос
/ 08 января 2013

Да поможет вам это,

Я использую HSQL DB Jboss AS 5.x и hibernate для динамического создания таблиц и использую следующий * .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-программе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...