有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何访问hibernate。cfg。xml,config。属性和log4j。来自项目文件夹外部的属性

我想将我的java项目(使用eclipse)导出到可执行jar中, 但是我想要冬眠。cfg。xml,config。属性和log4j。属性可编辑以备将来使用, 那么,如何使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

还是不知道配置。属性和log4j。属性, 任何帮助都是我的荣幸:)


共 (2) 个答案

  1. # 1 楼答案

    以下是我对你问题的解决方案:

    配置。属性

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

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

    -Dlog4j.configuration={path to file}
    

    如果文件不在类路径中(对于Tomcat,在WEB-INF/classes中),而是在磁盘上的某个地方,请使用file:,比如

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

    冬眠。cfg。xml

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

  2. # 2 楼答案

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

    有很多重载的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外部化的类似问题:How to initialize log4j properly?

    这也值得一读