2011-12-01 46 views
7

? Entonces quiero implementar mi aplicación java en heroku. Una vez desplegado, establece una variable de entorno DATABASE_URL. Quiero usar eso como mi url para hibernar. Actualmente tengo hibernate.cfg.xml y allí configuro el url jdbc: postgresql: // localhost: port/db de esta manera. ¿Cómo puedo cambiarlo para tomar DATABASE_URL?¿Cómo puedo configurar Hibernate con la variable de entorno

Respuesta

10

Una de las formas es usar setProperty(String propertyName, String value) de Configuration para anular explícitamente el valor de hibernate.connection.url antes de crear SessionFactory.

Para obtener las variables de entorno, puede usar 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(); 
+0

Muchas gracias, lo descubrí hace unos minutos. :) –

+0

Por favor, hágamelo saber si está bien o no. Buena suerte :) –

+2

Es posible que deba modificar la cadena devuelta por System.getenv ("DATABASE_URL"). –

1

de mayo de este ayuda que,

estoy usando HSQL DB de JBoss AS 5.x e Hibernate para crear dinámicamente las tablas y el uso siguiente archivo * .cfg.xml.

que está utilizando $ JBOSS_HOME como variable de entorno.

<?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> 

Por lo tanto, su media si desea utilizar la variable de entorno en Jboss entonces su configuración se puede utilizar normalmente que más tarde tomada por la utilidad interna hibernate.jar y obtienes conexión o cosas normalmente como en un programa Java.

4

Busqué mucho por otra solución sin programar nada en Java. vine a siguiente conclusión

<?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> 

y comienzo mi solicitud con la siguiente vmargs:

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

he puesto esta solución a este antiguo puesto, porque me encontré con esto en un viejo mensaje del foro (Búsqueda de Google Lado 3+ ^^). Y creo que esto es muy útil.

Cuestiones relacionadas