首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >池大小的值为Spring @的线程池不能正常运行

池大小的值为Spring @的线程池不能正常运行
EN

Stack Overflow用户
提问于 2018-12-13 23:18:44
回答 2查看 185关注 0票数 4

我有一个线程池,池大小的输入是使用spring中的@值传递的,该值的引用位于.properties文件中。如下图所示:

代码语言:javascript
运行
复制
@Value("${project.threadPoolSize}")
private static int threadPoolSize;

private static ScheduledExecutorService threadPool = Executors.newScheduledThreadPool(threadPoolSize);

@PostConstruct
public void MasterProcessService() {
    try {
        LOGGER.debug("Entering processServices in MasterProcessThread ");

当我尝试使用注释值给出线程池大小时,它只将1个线程池化,并执行休眠操作,但随后不会池化其他线程。

当我使用以下命令直接传递线程池大小时:

代码语言:javascript
运行
复制
private static ScheduledExecutorService threadPool = Executors.newScheduledThreadPool(11);

它将所有线程池化,并按照定义执行睡眠和运行状态。

有人能帮助我在线程池大小中使用@值而不是直接定义一个数字吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-13 23:28:04

这都归因于两个事实:

1- @Value在静态字段上不起作用。如果你想用值填充它--不要让它成为静态的。

代码语言:javascript
运行
复制
@Value("${project.threadPoolSize}")
private static int threadPoolSize;

2-在用值填充threadPoolSize之前,首先创建静态threadPool变量(如果它还不是静态变量)。

如果您需要通过@Value为某个静态字段设置值,可以尝试这样做:

代码语言:javascript
运行
复制
private static ScheduledExecutorService threadPool;

@Value("${project.threadPoolSize}")
public void setThreadPool(Integer poolSize) {
    threadPool = Executors.newScheduledThreadPool(poolSize);
}

值注入将在启动时调用,并将调用setThreadPool方法,该方法将使用定义的池大小初始化静态变量。

票数 4
EN

Stack Overflow用户

发布于 2018-12-13 23:52:46

Spring不允许向静态变量注入值。请改用java.lang.Integer

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53764954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档