내 응용 프로그램에는 각 클라이언트에 대해 여러 데이터베이스가 있습니다. 응용 프로그램에 로그인 한 클라이언트별로 데이터베이스에 액세스하려고합니다.최대 절전 모드에서 SessionFactory를 동적으로 생성
두 가지 옵션이 있습니다.
1) hibernate-config.xml 파일에서 여러 SessionFactory 항목 사용.
2) 최대 절전 모드 파일을 복제합니다.
하지만 런타임에 LocalSessionFactoryBean, SessionFactory, TransactionManager를 만들고 싶습니다. 그러면 어떻게해야합니까? hibernate-config.xml 파일에서 SessionFactory와 DataSource의 다중 엔트리를하고 싶지 않습니다.
나는 아래 발췌 문장을 시도했다.
@Configuration
@EnableTransactionManagement
public class PersistenceHibernateConfig
{
private String driverClassName;
private String url;
String hibernateDialect;
boolean hibernateShowSql;
@Bean
public LocalSessionFactoryBean alertsSessionFactoryBean()
{
final LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(this.restDataSource());
sessionFactory.setPackagesToScan(new String[] { "com.ezdi.cac.bean.table" });
sessionFactory.setHibernateProperties(this.hibernateProperties());
return sessionFactory;
}
@Bean
public DataSource restDataSource()
{
final DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(this.driverClassName);
dataSource.setUrl(this.url);
dataSource.setUsername("root");
dataSource.setPassword("root");
return dataSource;
}
@Bean
public HibernateTransactionManager transactionManager()
{
final HibernateTransactionManager txManager = new HibernateTransactionManager();
txManager.setSessionFactory(this.alertsSessionFactoryBean().getObject());
return txManager;
}
@Bean
public PersistenceExceptionTranslationPostProcessor exceptionTranslationPostProcessor()
{
return new PersistenceExceptionTranslationPostProcessor();
}
@Bean
public PersistenceExceptionTranslator exceptionTranslator()
{
return new HibernateExceptionTranslator();
}
final Properties hibernateProperties()
{
return new Properties()
{
{
this.put("persistence.dialect", PersistenceHibernateConfig.this.hibernateDialect);
this.put("hibernate.show_sql", PersistenceHibernateConfig.this.hibernateShowSql);
}
};
}
/**
* @return the driverClassName
*/
public String getDriverClassName()
{
return driverClassName;
}
/**
* @param driverClassName the driverClassName to set
*/
public void setDriverClassName(String driverClassName)
{
this.driverClassName = driverClassName;
}
/**
* @return the url
*/
public String getUrl()
{
return url;
}
/**
* @param url the url to set
*/
public void setUrl(String url)
{
this.url = url;
}
/**
* @return the hibernateDialect
*/
public String getHibernateDialect()
{
return hibernateDialect;
}
/**
* @param hibernateDialect the hibernateDialect to set
*/
public void setHibernateDialect(String hibernateDialect)
{
this.hibernateDialect = hibernateDialect;
}
/**
* @return the hibernateShowSql
*/
public boolean isHibernateShowSql()
{
return hibernateShowSql;
}
/**
* @param hibernateShowSql the hibernateShowSql to set
*/
public void setHibernateShowSql(boolean hibernateShowSql)
{
this.hibernateShowSql = hibernateShowSql;
}
}
하지만 LocalSessionFactoryBean의를 통해도 HibernateTransactionManager를 통해 SessionFactory를 얻을 때마다, 나는 내가 널 거지 이유를 모르는 null.I있어?