为Spring Content的S3ContentStore添加存储类参数的实现问询
Spring Content S3ContentStore 扩展:添加存储类参数问题
我们已在使用Spring Content的JpaContentStore和FileContentStore,现正添加S3ContentStore支持,但通过setContent上传文件时缺少关键的存储类参数。
已尝试的解决方案
1. 自定义扩展接口
创建自定义MyS3ContentStore接口,扩展S3ContentStore并新增带存储类参数的setContent方法:
@LockParticipant E setContent(E entity, InputStream content, StorageClass storageClass);
2. 编写实现类
编写对应的实现类MyS3ContentStoreImpl,继承DefaultS3StoreImpl并实现自定义接口:
@Transactional public class MyS3ContentStoreImpl<E, CID extends Serializable> extends DefaultS3StoreImpl<E, CID> implements MyS3ContentStore<E, CID> { public MyS3ContentStoreImpl(ApplicationContext context, ResourceLoader loader, MappingContext mappingContext, PlacementService placementService, S3Client client, MultiTenantS3ClientProvider provider) { super(context, loader, mappingContext, placementService, client, provider); } @Override public E setContent(E entity, InputStream content, StorageClass storageClass) { return setContent(entity, content); } }
注:原代码中构造方法名AMyS3ContentStoreImpl应为MyS3ContentStoreImpl,此处已修正
3. 配置与仓库创建
- 使用
@EnableS3Stores并指定basePackages以扫描自定义类 - 为实体
ArchivedFile创建对应的仓库接口:
@Repository public interface MyS3Store extends MyS3ContentStore<ArchivedFile, UUID> {}
遇到的问题
尝试多种配置后仍无法正常运行,时而出现类找不到的问题,时而因创建多个myS3Store#StoreFragments Bean报错。
咨询问题
- 实现该需求的最佳方式是什么?
- 有哪些必须遵循的规范?
- 还有哪些可能遗漏的要点?
- 参考过Azure示例,但它是全新的存储实现,包含大量不同包下的类,不确定是否需要全部类及是否需遵循特定包规则。
内容的提问来源于stack exchange,提问作者RalleN66
相关产品推荐
相关产品推荐

