如何从外部项目文件夹访问hibernate.cfg.xml,config.properties和log4j.properties

时间:2013-10-18 08:26:00

标签: java xml eclipse hibernate

我想将我的java项目(使用eclipse)导出到可执行jar中, 但我希望将来可以编辑hibernate.cfg.xml,config.properties和log4j.properties, 那么如何让hibernate从外部项目文件夹访问该文件或以任何其他方式使该文件可以在将来编辑,

我已经尝试从外部项目文件夹

访问hibernate.cfg.xml这段代码
SessionFactory sessionFactory = new Configuration().configure("mon/hibernate.cfg.xml").buildSessionFactory();

但是我收到了这个错误

mon/hibernate.cfg.xml not found
Exception in thread "main" java.lang.ExceptionInInitializerError

仍然不知道config.properties和log4j.properties, 任何帮助都将是愉快的:)

2 个答案:

答案 0 :(得分:1)

我的解决方案是你的问题:

<强> config.properties

通过设置到JVM的参数-DconfigurationFile定义配置文件。然后尝试在confiFile(jar内)中找到classpath,如果找不到,则会搜索文件系统。好吧,最后,属性将被JVM参数覆盖。

Properties prop = new Properties();
String configFile = System.getProperty("configurationFile",defaultConfigurationFile);
    try {
      InputStream classPathIo = getClass().getClassLoader().getResourceAsStream(configFile);
      if(classPathIo != null) {
        prop.load(classPathIo);
      } else {
        prop.load(new FileReader(configFile));
    } catch (FileNotFoundException e) {
      log.warn("The config file {} cannot be found. It can be setup by -DconfigurationFile parameter.",configFile);
    } catch (IOException e) {
      log.warn("The config file {} is not readable.",configFile);
    } finally {
      log.info("Configuration loaded! {} values found from configFile {}.",prop.entrySet().size(),configFile);
      prop.putAll(System.getProperties());
    }

<强> log4j.properties

解决方案是使用以下JVM参数:

-Dlog4j.configuration={path to file}

如果文件不在类路径中(在Tomcat的情况下在WEB-INF / classes中)但在磁盘上某处,请使用file:,如

-Dlog4j.configuration=file:/somewhere/on/disk/log4j.properties

<强> hibernate.cfg.xml中

我不知道该怎么做。无论如何,在发布后很难配置持久性,因为配置很难绑定到实现。我认为将它保存在classpath中是可以的。

答案 1 :(得分:0)

您可以指示hibernate从文件系统加载配置文件,

有很多重载的configure()方法可用,请参阅documentaion的链接

以下是您可以采取的方式:

File conf = new File(ABS_PATH_TO_CONFIG+File.separator+"hibernate.cfg.xml");
Configuration configuration = new Configuration().configure(conf.getAbsoluteFile());

ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);

http://docs.jboss.org/hibernate/orm/3.6/javadocs/org/hibernate/cfg/Configuration.html#configure(java.io.File)

对于log4j,您可以使用log4j配置文件

给出-D参数

喜欢-Dlog4j.configuration={path to .properties or .xml }

log4j外化的类似问题:How to initialize log4j properly?

同样值得一读。