从 $TOMCAT_HOME\lib 读取属性文件
Reading properties file from $TOMCAT_HOME\lib
我们有一个使用 Tomcat 服务器的小型 Web 应用程序。所有数据库详细信息都在属性文件中作为键值对供 hibernate.cfg.xml
读取。
为了便于服务器团队管理,属性文件需要转到 $TOMCAT_HOME/lib
文件夹。 Hibernate 配置文件位于:APP_HOME\src\main\resources\hibernate.cfg.xml
并且它可以被应用程序访问 类。
休眠配置文件似乎没有读取 $TOMCAT_HOME/lib/myapp.properties
。
我的主要要求是属性文件应位于 $TOMCAT_HOME/lib.
谁能给我建议正确的做法。
提前致谢..!
您可以试试这个来获取属性文件的路径:
String propertyFilePathStr= System.getProperty("catalina.base") +
File.separator + "lib"+ File.separator + "myapp.properties";
然后通过以下方式配置 Hibernate 以使用此配置文件:
Configuration config = new Configuration().configure(propertyFilePathStr);
但是,这并不是说这仅适用于 Tomcat,如果您使用不同的服务器(如 Glassfish 等)则需要进行更改
对于 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);
谢谢V33R和车探。你的两个评论都给了我一个方向。
我用系统属性
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 实例中,如下所示。
构建会话工厂:
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();
}
}
Public获取SessionFactory的方法
public static SessionFactory getSessionFactory() {
if(sessionFactory == null){
sessionFactory = buildSessionFactory();
}
return sessionFactory;
}
我们有一个使用 Tomcat 服务器的小型 Web 应用程序。所有数据库详细信息都在属性文件中作为键值对供 hibernate.cfg.xml
读取。
为了便于服务器团队管理,属性文件需要转到 $TOMCAT_HOME/lib
文件夹。 Hibernate 配置文件位于:APP_HOME\src\main\resources\hibernate.cfg.xml
并且它可以被应用程序访问 类。
休眠配置文件似乎没有读取 $TOMCAT_HOME/lib/myapp.properties
。
我的主要要求是属性文件应位于 $TOMCAT_HOME/lib.
谁能给我建议正确的做法。
提前致谢..!
您可以试试这个来获取属性文件的路径:
String propertyFilePathStr= System.getProperty("catalina.base") +
File.separator + "lib"+ File.separator + "myapp.properties";
然后通过以下方式配置 Hibernate 以使用此配置文件:
Configuration config = new Configuration().configure(propertyFilePathStr);
但是,这并不是说这仅适用于 Tomcat,如果您使用不同的服务器(如 Glassfish 等)则需要进行更改
对于 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);
谢谢V33R和车探。你的两个评论都给了我一个方向。 我用系统属性
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 实例中,如下所示。 构建会话工厂:
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();
}
}
Public获取SessionFactory的方法
public static SessionFactory getSessionFactory() {
if(sessionFactory == null){
sessionFactory = buildSessionFactory();
}
return sessionFactory;
}