2016-05-27 9 views
0

Wir haben eine kleine Webanwendung mit Tomcat-Server. Alle Datenbankdetails sind in einer Eigenschaftendatei als Schlüsselwertpaare für die hibernate.cfg.xml zu lesen.

Um es für das Serverteam leicht zu managen, muss die Eigenschaftendatei in den Ordner $TOMCAT_HOME/lib verschoben werden. Die Hibernate-Konfigurationsdatei befindet sich in: APP_HOME\src\main\resources\hibernate.cfg.xml
und kann von den Anwendungsklassen aufgerufen werden.
Die Hibernate-Konfigurationsdatei scheint nicht zu lesen $TOMCAT_HOME/lib/myapp.properties.
Meine Hauptanforderung ist, dass die Eigenschaftendatei in $ TOMCAT_HOME/lib enthalten sein sollte.
Kann mir bitte jemand vorschlagen das Richtige zu tun.

Vielen Dank im Voraus ..!

Antwort

0

Vielen Dank V33R und Chetan. Ihre beiden Kommentare hatten mir eine Richtung gegeben. ich verwendet, um die Systemeigenschaft

catalina.home

statt catalina.base, die an die richtige Stelle nicht deutete ich brauchte. unten Das ist, was ich tat schließlich:

private static Properties extractPropertiesFile() throws FileNotFoundException, IOException{ 

    String propertiesFilePath = System.getProperty("catalina.home") + 
      File.separator + "lib"+ File.separator + "myapp.properties"; 

    Properties properties = new Properties(); 
    properties.load(new FileInputStream(propertiesFilePath)); 

    return properties; 
} 

ich die DB-Eigenschaften zu entfernen, hatte die in der hibernate.cfg.xml Datei auf die unten Verfahren eingestellt wurden. Ich habe versucht, die extrahierte Eigenschaftendatei zu laden, funktionierte jedoch nicht wie erwartet und lud sie daher wie unten in die Hibernate.cfg.Configuration-Instanz. Um Session Fabrik zu bauen:

private static SessionFactory buildSessionFactory() { 

     try { 
      Configuration configuration = new Configuration(); 
      Properties properties = extractPropertiesFile(); 

      configuration.configure("hibernate.cfg.xml").setProperties(properties); 

      // The properties below are extracted from $TOMCAT_HOME/lib/myapp.properties 
      configuration.setProperty("hibernate.connection.driver_class", properties.getProperty("propertyfile.database.driver.classname")); 
      serviceRegistry = new ServiceRegistryBuilder().applySettings(
        configuration.getProperties()). buildServiceRegistry(); 
      sessionFactory = configuration.buildSessionFactory(serviceRegistry); 
     } catch (HibernateException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

öffentliche Methode zu erhalten Session

public static SessionFactory getSessionFactory() { 

    if(sessionFactory == null){ 
     sessionFactory = buildSessionFactory(); 
    } 
    return sessionFactory; 
} 
+1

Coole .. Und gute Sache Sie auf dem Laufendes, was tun Sie das am Ende zu lösen, damit andere davon profitieren können. catalina.base sollte jedoch verwendet werden, wenn Sie zwei Instanzen von tomcat ausführen möchten, ansonsten catalina.home sollte in Ordnung sein. –

+0

Ich bin mir nicht sicher, ob eine Datei mit $ TOMCAT_HOME/lib über die Eigenschaft 'catalina aufgerufen werden kann. base ', da es auf Folgendes verweist: workspace \ .metadata \ .plugins \ org.eclipse.wst.server.core \ tmp0. Ich sehe keinen Verweis auf den lib-Ordner von hier. – NixRam

+1

Könnte die Art sein, wie Sie den Server in Eclipse konfiguriert haben. Für mich verweisen sowohl "catalina.base" als auch "catalina.home" auf den gleichen Speicherort "C: \ Programme \ Apache Software Foundation \ Tomcat 7.0". 'Wie auch immer, da dein Code funktioniert, yey! –

1

Sie können dies versuchen, den Weg der Eigenschaften zu erhalten file:

String propertyFilePathStr= System.getProperty("catalina.base") + 
        File.separator + "lib"+ File.separator + "myapp.properties"; 

Und dann konfigurieren Hibernate diese Konfigurationsdatei zu verwenden, indem:

Configuration config = new Configuration().configure(propertyFilePathStr); 

jedoch nicht, dass dies mit arbeiten Tomcat nur und muss geändert werden, wenn Sie einen anderen Server wie Glassfish, etc. verwenden.

1

Für Tomcat ist es möglich, dies zu verwenden:

File configDir = new File(System.getProperty("catalina.base"), "conf"); 
File configFile = new File(configDir, "myconfig.properties"); 
InputStream stream = new FileInputStream(configFile); 
Properties props = new Properties(); 
props.load(stream); 
Verwandte Themen