Мы намерены разработать библиотеку с Компонентами Spring, которые должны быть во всех наших приложениях Spring, например, Beans, которые подключаются к нашим службам мониторинга, администрирования и контроля. Механизм «Автоконфигурация».
Для стартера я написал класс com.mycorp.project.basic.startup-notification.StartupNotificationPublisher.class
, который после «ApplicationStartedEvent» отправляет сообщение через наш любимый брокер сообщений (который, например, должен быть файлом журнала), здороваясь в мир.
Экземпляр этого класса должен быть создан через класс конфигурации com.mycorp.project.basic.startup-notification.autoconfiguration.StartupNotificationAutoConfiguration.class
package com.mycorp.project.basic.startup-notification
// ... Imports
@RequiredArgsConstructor
public class StartupNotificationPublisher {
private final String topic;
private final Logger messagePublisher = LoggerFactory.getLogger(StartupNotificationPublisher.class);
@EventListener
public void onApplicationStartedEvent(ApplicationStartedEvent event) {
messagePublisher.info("{}: Hello, Attention, I am here!", topic);
}
}
package com.mycorp.project.basic.startup-notification.autoconfiguration
// ... Imports
@Configuration
public class StartupNotificationAutoConfiguration {
@ConditionalOnMissingBean
@Bean
StartupNotificationPublisher startupNotificationPublisher()
{
return new StartupNotificationPublisher("helloTopic");
}
}
Наконец, чтобы автоконфигурация работала, я поместил файл spring.factories
в META-INF
-папка банки ( да, она есть! ), содержащая:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.mycorp.project.basic.startup-notification.autoconfiguration.StartupNotificationAutoConfiguration
Я предполагал, что это заставит пружину творить чудеса c, найти этот файл, когда я добавляю зависимость, запускаю конфигурацию и создаю этот bean-компонент для публикации sh сообщения.
Однако этого не происходит. Только когда я добавлю пакет в путь сканирования моего @SpringBootApplication
, я получу свое сообщение.
Что я пропустил? Есть ли более конкретные c требования, такие как специальные структуры проекта? Нужна ли мне библиотека под названием spring-boot-starter или что-то в этом роде?
ProjectStructure:
rootDirectory
|-src
| |-main
| |-java
| | |-com/mycorp/project/basic/startup-notification
| | |-autoconfiguration
| | | |-StartupNotificationAutoConfiguration.java
| | |-StartupNotificationPublisher.java
| |-resources
| |-META-INF
| |-spring.factories
|-build.gradle
|-...etc...
Результирующая структура Jar:
.jar
|-META-INF
| |-spring.factories
|-com
|-mycorp
|-project
|-basic
|-startup-notification
|-autoconfiguration
| |-StartupNotificationAutoConfiguration.class
|-StartupNotificationPublisher.class