簡體   English   中英

在運行時更改 JPA Spring 配置的數據源屬性

[英]Change datasource properties for JPA Spring Configuration during runtime

我正在開發一個需要連接到多個數據庫的 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 或創建一個允許我在運行時修改這些屬性的新方法?

例如,在應用程序運行時,我是否可以手動斷開與當前數據庫的連接,修改數據源屬性,然后重新連接到新數據庫?

您無法在運行時中更改此屬性,但是如果需要使用多個數據庫,則可以創建多個持久性單元。 在這里您可以找到示例:

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

您正在尋找的功能稱為多租戶。

例如,請參閱指南。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM