-
Notifications
You must be signed in to change notification settings - Fork 74
Processor机制
随着业务的发展,对文件读写过程中不再是简单的读写,伴随一系列的额外的业务逻辑如:文件是否加密了, 是否计算读写的字节数,是否计算MD5值,oss的存储写完本地后是否触发上传到oss等这些额外逻辑使得代码不在干净,组件升级维护风险增加。
spring的BeanFactoryPostProcessor和BeanPostProcessor机制,使得用户在容器启动和对象实例化过程中介入,来定制个性化的业务需求;对于spring来说也可以将容器启动和对象实例化的中额外功能剥离开来,如PropertyPlaceholderConfigurer在容器启动过程对bean的定义中占位符进行替换,DefaultAdvisorAutoProxyCreator在对象实例化过程中创建aop的代理对象等。
同样rdf-file组件在文件读写过程中采用了这种processor的回调机制(组件的processor机制本身也是通过插件机制实现),将如文件是否加密, 是否计算读写的字节数,是否计算MD5值,oss的存储写完本地是否触发上传到oss等功能与主流程剥离开,用户也可以利用这种机制扩展业务功能。如图组件在读写过程中开放的回调埋点
如图:读写过程回调埋点
proccesor实现配置默认存放于: META-INF/rdf-file/services/com.alipay.rdf.file.spi.RdfFileProcessorSpi 文件中
rdf-file-core文件内容
lengthReadValidator=com.alipay.rdf.file.validate.LengthReadValidator
lengthWriteValidator=com.alipay.rdf.file.validate.LengthWriteValidator
summary=com.alipay.rdf.file.summary.SummaryProcessor
fixLengthLineValidator=com.alipay.rdf.file.validate.FixLengthLineValidator
bodyRowValidtor=com.alipay.rdf.file.validate.BodyRowValidator
rdf-file-oss文件内容
md5OSSReadValidator=com.alipay.rdf.file.processor.MD5OSSReadValidator
md5OSSWriteValidator=com.alipay.rdf.file.processor.MD5OSSWriteValidator
uploadOSSAfterWriteClose=com.alipay.rdf.file.processor.UploadOSSAfterWriteClose
beforeCreateOssWriter=com.alipay.rdf.file.processor.BeforeCreateOssWriter
processcor默认组件不会回调, 需要回需要将processor的key加入到 FileConfig.processorKeys参数中,
但是每次这样处理也比较烦,所以可以将自动需要处理的配置加入到配置文件中
配置文件地址默认是 META-INF/rdf-file/auto-processor文件夹中
如果是所有协议都用,放到default文件中
rdf-file-core
bodyRowValidtor
rdf-file-oss
uploadOSSAfterWriteClose
beforeCreateOssWriter
如果某种协议格式用的处理器,放入单独文件 文件取为协议名如 : fund
fixLengthLineValidator