How to load hibernate.cfg.xml from different location

前端 未结 4 1230
说谎
说谎 2021-02-08 08:43

I am creating a jar using hibernate. I have encountered a situation where I need to change a setting (url) often, so I would like to load the hibernate.cfg.xml like

4条回答
  •  攒了一身酷
    2021-02-08 08:57

    I need to change the sql setting(url) often

    I had the same requirement. For switching just the DB connection properties the approach suggested in the accepted answer, though it works, is a bit of a blunt instrument.

    Loading a completely different configuration file just to change a few connection properties? Now all the other properties that are common in both are duplicated, and every time you make a change you need to make it in two places.

    A better way is to put all the common properties that don't need to change between environments in the default hibernate.cfg.xml, build your Configuration from that as usual, and use the .addProperties() method to add the properties that are environment-specific on top, in this case the connection url. You can load these extra properties from anywhere you like.

    public SessionFactory buildSessionFactory() {
       return getConfiguration().buildSessionFactory();
    }
    
    private Configuration getConfiguration() {
       Configuration config = new Configuration.configure(); // load the base config from the default hibernate.cfg.xml
       return config.addProperties(getConnectionProperties()); // add your custom connection props for this environment on top
    }
    
    private Properties getConnectionProperties() {
      Properties connectionProps = new Properties();
      connectionProps.put("hibernate.connection.url", getConnectionUrl()); 
      // possibly add other props like hibernate.connection.username, hibernate.connection.password
      return connectionProps;
    }
    
    private String getConnectionUrl() {
      // get your connection URL from wherever you like
    }
    

提交回复
热议问题