0

我想将我的 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,任何帮助都会很高兴:)

4

2 回答 2

1

您的问题有我的解决方案:

配置属性

-DconfigurationFile您通过设置为 JVM 的参数定义配置文件。然后尝试confiFile在您的classpath(内部 jar)中查找,如果未找到,则将搜索文件系统。好吧,最后属性将被 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

休眠.cfg.xml

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

于 2013-10-18T08:43:07.487 回答
0

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

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

以下是您可以执行的方式:

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 外部化的类似问题:如何正确初始化 log4j?

这也值得一读。

于 2013-10-18T08:43:44.200 回答