我有以下数据配置:
@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
文件(它是在首次访问时自动创建的)。
答案 0 :(得分:1)
您无法在运行时以编程方式翻转连接,而是可以在将Spring Boot自动配置加载到JVM中时创建2个数据源,并将默认数据源标记为 @Primary ,并且可以翻转和使用其他数据源作为次要用途,无论您何时需要使用它们。
在此处查看创建2个数据源的解决方案:Spring Boot Configure and Use Two DataSources