我正在使用ConcurrentTaskExecutor
同时运行多个任务。默认情况下,在spring中,它的范围为 singleton 。
我的taskExecutor
是原型,threadPoolExecutor
是no.t
请求时,会返回新的taskExecutor
。我的问题是,既然我们从原型中引用了threadPoolExecutor
,那么threadPoolExecutor
会成为新的实例吗?
<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ConcurrentTaskExecutor" scope="prototype">
<property name="concurrentExecutor" ref="threadPoolExecutor"/>
</bean>
<bean id="threadPoolExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="100" />
<property name="maxPoolSize" value="200" />
<property name="queueCapacity" value="1000" />
</bean>
答案 0 :(得分:3)
“prototype”关键字只意味着每次向Spring询问实例时,都会得到一个新的实例。有了你的布线,你只需要一次。所以我希望你的taskExecutor bean将是一个单独的实例。
答案 1 :(得分:2)
不,prototype
关键字没有&#34;深&#34;范围。它不适用于引用或内部bean。
对于标记为原型的bean,即taskExecutor
,Spring会在每次请求时创建一个新实例。但是所有这些新的taskExecutors都将包含threadPoolExecutor
的相同单例实例。