Аннотация @EnableScheduling не просыпается в проекте Kotlin

У меня есть проект Kotlin, созданный с использованием Spring-Boot 2.6.4 и Java 11. Вот мой основной класс:

@SpringBootApplication
@EnableScheduling
open class MailApplication {

    companion object {
        @JvmStatic
        fun main(vararg args: String) {
            runApplication<EcoMailApplication>(*args)
        }
    }
}

У меня также есть еще один класс для запуска моего приложения с дополнительными конфигурациями:

object LocalRunner {

    @JvmStatic
    fun main(vararg args: String) {
        System.setProperty("spring.profiles.active", "stubMode,DEV,LOCAL")
        System.setProperty("logback.configurationFile", "logger/logback.xml")
        System.setProperty("logging.config", "classpath:logger/logback.xml")
        MailApplication.main(*args)
    }
}

Итак, когда я запускаю свое приложение с помощью функции «MailApplication.main», мои запланированные службы работают без каких-либо проблем. Но когда я запускаю приложение с использованием класса «LocalRunner.main», никаких методов, помеченных аннотацией @Scheduled, не запускается. Почему это? Как включить запланированные задания при работе в локальном профиле?

редактировать. структура проекта:

└── com
    └── acme
        ├── LocalRunner.kt
        ├── MailApplication.kt

Что произойдет, если вы начнете из MailApplication, но установите те же системные свойства другим способом (используя флаги -D в командной строке)?  (Это должно отличать, вызван ли сбой свойствами или каким-то образом самим LocalRunner.)

gidds 08.04.2024 23:10

Большое спасибо. Теперь я могу исправить ошибку. Я запустил приложение с параметрами и получил ту же ошибку. Затем я удалил параметр «-Dlogging.config», и ошибка исчезла. Похоже, у меня проблемы с настройкой регистратора, которые влияют на планирование. Исправим это и опубликуем решение.

Gennadiy 09.04.2024 09:12
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
65
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Скорее всего проблема с пакетом. Пожалуйста, обновите свой Вопрос, чтобы сообщить нам пакеты, в которых определены эти два класса.

Spring ищет аннотации в структуре вашего класса только ВНИЗ с момента запуска приложения. Итак, если бы у вас была такая структура:

└── com
    └── acme
        ├── MailApplication.kt
        ├── local
        │   └── LocalRunner.kt
        ├── model
        │   └── MyModel.kt
        └── service
            └── MyService.kt

... тогда, начиная с MailApplication.kt, все остальные ваши классы с аннотациями Spring находятся в этом пакете com.acme или ниже.

Но если вы начнете с com.acme.local.LocalRunner, то классы с аннотациями Spring, которые вы хотите найти, не будут найдены, поскольку они находятся выше в иерархии классов.

Вы можете переопределить это поведение по умолчанию разными способами, но начните с простого перемещения LocalRunner в тот же пакет, что и MailApplication.

Нет. MailApplication и LocalRunner находятся в одном пакете (корень проекта). В любом случае спасибо за предложение.

Gennadiy 08.04.2024 16:35
Ответ принят как подходящий

Глупая ошибка. Мой LocalRunner включает эту строку кода:

System.setProperty("logging.config", "classpath:logger/logback.xml")

и этот файл «logback.xml» устанавливает уровень ведения журнала как «ОШИБКА». Поэтому я не вижу сообщений log.info("..") из запланированного задания. Само приложение работает нормально. Я просто не видел никаких сообщений. ))

Другие вопросы по теме

Похожие вопросы

Получение «Пароль должен быть настроен на внешнем экземпляре SshClient» При попытке передать файл с помощью «spring-integration-sftp»
Android Studio и Google Maps API Стиль карт, как изменить цвет страны при нажатии на карту
Spring пакет-5 ORA-08177: невозможно сериализовать доступ для этой транзакции с использованием базы данных Oracle
Докер не может найти внутреннюю зависимость
Почему я не могу добавлять реализации в Android Studio Iguana?
Проблема Java POST, как проверить возврат с сервера?
IntelliJ и Eclipse расходятся во мнениях по поводу нулевых аннотаций через несколько интерфейсов. Является ли один «более правильным» или это ошибка плохой аннотации в API?
Автоматизированное тестирование с использованием Selenium, TestNT, Java — Reddit.com — кнопка «Войти» во всплывающем окне
Невозможно имитировать сервер ресурсов JWT Spring для тестирования
Проблема сборки bazel - ключевое слово com.sun.tools.javac или var вызывает сбой