diff --git a/src/main/java/org/springframework/data/repository/config/DeferredRepositoryInitializationListener.java b/src/main/java/org/springframework/data/repository/config/DeferredRepositoryInitializationListener.java index d8b500ca8..a38376ad8 100644 --- a/src/main/java/org/springframework/data/repository/config/DeferredRepositoryInitializationListener.java +++ b/src/main/java/org/springframework/data/repository/config/DeferredRepositoryInitializationListener.java @@ -46,9 +46,11 @@ class DeferredRepositoryInitializationListener implements ApplicationListener registerRepositoriesIn(BeanDefinitionRegistry registry, RepositoryConfigurationExtension extension) { + if (LOG.isInfoEnabled()) { + LOG.info("Bootstrapping Spring Data repositories in {} mode.", configurationSource.getBootstrapMode().name()); + } + extension.registerBeansForRoot(registry, configurationSource); RepositoryBeanDefinitionBuilder builder = new RepositoryBeanDefinitionBuilder(registry, extension, configurationSource, resourceLoader, environment); List definitions = new ArrayList<>(); + StopWatch watch = new StopWatch(); + if (LOG.isDebugEnabled()) { LOG.debug("Scanning for repositories in packages {}.", configurationSource.getBasePackages().stream().collect(Collectors.joining(", "))); } - Map> configurations = new HashMap<>(); + watch.start(); - for (RepositoryConfiguration configuration : extension - .getRepositoryConfigurations(configurationSource, resourceLoader, inMultiStoreMode)) { + Collection> configurations = extension + .getRepositoryConfigurations(configurationSource, resourceLoader, inMultiStoreMode); - configurations.put(configuration.getRepositoryInterface(), configuration); + Map> configurationsByRepositoryName = new HashMap<>(configurations.size()); + + for (RepositoryConfiguration configuration : configurations) { + + configurationsByRepositoryName.put(configuration.getRepositoryInterface(), configuration); BeanDefinitionBuilder definitionBuilder = builder.build(configuration); @@ -151,8 +163,8 @@ public class RepositoryConfigurationDelegate { AbstractBeanDefinition beanDefinition = definitionBuilder.getBeanDefinition(); String beanName = configurationSource.generateBeanName(beanDefinition); - if (LOG.isDebugEnabled()) { - LOG.debug(REPOSITORY_REGISTRATION, extension.getModuleName(), beanName, configuration.getRepositoryInterface(), + if (LOG.isTraceEnabled()) { + LOG.trace(REPOSITORY_REGISTRATION, extension.getModuleName(), beanName, configuration.getRepositoryInterface(), configuration.getRepositoryFactoryBeanClassName()); } @@ -162,10 +174,13 @@ public class RepositoryConfigurationDelegate { definitions.add(new BeanComponentDefinition(beanDefinition, beanName)); } - potentiallyLazifyRepositories(configurations, registry, configurationSource.getBootstrapMode()); + potentiallyLazifyRepositories(configurationsByRepositoryName, registry, configurationSource.getBootstrapMode()); - if (LOG.isDebugEnabled()) { - LOG.debug("Finished repository scanning."); + watch.stop(); + + if (LOG.isInfoEnabled()) { + LOG.info("Finished Spring Data repository scanning in {}ms. Found {} repository interfaces.", // + watch.getLastTaskTimeMillis(), configurations.size()); } return definitions; @@ -205,6 +220,9 @@ public class RepositoryConfigurationDelegate { beanFactory.setAutowireCandidateResolver(newResolver); if (mode.equals(BootstrapMode.DEFERRED)) { + + LOG.debug("Registering deferred repository initialization listener."); + beanFactory.registerSingleton(DeferredRepositoryInitializationListener.class.getName(), new DeferredRepositoryInitializationListener(beanFactory)); }