![](/img/trans.png)
[英]Spring Boot change DataSource and JPA properties at runtime
[英]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 或創建一個允許我在運行時修改這些屬性的新方法?
例如,在應用程序運行時,我是否可以手動斷開與當前數據庫的連接,修改數據源屬性,然后重新連接到新數據庫?
您無法在運行時中更改此屬性,但是如果需要使用多個數據庫,則可以創建多個持久性單元。 在這里您可以找到示例:
您正在尋找的功能稱為多租戶。
例如,請參閱本指南。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.