From 22a6870d5c41cc38e62a06155ab75cdb0e6cf004 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Thu, 16 Aug 2018 14:03:47 +0200 Subject: [PATCH] DATACMNS-1367 - Improved repository bootstrap logging. Core information about the bootstrap mode, timing and number of repositories created is now logged in info. Individual repository registration is logged in trace now. Related tickets: DATACMNS-1368. --- ...erredRepositoryInitializationListener.java | 4 ++- .../RepositoryConfigurationDelegate.java | 36 ++++++++++++++----- 2 files changed, 30 insertions(+), 10 deletions(-) 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)); }