я достиг его ниже образом:
Сохраняет общие свойства для всей среды в файле hibernate.cfg.xml
, как показано ниже.
<hibernate-configuration>
<session-factory>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">update</property>
<!-- DB mapping if any -->
<mapping class='classname'></mapping>
</session-factory>
</hibernate-configuration>
Добавьте свойства в HibernateUtil.java
класса, который изменяется во время выполнения в соответствии с окружающей средой (URL, имя пользователя, пароль, диалект). Вы можете хранить эти значения свойств в разных файлах среды, таких как local.properties, dev.properties и загружать их во время выполнения.
import org.apache.commons.configuration2.FileBasedConfiguration;
import org.apache.commons.configuration2.PropertiesConfiguration;
import org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder;
import org.apache.commons.configuration2.builder.fluent.Parameters;
import org.apache.commons.configuration2.ex.ConfigurationException;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
static private org.apache.commons.configuration2.Configuration loadTestData;
private static final SessionFactory sessionFactory;
public HibernateUtil(){
loadTestData = loadPropertiesFile("local");
}
static {
try {
Configuration cfg = new Configuration();
cfg.setProperty("hibernate.connection.url", loadTestData.getString("connection.url"));
cfg.setProperty("hibernate.connection.username", loadTestData.getString("connection.username"));
cfg.setProperty("hibernate.connection.password", loadTestData.getString("connection.password"));
cfg.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
cfg.configure();
sessionFactory = cfg.buildSessionFactory();
} catch (Throwable ex) {
System.err.println("SessionFactory creation failed" + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static org.apache.commons.configuration2.Configuration loadPropertiesFile(String filename) {
Parameters params = new Parameters();
FileBasedConfigurationBuilder<FileBasedConfiguration> builder =
new FileBasedConfigurationBuilder<FileBasedConfiguration>(PropertiesConfiguration.class)
.configure(params.properties()
.setFileName(filename + ".properties"));
try {
org.apache.commons.configuration2.Configuration config = builder.getConfiguration();
return config;
} catch (ConfigurationException cex) {
// loading of the configuration file failed
System.out.println(filename + " is not loaded" + cex.getMessage());
return null;
}
}
}
Ниже local.properties
файла, который находится в папке ресурсов
#hibernate properties
connection.url=jdbc:mysql://localhost:3306/rivigo
connection.username=root
connection.password=root
Надеется, что это помогает!
Работал как очарование! Спасибо! – Malf
Теперь, возможно ли изменить свойство «hibernate.hbm2ddl.auto» только для одного определенного класса? – Malf
Кроме того, можно ли делиться свойствами между профилями? – Malf