Я хотел ввести методы @Async
(для отправки писем параллельно) в моем приложении SpringBoot. Но когда я помещал аннотацию @EnableAsync
в основной класс нашего приложения @Configuration
(аннотированный @SpringBootApplication
), миграция БД Flyway выполняется до выполнения DataSourceInitializer
(который запускает schema.sql и data.sql для моих тестов).Spring @EnableAsync нарушает порядок инициализации боба?
Первая операция, связанная с таблицей базы данных «должна быть перенесена», не выполняется.
Снятие @EnableAsync
ставит все в норму. Почему это происходит и как я могу исправить это (или решить проблему)?
Update еще несколько выводов: @EnableAsync(mode = AdviceMode.ASPECTJ)
сохраняет первоначальный порядок настройки БД, но метод @Async
работает на том же потоке, вызывающей нити затем. Я также видел, что Bean «objectPostProcessor» создается раньше (третий компонент), когда @EnableAsync
нет, или используется @EnableAsync(mode = AdviceMode.ASPECTJ)
. Когда используется только @EnableAsync
, этот компонент создается намного позже.
Update 2 Хотя я не был в состоянии создать минимальный проект, который воспроизводит эту проблему все же, я выяснил, что собственно DB порядок установки восстанавливается в моем пораженном приложении, когда я закомментируйте @EnableWebSocketMessageBroker
в следующем:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer
{
...
}
Bean 'webSocketConfig' является первым боба создана (как на выход консоли INFO-уровень), если @EnableWebSocketMessageBroker
присутствует.
У вас есть ошибки с помощью Flyway? Как вы убедитесь, что асинхронный материал по-прежнему работает только после завершения миграции? – Thilo
Пожалуйста, проверьте мое обновление по вопросу. На самом деле миграция, похоже, работает нормально, вся БД воссоздается позже. – sorrymissjackson
Я не понимаю вопроса. Перед попыткой использовать базу данных необходимо запустить код миграции. Почему вы хотите запустить его «асинхронно»? – Thilo