Spring integration ZipTransformer压缩文件列表
我的目标是创建多个zip文件,每个文件包含一定数量的条目。我正在使用Spring integration ZipTransformer压缩文件列表,spring-integration,Spring Integration,我的目标是创建多个zip文件,每个文件包含一定数量的条目。我正在使用聚合器对文件进行分组,然后再进行转换 是否可以使用ZipTransformer压缩消息 编辑: 在将ZipConverter声明为bean时,我遇到了循环依赖项异常。什么是解决方案 编辑2通过从@Transformer中删除@Bean注释,并向zipTransformer.setBeanFactory(appContext)提供当前应用程序上下文,解决了循环依赖性问题根据ZipTransformer源代码,这正是您必须执行的操作
聚合器
对文件进行分组,然后再进行转换
是否可以使用ZipTransformer
压缩消息
编辑:
在将ZipConverter声明为bean时,我遇到了循环依赖项异常。什么是解决方案
编辑2通过从
@Transformer
中删除@Bean
注释,并向zipTransformer.setBeanFactory(appContext)提供当前应用程序上下文,解决了循环依赖性问题
根据ZipTransformer
源代码,这正是您必须执行的操作-使用列表发送消息
:
受保护对象doZipTransform(消息)引发异常{
...
if(可编辑的有效负载实例){
...
对于(对象项:(Iterable)有效载荷){
final ZipEntrySource ZipEntrySource=createZipEntrySource(项,lastModifiedDate,baseName+“382;”
+计数器+文件扩展名,this.useFileAttributes);
...
}
}
...
私有ZipEntrySource createZipEntrySource(对象项,
日期lastModifiedDate、字符串zipEntryName、布尔值useFileAttributes){
如果(文件的项目实例){
最终文件filePayload=(文件)项;
最终字符串文件名=useFileAttributes?filePayload.getName():zipEntryName;
if(((文件)项).isDirectory()){
抛出新的UnsupportedOperationException(“不支持目录压缩”);
}
返回新文件源(文件名、文件负载);
}
项目中有一个测试类来确认:我看到
zipttransformer.setBeanFactory()
是一个必需的调用。它的参数应该是什么?由Spring依赖项注入容器自动调用。只需将其声明为bean即可。有关Spring容器的更多信息,请参阅参考手册:
protected Object doZipTransform(Message<?> message) throws Exception {
...
if (payload instanceof Iterable<?>) {
...
for (Object item : (Iterable<?>) payload) {
final ZipEntrySource zipEntrySource = createZipEntrySource(item, lastModifiedDate, baseName + "_"
+ counter + fileExtension, this.useFileAttributes);
...
}
}
...
private ZipEntrySource createZipEntrySource(Object item,
Date lastModifiedDate, String zipEntryName, boolean useFileAttributes) {
if (item instanceof File) {
final File filePayload = (File) item;
final String fileName = useFileAttributes ? filePayload.getName() : zipEntryName;
if (((File) item).isDirectory()) {
throw new UnsupportedOperationException("Zipping of directories is not supported.");
}
return new FileSource(fileName, filePayload);
}