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

时间:2017-04-26 14:10:48

标签: java spring sqlite spring-data-jpa

我有以下数据配置:

@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给另一个值吗?或者我需要先关闭一些东西?

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

1 个答案:

答案 0 :(得分:1)

您无法在运行时以编程方式翻转连接,而是可以在将Spring Boot自动配置加载到JVM中时创建2个数据源,并将默认数据源标记为 @Primary ,并且可以翻转和使用其他数据源作为次要用途,无论您何时需要使用它们。

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