'Java Spring Boot: Runnable Thread Class running despite being commented

I have encountered an interesting yet a terrifying situation. My application has two features namely, OtpListener and CdmMonitor running on two separate threads. For now, only the OtpListener feature was required so I commented out CdmMonitor in the main class.

However, I still see the logs for the commented out class CdmMonitorService. This service was running (when it shouldn't as it was commented)

Do threads implemented from the Runnable class operate this way? I did not find anything of the sort in its documentation.

Main Class: OtpTrackerApp.java

package dev.xfoil.otpTracker;

import dev.xfoil.otpTracker.service.CdmMonitorService;
import dev.xfoil.otpTracker.service.OTPListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan({"dev.xfoil.otpTracker.*","dev.xfoil.shared.*", "dev.xfoil.shared.dal.repositories.springdata.*", "dev.xfoil.shared.dal.entities.*","dev.xfoil.shared.dal.cache.*"})
public class OtpTrackerApp implements CommandLineRunner {

    @Autowired
    public OTPListener otpListener;

//    @Autowired
//    public CdmMonitorService cdmMonitorService;

    public static void main(String[] args){
        SpringApplication.run(OtpTrackerApp.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
//        Thread monitoringThread = new Thread(cdmMonitorService);
//        monitoringThread.start();
        otpListener.startListening();
    }
}

CdmMonitorService.java

package dev.xfoil.otpTracker.service;

import com.google.common.flogger.FluentLogger;
import dev.xfoil.otpTracker.firebase.FirestoreManager;
import dev.xfoil.shared.dal.repositories.springdata.MachineMonitorRepo;
import dev.xfoil.shared.dal.repositories.springdata.MachineOperationsHistoryRepo;
import dev.xfoil.shared.dal.repositories.springdata.MachinesRepo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;


@Service
public class CdmMonitorService implements Runnable {
    FluentLogger logger = FluentLogger.forEnclosingClass();

    @Autowired
    MachineMonitorRepo machineMonitorRepo;

    @Autowired
    MachineOperationsHistoryRepo machineOperationsHistoryRepo;

    @Autowired
    MachinesRepo machinesRepo;

    @Autowired
    FirestoreManager firestoreManager;

    public CdmMonitorService() {
    }
    
    @Override
    @Scheduled(fixedDelay = 120000l)
    public void run() {
        try {
            // code removed for brevity
            Thread.sleep(10000);
        } catch (Exception e) {
            e.printStackTrace();
            logger.atWarning().log("Exception in CDM Monitor Thread " + e);
        }
    }


}

OtpListener.java

package dev.xfoil.otpTracker.service;

import com.google.common.flogger.FluentLogger;
import dev.xfoil.shared.dal.entities.AccountLedger;
import dev.xfoil.shared.dal.models.OTP;
import dev.xfoil.shared.dal.repositories.springdata.LedgerRepo;
import dev.xfoil.shared.dal.repositories.springdata.NoteCountRepo;
import dev.xfoil.shared.dal.repositories.springdata.UtilRepo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.List;
@Service
public class OTPListener {
    private static final FluentLogger logger = FluentLogger.forEnclosingClass();
    @Autowired
    UtilRepo utilRepo;

    @Autowired
    ThirdPartyApiCalls discordServer;

    @Autowired
    NoteCountRepo noteCountRepo;

    private static LocalDateTime latestOTPTime;


    @Value("#{${webhooks}}")
    HashMap<String, String> discordLink = new HashMap<String, String>();

    @PostConstruct
    public LocalDateTime getLatestOTPTimestamp() {
        latestOTPTime = utilRepo.getTimeOfLatestOTP();
        return latestOTPTime;
    }
    
    public void startListening() throws InterruptedException {
        logger.atInfo().log("Current in-mem links:");
        try {
        // code commented for brevity
                Thread.sleep(5 * 60 * 1000);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

}


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source