如何在 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 获取这些数据如何更正确?