大佬教程收集整理的这篇文章主要介绍了Spring Boot JPA中的动态数据源,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我对Datasource的实现
public class DatasourceManager implements Datasource {
private Map<String, Datasource> datasources = new HashMap<>();
private Datasource datasource;
public DatasourceManager() {
}
public DatasourceManager(Datasource datasourcE) {
this.datasource = datasource;
}
public voID add(String name, Datasource datasourcE) {
datasources.put(name, datasourcE);
}
public voID switchDatasource(String Name) {
datasource = datasources.get(Name);
}
@OverrIDe
public PrintWriter getLogWriter() throws sqlException {
return datasource.getLogWriter();
}
@OverrIDe
public voID setLogWriter(PrintWriter out) throws sqlException {
datasource.setLogWriter(out);
}
@OverrIDe
public voID setLoginTimeout(int seconds) throws sqlException {
datasource.setLoginTimeout(seconds);
}
@OverrIDe
public int getLoginTimeout() throws sqlException {
return datasource.getLoginTimeout();
}
@OverrIDe
public Logger getParentLogger() throws sqlFeatureNotSupportedException {
return datasource.getParentLogger();
}
@OverrIDe
public <T> T unwrap(Class<T> ifacE) throws sqlException {
return datasource.unwrap(ifacE);
}
@OverrIDe
public Boolean isWrapperFor(Class<?> ifacE) throws sqlException {
return datasource.isWrapperFor(ifacE);
}
@OverrIDe
public Connection getConnection() throws sqlException {
return datasource.getConnection();
}
@OverrIDe
public Connection getConnection(String username, String password) throws sqlException {
return datasource.getConnection(username, password);
}
}
这是我的配置
@Configuration
public class DatasourceConfig {
@autowired
private Environment env;
public Datasource makeDatasource(String Name) {
return DatasourceBuilder.create()
.driverClassname(env.getProperty("spring.datasource." + name + ".driver-class-name"))
.url(env.getProperty("spring.datasource." + name + ".url")).build();
}
@Bean
public Datasource datasource() {
DatasourceManager datasourceManager = new DatasourceManager();
datasourceManager.add("test1", makeDatasource("test1"));
datasourceManager.add("test2", makeDatasource("test2"));
datasourceManager.switchDatasource("test1");
return datasourceManager;
}
}
这是application.yml
spring:
jpa:
hibernate:
ddl-auto: create
propertIEs:
hibernate:
dialect: org.hibernate.dialect.H2Dialect
datasource:
test1:
name: test2
url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=falSE
driver-class-name: org.h2.Driver
username: h2
password: h2
test2:
name: test1
url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=falSE
driver-class-name: org.h2.Driver
username: h2
password: h2
@H_616_0@解决方法
我有一个应用程序,它需要连接到几个不同的架构,但都需要连接到同一类型(OracLE)。决定哪个模式来自UI。
如果用户选择了scheR_902_11845@a1,则实体应保留在scheR_902_11845@a1中;如果选择其他,则实体应位于所选的其他模式中。
我正在使用带有依赖项“ spring-boot-starter-data-jpa”的Spring Boot + Hibernate
我已经创建了如下所示的数据源类,以便可以在调用数据层之前每次更改数据源对象中的“ schemaname”。
@Component
public class scheR_902_11845@aDatasource extends AbstractDatasource {
private String schemaname;
@Autowired
private Dsmanager dsm;
public void setschemaname(String schemaname) {
this.schemaname = schemaname;
}
@Override
public Connection getConnection() throws SQLException {
if (schemaname!= null)
return dsm.getConnection(schemaname);
else
return null;
}
@Override
public Connection getConnection(String username,String password) throws SQLException {
if (schemaname!= null)
return dsm.getConnection(schemaname);
else
return null;
}
}
我的问题是在启动过程中,“
HibernateJpaAutoConfiguration”尝试创建sessionfactory。在创建过程中,它尝试检查与数据源的连接,但是由于schemaname在启动时为null,因此我的scheR_902_11845@aDatasource返回的null连接导致应用程序引导失败。
有没有办法解决这个问题。我期望与SessionFactory类似,在hibernate状态下没有选项。
同样在RoutIngDatasource的情况下,我必须设置defaultDatasource。
Spring boot version: 1.5.9.RELEASE
以上是大佬教程为你收集整理的Spring Boot JPA中的动态数据源全部内容,希望文章能够帮你解决Spring Boot JPA中的动态数据源所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。