We have a spring based simple library where we added some new implementation in a new dedicated package. Sharing the main configuration from class that package
@Configuration public class ChangesConfig { public static final String CONFIG_CHANGE_PREFIX = "CONFIG_CHANGE_"; public static final String CONFIG_CHANGE_STANDARD_OUTPUT = "CONFIG_CHANGE_STANDARD_OUTPUT"; @Bean GcpProjectIdProvider gcpProjectIdProvider() { return new DefaultGcpProjectIdProvider(); } @Bean public Builder BuilderConfig(GcpProjectIdProvider gcpProjectIdProvider) { return new CachingBuilder(new DefaultBuilder(gcpProjectIdProvider)); } @Bean public ChangeProvider ChangeProvider(ConfigurableEnvironment configurableEnvironment, Builder BuilderConfig) { Properties props = new Properties(); MutablePropertySources mutablePropertySources = configurableEnvironment.getPropertySources(); List<String> properties = StreamSupport.stream(mutablePropertySources.spliterator(), false) .filter(EnumerablePropertySource.class::isInstance) .map(ps -> ((EnumerablePropertySource<?>) ps).getPropertyNames()) .flatMap(Arrays::stream) .filter(propName -> propName.startsWith(CONFIG_CHANGE_PREFIX)) .collect(Collectors.toList()); if(properties.isEmpty()) return new NoOpChangeProvider(); properties.forEach(propName -> props.setProperty(propName.substring(CONFIG_CHANGE_PREFIX.length()).toLowerCase(), configurableEnvironment.getProperty(propName))); if(properties.size() == 1 && properties.contains(CONFIG_CHANGE_STANDARD_OUTPUT)) { return new StandardOutputChangeProvider(); } return new ChangeProviderImpl(props, BuilderConfig); } @Bean public ConfigRecorder ConfigRecorder(ChangeProvider ChangeProvider) { return new ConfigRecorderImpl(ChangeProvider); } } Built the new version of this library.
To its upstream services where this library was used, bumped the version and tests started failing due to that implementation in new package.
@Slf4j @SpringBootApplication(exclude = {R2dbcAutoConfiguration.class}, scanBasePackages = "com.abc") public class Application { public static void main(String[] args) { ReactorDebugAgent.init(); SpringApplication.run(Application.class, args); } } So We decided to exclude the specific package from ComponentScan and all tests went fine and build worked fine.
@Slf4j @SpringBootApplication(exclude = {R2dbcAutoConfiguration.class}) @ComponentScan(basePackages = "com.abc", excludeFilters= {@ComponentScan.Filter(type= FilterType.REGEX, pattern={"com.abc.bcd.def..*"})}) public class Application { public static void main(String[] args) { ReactorDebugAgent.init(); SpringApplication.run(Application.class, args); } } However we noticed only http_server_request actuator metrics are missing. If i remove the excludeFilters in above configuration then http_server_request actuator metrics are sent fine.
What could be the reason ?
We tried various changes with @ComponentScan but nothing seems to work.