2016-05-27 3 views
0

У нас есть крошечное веб-приложение с использованием сервера Tomcat. Все данные базы данных находятся в файле свойств в виде пар значений ключа для чтения hibernate.cfg.xml.

Чтобы сделать его легко управляемым для команды сервера, файл свойств должен перейти в папку $TOMCAT_HOME/lib. Конфигурационный файл Hibernate находится в: APP_HOME\src\main\resources\hibernate.cfg.xml
и к нему могут быть доступны классы приложений.
Конфигурационный файл hibernate, похоже, не читает $TOMCAT_HOME/lib/myapp.properties.
Мое основное требование заключается в том, что файл свойств должен находиться в $ TOMCAT_HOME/lib.
Может ли кто-нибудь предложить мне правильную вещь.

Заранее спасибо ..!

ответ

0

Спасибо V33R и Chetan. Оба ваших комментария дали мне направление. я использовал свойство системы

catalina.home

вместо catalina.base который не указывал на нужное место мне нужно. Ниже то, что я наконец-то:

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; 
} 

мне пришлось удалить свойства БД, которые были установлены в файле hibernate.cfg.xml к описанному ниже методу. Я попытался загрузить файл извлеченных свойств, но не работал должным образом и, следовательно, загрузил их в экземпляр Hibernate.cfg.Configuration, как показано ниже. Чтобы построить завод Session:

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(); 
     } 
    } 

Открытый метод, чтобы получить SessionFactory

public static SessionFactory getSessionFactory() { 

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

Круто .. И хорошо, что ты писал, что вы в конечном итоге делает, чтобы решить эту проблему так, чтобы другие могли извлечь выгоду из этого. catalina.base следует использовать, однако, если вы собираетесь запускать два экземпляра tomcat, в противном случае catalina.home должно быть в порядке. –

+0

Я не уверен, доступен ли файл с $ TOMCAT_HOME/lib, используя свойство 'catalina. base ', поскольку он указывает на: workspace \ .metadata \ .plugins \ org.eclipse.wst.server.core \ tmp0. Здесь я не вижу ссылки на папку lib. – NixRam

+1

Возможно, вы настроили сервер в Eclipse. Для меня как 'catalina.base', так и' catalina.home' указывают на то же место, 'C: \ Program Files \ Apache Software Foundation \ Tomcat 7.0. 'Так или иначе, так как ваш код работает, yey! –

1

Вы можете попробовать это, чтобы получить путь к файлу свойств:

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

А затем настроить Hibernate использовать этот конфигурационный файл с помощью:

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

Однако, не то, что это будет работать с Только Tomcat и необходимо изменить, если вы используете другой сервер, например Glassfish и т. Д.

1

Для tomcat это можно сделать, используя:

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); 
Смежные вопросы