前言
在 spring boot 下把 FTP 工具类以类的型式注入到 spring 容器中。
FTP 工具类在实际应用过程中,如果是单例的对象会出现问题:
当线程 A 调用FTP工具时调用连接,线程B 同时调用FTP并使用完闭关闭流,这时A的连接会就被关闭了。
解决方案
将 Bean 置为多例对象。这样当线程每次调用该 Bean 就会生成一个新对象,互相之间不影响。
1 2
| public class FtpUtil { }
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| @Configuration public class FtpUtilConfig {
@Autowired private FtpProperties ftpProperties; @Bean @Scope("prototype") public FtpUtil ftpUtil () { FtpUtil ftpUtil = new FtpUtil(); return ftpUtil; }
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| @Configuration @ComponentScan("com.fund.common") public class FtpScope { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(FtpScope.class); FtpUtil f1 = context.getBean(FtpUtil.class); FtpUtil f2 = context.getBean(FtpUtil.class);
System.out.println(p1); System.out.println(p2); } }
|
结果
com.fund.common.util.FtpUtil@7dac3fd8
com.fund.common.util.FtpUtil@425357dd