osgl-storage 是 osgl 工具箱 中用于简化存储的. 其特点是接口简单, 支持多种存储引擎插件, 包括本地文件系统, AWS S3, Azure Blob, 七牛 Kodo 服务.
最近老码农在一次调试中偶然发现了 osgl-storage S3Service 中一个隐藏很久的第几错误, 在此记录下来.
osgl-storage 的结构很简单, 大致是有 StorageService 来操作 SObject:
S3Service 定义了一个字段 defStorageClass
, 用于设定默认的 S3 存储等级:
public class S3Service extends StorageServiceBase<S3Obj> implements IStorageService {
public enum StorageClass {
STANDARD, REDUCED_REDUNDANCY, GLACIER;
}
private StorageClass defStorageClass = StorageClass.REDUCED_REDUNDANCY;
...
}
S3Service 也重载了 StorageServiceBase
的 configure(Map)
方法, 并在其中处理用户配置的 def storage class
:
@Override
protected void configure(Map<String, String> conf) {
super.configure(conf, "s3");
...
String sc = conf.get(CONF_DEF_STORAGE_CLASS);
if (null != sc) {
defStorageClass = StorageClass.valueOf(sc, defStorageClass);
}
...
}
S3Service 的构造函数:
代码语言:javascript复制public S3Service(Map<String, String> conf) {
super(conf, S3Obj.class);
}
StorageServiceBase 的构造函数:
代码语言:javascript复制public StorageServiceBase(Map<String, String> conf, Class<SOBJ_TYPE> sobjType) {
this.sobjType = $.requireNotNull(sobjType);
configure(conf);
}
到这里请各位看官研究一下这个低级错误在哪里. 我们在评论中揭晓答案 ^_^