spring-boot - 如何使用 Spring Boot AutoWired 和 ScheduledExecutorService?
问题描述
我需要在多个类中使用带有 ScheduledExecutorService 的 autowired,我尝试过的内容显示在此代码中。下面示例中用户列表的日志记录大小始终显示为 0,即使在用户添加到 arraylist 之后也是如此。如何在 Spring Boot 中正确使用 Autowired 和 ScheduledExecutorService?
@Component
public class AnotherClass {
List<User> users = new ArrayList();
public void addUser(User user){
users.add(user);
}
public void logUsers(){
logger.info("User size " + users.size()); <================= Always logs 0, when called from executor
}
}
@RestController
public class SecondClass {
@Autowired
private AnotherClass anotherClass;
@GetMapping(value="/user/test")
public void logUsers(){
anotherClass.addUser(new User());
}
}
应用类
@Component
@SpringBootApplication
public class SpringBootDemoApplication {
private ScheduledExecutorService exec = Executors.newScheduledThreadPool(1);
@Autowired
private AnotherClass anotherClass;
@PostConstruct
public void init() {
logger();
}
public static void main(String[] args) {
SpringApplication.run(SpringBootDemoApplication.class, args);
}
public void logger(){
exec.scheduleAtFixedRate(new Runnable(){
@Override
public void run(){
try {
anotherClass.logUsers();
}catch (Exception e){
}
}
}, 2000, 1000, TimeUnit.MILLISECONDS);
}
}
解决方案
如果您使用Spring @Autowired
而不是@AutoWired
Annotation,则该代码有效。
推荐阅读
- javascript - 在 Reactjs 中带有外部日期选择器的 Highstock highchart
- java - 通知 java 客户端有关 grpc 中的服务器异常/错误
- ios - 如何使用 Objective-C 在 iOS 上读取 WiFi RSSI(信号强度)
- python-3.x - 快速导入崩溃:原始日期无效
- python-3.x - python中的Kfold交叉验证
- css - 如果我想随机化颜色,但是我用 onload 方法制作了一组随机发生的颜色,该怎么办?
- python-3.x - 循环的替代方案?矢量化,cython?
- python - Pyglet 应用程序的帧速率似乎在每次重新启动时都会加快
- wso2 - wso2 ei 7.0.1 micro:无法添加oracle jdbc驱动
- python - 如何使用 Python 中的套接字库将我的服务器连接到其他机器?