【发布时间】:2019-11-15 06:56:05
【问题描述】:
我正在使用一种支付系统的 java SDK 库。
在该库中,您必须设置他们之前在静态字段中提供给您的 API 密钥:
public static volatile String apiKey;
此库发出的每个 HTTP 请求都在标头中包含此 apiKey。
我的任务 - 聚合该支付系统的用户。每个用户都有自己的 API Key。
当用户数为2时,我刚刚做了坏事:
public synchronized void pay() {
Library.apiKey = securityService.currentUser().key();
Library.pay(...)
...
}
它有效,但每个人都明白这是一种不好的坏习惯。现在我必须支持 100 多个用户。我的决定将慢 100 倍,更不用说其他问题了。
我想继续使用这个库。但是以多线程方式。当然,如果我自己提出要求,我会这样做:
public void pay() {
HttpHeader headers;
headers.put("api_key", securityService.user().key());
httpClient.post(headers...)
}
我知道这个库不适合我的任务。但我需要那个库,它在自己内部做了很多工作。
如果没有可能,我必须分叉并更改以适应我的需求。
我附上图书馆源代码的链接。 https://github.com/stripe/stripe-java/tree/master/src/main/java/com/stripe
【问题讨论】:
-
您是否阅读了您提供的 github 存储库的文档(README)?它清楚地提到了处理多个关键场景的替代方法。 github.com/stripe/stripe-java#per-request-configuration
-
@Udith Gunaratna 谢谢,我错过了,我在网站上阅读了文档,但在 Github 存储库中没有。