#java #spring-boot
#java #spring-boot
Вопрос:
Я пытаюсь регулярно обновлять файл свойств. Сначала я использовал Timer
это scheduleAtFixedRate
TimerTask
. Поскольку он работал не так, как ожидалось (одновременно всегда работало более одного таймера), я решил использовать простой цикл while в потоке, цикл которого большую часть времени спит.
@SpringBootApplication
@EnableConfigurationProperties(StorageProperties.class)
public class ServerApplication {
Package mainPackage = ServerApplication.class.getPackage();
/**
* This will return a version only if the entry "Implementation-Version"
* exists in the Manifest file.
*/
String version = mainPackage.getImplementationVersion();
System.out.println(
version);
new Thread(() -> {
try {
while (true) {
System.out.println(
Thread.currentThread().getName() " is checking ");
// Code to write in properties
// Sleeps some time
Thread.sleep(GeneralSettings.CHECK_PERIOD_IN_S * 1000);
// Code to read from properties file to check for updates
} // end of while
} catch (InterruptedException ex) {
// ...
}
}).start();
SpringApplication.run(ServerApplication.class,
args);
}
Что я вижу в журналах, так это :
Поток-0 проверяет, поток-4 проверяет
Пожалуйста, обратите внимание: задавая этот вопрос, я также заметил, что версия также отображается дважды и всегда была (я думал, что это проблема конфигурации ведения журнала).
Почему запускаются 2 «проверяющих» потока, тогда как SpringApplication
выполняется только один раз, как и ожидалось?
Что я могу сделать, чтобы иметь только один «проверяющий» поток вместо 2?
Любая помощь приветствуется 🙂
Комментарии:
1. Предположение, вы используете Spring Boot Devtools в качестве зависимости?
2. @M.Deinum Это правильно! Не могли бы вы уточнить?
3. Он будет загружать / запускать классы дважды, удалите devtools, и у вас будет один.
4. При удалении devtools строка отображается только один раз, но другие функции не работают на компьютере разработчика (например, «сбой автоматического подключения зависимостей»). Поэтому я напишу комментарий в коде, чтобы предупредить, что это может произойти! В любом случае спасибо @M. Deinum!
5. Автоматическое подключение не должно завершаться сбоем… Devtools разрешает перезапуски только при изменении кода, который не содержит внедрения зависимостей (если у вас нет других зависимостей?).