【发布时间】:2017-11-06 18:01:44
【问题描述】:
我正在做一个需要连接多个数据库的 Spring 项目。
我使用的示例都是使用属性连接到一个数据库,在应用程序开始时设置。
我当前的 JPA 配置如下所示:
@Configuration
@EnableTransactionManagement
public class PersistenceJPAConfig{
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource());
em.setPackagesToScan(new String[] { "com.google.persistence.model" });
JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
em.setJpaProperties(additionalProperties());
return em;
}
@Bean
public DataSource dataSource(){
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/spring_jpa");
dataSource.setUsername( "user" );
dataSource.setPassword( "password" );
return dataSource;
}
@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory emf){
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(emf);
return transactionManager;
}
@Bean
public PersistenceExceptionTranslationPostProcessor exceptionTranslation(){
return new PersistenceExceptionTranslationPostProcessor();
}
Properties additionalProperties() {
Properties properties = new Properties();
properties.setProperty("hibernate.hbm2ddl.auto", "create-drop");
properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
return properties;
}
}
在这种情况下,数据源属性(驱动程序、url、用户名、密码)已经设置。但是是否有可能修改这个当前的 bean 或创建一个允许我在运行时修改这些属性的新方法?
例如,当应用程序运行时,我是否可以手动断开与当前数据库的连接,修改数据源属性,然后重新连接到新数据库?
【问题讨论】:
-
JPA 提供程序不允许您更改 EntityManagerFactory 以在其生命周期内持久保存到不同的数据存储;这是在施工时设置的。
-
@DN1 感谢您提供的信息。但是如果我的应用程序运行时数据库的 url 或用户名发生了变化怎么办?如果无法更改数据源的任何属性,是否意味着我必须先停止应用程序才能进行任何更改?
-
你必须关闭电动势,并创建一个新的
标签: java spring hibernate spring-mvc jpa