1 回答

TA貢獻1828條經驗 獲得超3個贊
事實證明這非常簡單:只需更改返回 Spring 表達式 (SpEL)的ArangoConfiguration database()方法:@Override
@Override
public String database() {
return "#{tenantProvider.getDatabaseName()}";
}
在這個例子中引用了一個TenantProvider @Component可以像這樣實現的:
@Component
public class TenantProvider {
private final ThreadLocal<String> databaseName;
public TenantProvider() {
super();
databaseName = new ThreadLocal<>();
}
public String getDatabaseName() {
return databaseName.get();
}
public void setDatabaseName(final String databaseName) {
this.databaseName.set(databaseName);
}
}
然后,該組件可以@Autowired位于代碼中的任何位置以設置數據庫名稱,例如在 servlet 過濾器中,或者在我的例子中,在 Apache Camel 路由處理器和數據庫服務方法中。
Ps 我通過閱讀ArangoTemplate代碼和Spring Expression 支持文檔部分 (通過)以及一個合并的拉取請求意識到了這種可能性。
添加回答
舉報