Spring中默认生成的bean是全局的而且将只有一个实例,测试代码如下:
@Configuration public class GlobalConfig { @Bean public ThreadPoolTaskExecutor defaultThreadPool(){ ThreadPoolTaskExecutor executor=new ThreadPoolTaskExecutor(); executor.setCorePoolSize(16); executor.setMaxPoolSize(64); executor.setQueueCapacity(16); executor.setThreadNamePrefix("test"); executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); executor.setKeepAliveSeconds(60); executor.initialize(); return executor; } }
@RunWith(SpringRunner.class) @SpringBootTest public class CachedemoApplicationTests { // 引入对应的对象内容 @Resource(name = "defaultThreadPool") private ThreadPoolTaskExecutor executor; @Resource(name = "defaultThreadPool") private ThreadPoolTaskExecutor executor1; @Before public void test1() { System.out.println(executor1.toString()); } @Test public void test() { System.out.println(executor.toString()); } }
返回结果:
org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor@11e355ca
org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor@11e355ca
如果要时的Spring开启多例模式,要增加
@Configuration
public class GlobalConfig {
@Bean
@Scope("prototype")
public ThreadPoolTaskExecutor defaultThreadPool(){
ThreadPoolTaskExecutor executor=new ThreadPoolTaskExecutor();
executor.setCorePoolSize(16);
executor.setMaxPoolSize(64);
executor.setQueueCapacity(16);
executor.setThreadNamePrefix("test");
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
executor.setKeepAliveSeconds(60);
executor.initialize();
return executor;
}
}
返回结果:
org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor@43984213
org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor@2ff7a7