【发布时间】:2018-07-22 12:49:30
【问题描述】:
我有一个应用程序需要连接到几个不同的架构,但所有的架构都是相同类型的 (ORACLE)。哪个模式来自 UI 的决定。
如果用户选择schema1,那么实体应该在Schema1中持久化,如果选择other,那么它应该在选择的其他schema中。
我正在使用 Spring boot + Hibernate 和依赖“spring-boot-starter-data-jpa”
我已经创建了一个如下所示的数据源类,这样我就可以在每次调用数据层之前更改数据源对象中的“schemaName”。
@Component
public class SchemaDatasource 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 为空,我的 SchemaDatasource 返回空连接,应用程序引导失败。
有没有办法解决这个问题。我期待类似于 SessionFactory 在休眠中没有选项。
在 RoutingDatasource 的情况下,我也必须设置 defaultDatasource。
Spring boot version: 1.5.9.RELEASE
【问题讨论】:
标签: hibernate spring-boot spring-orm