#java #spring #spring-boot #exception #spring-boot-actuator
Вопрос:
Я работаю над приложением Spring Boot и написал пользовательскую конечную точку привода, которая использует встроенную конечную точку работоспособности и переносит ее содержимое в определенный формат, необходимый для бизнеса. Проблема в том, что когда я обычно запускаю приложение, все работает так, как ожидалось, однако в тестах я получаю ошибку, в которой HealthController required a bean of type 'org.springframework.boot.actuate.health.HealthEndpoint' that could not be found.
вы знаете, где моя ошибка?
Пользовательская конечная точка выглядит примерно так:
@Endpoint(
id = "custom-health"
)
@Component
@RequiredArgsConstructor
public class HealthController {
private final HealthEndpoint healthEndpoint;
@ReadOperation
public CustomHealthComponent health() {
//some code that is mapping from the internally used HealthEndpoint models to the custom models
return ...;
}
Этот класс сканируется при запуске приложения следующим образом:
@SpringBootApplication(exclude = {
SecurityAutoConfiguration.class,
ManagementWebSecurityAutoConfiguration.class
})
@EnableTransactionManagement
@EnableJpaRepositories(basePackageClasses = {
//some classes...
})
@EntityScan(basePackageClasses = {
//some classes...
})
@ComponentScan(
basePackages = {
"health", <- this package contains the `HealthController` Component listed above
//some packages...
},
excludeFilters = @ComponentScan.Filter(type = FilterType.CUSTOM, classes = some exclusions...)
)
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
И тестовый класс, в котором я получаю ошибку:
@Slf4j
@SpringBootTest(classes = Application.class, webEnvironment = RANDOM_PORT)
@ActiveProfiles(profiles = {"test1", "test2"})
public class TheFailingIT {
//lots of tests that all fail with the specified error...
}
Я также внес следующие изменения test/resources/application.yaml
в активацию пользовательской конечной точки (я внес те же изменения в реальный application.properties
файл, и там это сработало, в тестах, к сожалению, нет).
management:
endpoints:
web:
discovery:
enabled: false
exposure:
include: custom-health
cors:
allowed-methods: GET
allowed-origins: "*"
base-path: /basepath
enabled-by-default: true
health:
defaults:
enabled: false
db:
enabled: true
endpoint:
health:
enabled: true
show-details: ALWAYS
PS: Few changes to the class names have been made. Also i tried to comment out irrelevant stuff. If there are any further questions to clarify the current codebase feel free to ask! Thanks in advance for the help.