我正在尝试使用hibernate多租户(从第16章开始)。
现在,我的 ExtendedStorageManager 使用此方法启动多租户会话:
public Session getClabSession(int serverId, String customerSchema) {
if (!clabFactories.containsKey(serverId)) {
DbServers d = databaseConfigurations.get(serverId);
clabCustomerConfig.setProperty(
"hibernate.connection.url",
ResourceBundleService.getInstance().decorateBundle(
"database.connection.pattern", d.getHost(),
d.getPort()));
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
.applySettings(clabCustomerConfig.getProperties())
.buildServiceRegistry();
SessionFactory factory = clabCustomerConfig
.buildSessionFactory(serviceRegistry);
clabFactories.put(d.getId(), factory);
serviceRegistry = null;
factory = null;
}
Session session = clabFactories.get(serverId).withOptions()
.tenantIdentifier(customerSchema).openSession();
session.setDefaultReadOnly(false);
return session;
}
很显然,我在测试时,因为我完全错过了执行了第一个错误 MultiTenantConnectionProvider
作为解释在这里。
使用grepcode,我发现了AbstractMultiTenantConnectionProvider,它看起来像我想要使用的。所以我创建了扩展它的类:
public class XMLDMultiTenantConnectionProvider extends
AbstractMultiTenantConnectionProvider {
/**
*
*/
private static final long serialVersionUID = -6679645015449636823L;
@Override
protected ConnectionProvider getAnyConnectionProvider() {
return null;
}
@Override
protected ConnectionProvider selectConnectionProvider(
String tenantIdentifier) {
// TODO Auto-generated method stub
return null;
}
}
但是我现在对于在这两种情况下使用什么来获得ConnectionProvider还是一无所知。你能帮助我吗?
PS:我找到了ConnectionProviderBuilder。您认为我可以以它为例吗?
我认为您可以使用以下类似的东西自己实现抽象类:
public class XMLDMultiTenantConnectionProvider extends AbstractMultiTenantConnectionProvider {
private final ConnectionProvider xml1 = ConnectionProviderBuilder.buildConnectionProvider("xml1DataSource");
private final ConnectionProvider xml2 = ConnectionProviderBuilder.buildConnectionProvider("xml2DataSource");
/**
*
*/
private static final long serialVersionUID = -6679645015449636823L;
@Override
protected ConnectionProvider getAnyConnectionProvider() {
//Default Datasource (in this case i chose the first one as default)
return xml1;
}
@Override
protected ConnectionProvider selectConnectionProvider(String tenantIdentifier) {
if( "xml1".equals(tenantIdentifier) )
return xml1;
if( "xml2".equals(tenantIdentifier) )
return xml2;
return null;
}
}
我认为这可能是一个很好且可以理解的例子…
我有一个问题: 多个结构实现一个trait 都可以以相同的方式实现trait 我考虑过写这个(简短版本) 游戏场 这无法编译: 这里怎么了?或者有没有其他方法可以通用地实现此,而不必为和分别键入一次? 谢谢你们
14.1.3.实现一个Parcel 进程间传递的Message也是个Java对象,在传递与接收之间我们需要额外进行编码/解码——也就是序列化/反序列化。在Android中,可以序列化/反序列化的对象就被称作Parcel,作为Parcelable接口的实例。 作为Parcel,对象必须知道如何处理自身的编码/解码。 例 14.4. Message.java package com.marakana.
网页 https://www.stgeorges.edu.ar/quilmes/our-values/ 这种布局效果是怎么实现的? 我原先的代码是这样写的 效果不是很符合 然后我试了一下给每个li加了flex 图标为什么会有点往上偏移了?
https://www.stgeorges.edu.ar/quilmes/history 这种排版是怎么实现的? 如下三张图, 为什么文字和div覆盖区域会重叠?
本文向大家介绍实现一个isNaN的方法相关面试题,主要包含被问及实现一个isNaN的方法时的应答技巧和注意事项,需要的朋友参考一下
问题 你想记录程序执行多个任务所花费的时间 解决方案 time 模块包含很多函数来执行跟时间有关的函数。 尽管如此,通常我们会在此基础之上构造一个更高级的接口来模拟一个计时器。例如: import time class Timer: def __init__(self, func=time.perf_counter): self.elapsed = 0.0