如何在 Spring Data JPA 中更改数据库连接?

Posted

技术标签:

【中文标题】如何在 Spring Data JPA 中更改数据库连接?【英文标题】:How to change database connection in Spring Data JPA? 【发布时间】:2017-04-26 14:10:48 【问题描述】:

我有以下数据配置:

@Configuration
@EnableJpaRepositories(DataConfig.repositoryPackage)
@EnableTransactionManagement
public class DataConfig 

   public static final String repositoryPackage = ...
   public static final String entitiesPackage = ...

   @Bean
   public File sqliteDatabaseFile() 
      File ans = new File("database/canada.sqlite");
      if( !ans.getParentFile().exists() ) 
         ans.getParentFile().mkdirs();
      
      return ans;
   

   @Bean
   public DataSource dataSource() 
      BasicDataSource ans = new BasicDataSource();
      ans.setDriverClassName("org.sqlite.JDBC");
      ans.setUrl("jdbc:sqlite:" + sqliteDatabaseFile().getAbsolutePath());
      //ans.setMaxTotal(4);
      //ans.setMaxTotal(1);
      return ans;
   

   @Bean
   public LocalContainerEntityManagerFactoryBean entityManagerFactory() 
      LocalContainerEntityManagerFactoryBean ans =
         new LocalContainerEntityManagerFactoryBean();
      ans.setDataSource(dataSource());
      ans.setJpaVendorAdapter(jpaVendorAdapter());
      ans.setPackagesToScan(entitiesPackage);

      Properties props = new Properties();
      //props.put("hibernate.dialect", "com.enigmabridge.hibernate.dialect.SQLiteDialect");
      //props.put("hibernate.dialect", "org.hibernate.dialect.SQLiteDialect");
      props.put("hibernate.dialect", "com.beyondmap.preparator2.hibernate.SQLiteDialect");
      ans.setJpaProperties(props);



      return ans;
   

   @Bean
   public JpaVendorAdapter jpaVendorAdapter() 
      HibernateJpaVendorAdapter ans = new HibernateJpaVendorAdapter();
      ans.setShowSql(true);
      ans.setGenerateDdl(false);
      ans.setDatabase(Database.DEFAULT);


      return ans;
   

   @Bean
   public PlatformTransactionManager transactionManager() 
      JpaTransactionManager ans = new JpaTransactionManager();
      ans.setEntityManagerFactory(entityManagerFactory().getObject());

      return ans;
   

假设我想切换到另一个数据库。我可以将Datasource#setUrl 设置为另一个值吗?还是我需要先关闭一些东西?

我可以将 URL 设置为 null 并临时断开与任何数据库的连接吗?例如,假设我希望从头开始创建SQLite 文件(它在首次访问时自动创建)。

【问题讨论】:

切换,能详细点吗? 从一个数据库断开,断开连接,然后以编程方式连接到另一个数据库。 ***.com/questions/14330668/… 【参考方案1】:

您不能在运行时以编程方式翻转连接,而是可以在将 Spring Boot Auto Configurations 加载到 JVM 并将默认 DataSource 标记为 @Primary 时创建 2 个数据源,其他可以翻转和使用在您需要分别使用它们的地方作为次要使用。

在此处查看创建 2 个数据源的解决方案:Spring Boot Configure and Use Two DataSources

【讨论】:

那么,我不能编写自己的数据库管理器,比如 DbVisualizer,它允许用户输入任意数据库 URL? @Dims 相信您可以在春季使用 JDBC 模板做到这一点。我已经完成并创建了自己的数据层,并在 springboot 中使用 jdbc 模板编写了一个小型 ORM。

以上是关于如何在 Spring Data JPA 中更改数据库连接?的主要内容,如果未能解决你的问题,请参考以下文章

在集成测试中每个方法不回滚后 Spring Data JPA 数据库更改

Spring Data JPA 的作用.

使用 spring-data-jpa 获取这些数据如何更正确?

如何使用Spring Data JPA在H2数据库中保存数据

Spring Data JPA框架

Spring Data JPA:查询ManyToMany,如何从映射类中获取数据?