代码之家  ›  专栏  ›  技术社区  ›  user293655

初始化StandardFileSystemManager的最佳实践是什么

  •  0
  • user293655  · 技术社区  · 6 年前

    目前,我有我的代码如下

    @Service
    public class MyFileService {
        private StandardFileSystemManager manager = new StandardFileSystemManager();
    
        public List<FileObject> listRemoteFiles() {
            try {
                manager.init();
    
                manager.resolveFile(someURL);
    
    
            } finally {
                manager.close();
            }
            return Arrays.stream(remoteFiles)
                         .collect(Collectors.toList());
        }
    }
    

    FileSystemException:为URL方案注册了多个提供程序 “文件”。

    我猜每次调用listRemoteFiles()都会初始化管理器。但我的意图是开始一次,最后结束。 这可能吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Yogesh Badke    6 年前

    您可以使用单例设计模式来确保 StandardFileSystemManager 被创建。

    我看到你在用 @Service 注释。我猜它是春天来的。你为什么不登记 标准FileSystemManager 作为春豆,然后自动连线 MyFileService

    @Service
    public class MyFileService {
    
        private final StandardFileSystemManager manager;
    
        @Autowired
        public MyFileService(StandardFileSystemManager manager) {
            this.manager = manager;
        }
    
        public List<FileObject> listRemoteFiles() {
            try {
                manager.resolveFile(someURL);
            } finally {
                manager.close();
            }
    
            return Arrays.stream(remoteFiles)
                         .collect(Collectors.toList());
        }
    }
    

    作为标记为的任何类中的bean @Configuration 如下所示

    @Bean
    public StandardFileSystemManager manager() {
        StandardFileSystemManager manager = new StandardFileSystemManager();
        manager.init(); 
        return manager;
    }