最近尝试了一个想法,springboot和java的线程池一起开发,但是大小的控制上想放在配置文件里面,线程池是写在方法外面static的,倒是知道springboot有个自定义线程池,但没有用到那个,用的是java自身的线程池。试了一下把大小的配置项写在配置文件里面,程序用Value注解去取,但操作发现不行,运行空异常。大家有什么可行的点子吗?此外,属实是没有使用自定义线程池的打算,那个封装度太高了,没有办法把控的较为细微,和最终目的有点冲突。
找到解决方法了,在需要的类中写一个单参的方法,用Value注解可以把配置值当做方法参数使用。
如Test类中存在threadPool这个static属性,可以写一个如下的方法,Test类需要提交给Spring容器
@Value("${pool.task.num}")
public void setTask_num(Integer num){
Test.threadPool=Executors.newFixedThreadPool(num);
}
回答不易,求求您点赞关注哦
听起来您正在尝试使用@ValueSpring 中的注释从配置文件中注入 Java 线程池的大小,但它没有按预期工作。以下是发生这种情况的几个可能原因:
确保您已正确配置配置文件的位置,并且它正在被 Spring 读取。您可以检查日志以查看是否正在加载配置文件以及可能发生的任何错误。
检查配置文件中配置属性的语法。确保其格式正确且拼写正确。
确保您已正确注释代码中的字段,@Value并且您使用正确的语法来引用配置属性。例如:@Value("${thread.pool.size}")
确保 Spring 可以正确访问您尝试将值注入的字段。如果该字段是static,您将需要使用带有属性的@Value("${thread.pool.size}")符号,如下所示:staticField@Value("${thread.pool.size}") static int poolSize;
@Value如果您在注释中使用属性占位符(例如${thread.pool.size}),请确保您已PropertySourcesPlaceholderConfigurer在 Spring 配置中正确配置了一个 bean。这是正确解析占位符所必需的。