2011-12-01 10 views
7

Quindi voglio distribuire la mia app java su heroku. Una volta implementato, imposta una variabile di ambiente DATABASE_URL. Voglio usarlo come il mio url per l'ibernazione. Al momento ho hibernate.cfg.xml e lì ho impostato l'url jdbc: postgresql: // localhost: port/db come questo. Come posso cambiarlo per assumere DATABASE_URL?Come configurare Hibernate con la variabile di ambiente

risposta

10

Uno dei modi è quello di utilizzare setProperty(String propertyName, String value) di Configuration di ignorare in modo esplicito il valore di hibernate.connection.url prima di creare il SessionFactory.

Per ottenere le variabili di ambiente, è possibile utilizzare 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

Grazie mille per averlo capito pochi minuti fa. :) –

+0

Per favore fatemi sapere se va bene o no. Buona fortuna :) –

+2

Potrebbe essere necessario modificare la stringa restituita da System.getenv ("DATABASE_URL"). –

1

maggio di aiuto,

Sto usando HSQL DB di JBoss AS 5.xe Hibernate per creare dinamicamente le tabelle e l'utilizzo di file seguente * .cfg.xml.

che utilizza $ JBOSS_HOME come variabile di ambiente.

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

Così, la sua media se si desidera utilizzare variabile d'ambiente in Jboss config allora il vostro possibile utilizzare normalmente che poi presa dal programma di utilità hibernate.jar interna e ottieni la connessione o cose normalmente come in un programma java.

4

Ho cercato molto per un'altra soluzione senza alcuna programmazione in java. Sono venuto a questa conclusione

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

e comincio la mia applicazione con i seguenti vmargs:

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

ho posto questa soluzione a questo vecchio post, perché ho trovato questo in un vecchio post sul forum (Google Search Lato 3+ ^^). E penso che questo sia molto utile.

Problemi correlati