Spring boot Spring引导:如何访问rest控制器中的服务对象
我正在尝试创建一个spring引导应用程序,它将执行两项任务:Spring boot Spring引导:如何访问rest控制器中的服务对象,spring-boot,autowired,spring-restcontroller,spring-bean,Spring Boot,Autowired,Spring Restcontroller,Spring Bean,我正在尝试创建一个spring引导应用程序,它将执行两项任务: 运行一个线程,该线程将定期查询mongo数据库中的活动用户数(使用每个用户文档中的last ping timestamp字段来确定状态) 提供一个rest api,该api提供由上述参数确定的最新活动用户计数 第1部分的维修代码如下,计数每5秒更新一次: @Service public class Service implements CommandLineRunner { @Autowired private UserR
@Service
public class Service implements CommandLineRunner {
@Autowired
private UserRepository repository;
@Getter private int tMinus = 20;
@Getter private int refreshFreq = 5;
public long activeUserCount;
public static void main(String[] args) {
SpringApplication.run(Service.class, args);
}
@Override
public void run(String... args) throws Exception {
while(true) {
try {
//Get last ping cutoff to determine active users
Double minLastPingTime = (System.currentTimeMillis()) - (Double.valueOf(getTMinus()*1000));
//Update the activeUserCount property with the latest number of active users
activeUserCount = (repository.countByLastPingTimeGreaterThan(minLastPingTime));
System.out.println("Active User count: "+ activeUserCount);
// Wait for the configured number of seconds
Thread.sleep(getRefreshFreq()*1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Bean
public long getActiveUserCount(){
return activeUserCount;
}
}
以及第2部分的rest控制器:
@RestController
class ActiveUserCountController {
@Autowired
private long getActiveUserCount;
@GetMapping("/getActiveUserCount")
public long activeUserCount() {
return getActiveUserCount;
}
}
第1部分工作正常-数据库查询正确执行,并将正确数量的活动用户打印到日志中,例如:
活动用户计数:100
第2部分不起作用-如果我尝试访问http://localhost:8080/getActiveUserCount 返回的计数为0。对于要启动的应用程序,必须将服务中的getActiveUserCount()方法配置为Bean,但当它自动连接到rest控制器时,它将初始化为具有默认值的字段,而不是调用定义的方法
这是正确的方法,还是有更好的方法从控制器内部访问服务对象