Spring boot Spring引导:如何访问rest控制器中的服务对象

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

我正在尝试创建一个spring引导应用程序,它将执行两项任务:

  • 运行一个线程,该线程将定期查询mongo数据库中的活动用户数(使用每个用户文档中的last ping timestamp字段来确定状态)
  • 提供一个rest api,该api提供由上述参数确定的最新活动用户计数
  • 第1部分的维修代码如下,计数每5秒更新一次:

    @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控制器时,它将初始化为具有默认值的字段,而不是调用定义的方法

    这是正确的方法,还是有更好的方法从控制器内部访问服务对象