在运行时期间更改JPA Spring Configuration的数据源属性

时间:2017-11-06 18:01:44

标签: java spring hibernate spring-mvc jpa

我正在开发一个需要连接到多个数据库的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或创建一个允许我在运行时修改这些属性的新方法吗?

例如,在应用程序运行时,有没有办法让我手动断开与当前数据库的连接,修改数据源属性,然后重新连接到新数据库?

1 个答案:

答案 0 :(得分:0)

您无法在运行时更改此属性,但如果需要使用多个数据库,则可以创建多个持久性单元。在这里你可以找到例子:

http://www.baeldung.com/spring-data-jpa-multiple-databases