From 2e51b48cd9ad9ad3e599aa0cb0b916061a061dfa Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 31 Aug 2017 22:19:44 -0700 Subject: [PATCH] Refactor actuator package locations Restructure actuator packages to improve structure. The following changes have been made: - Separate actuator and actuator auto-configuration into different modules. - Move endpoint code into `spring-boot-actuator`. - Move `Endpoint` implementations from a single package into technology specific packages. - Move `HealthIndicator` implementations from a single package into technology specific packages. - As much as possible attempt to mirror the `spring-boot` package structure and class naming in `spring-boot-actuator` and `spring-boot-actuator-autoconfigure`. - Move `DataSourceBuilder` and DataSource meta-data support from `spring-boot-actuator` to `spring-boot`. Fixes gh-10261 --- pom.xml | 1 + spring-boot-actuator-autoconfigure/pom.xml | 373 +++++++++++++ .../OnEndpointElementCondition.java | 4 +- ...abbitHealthIndicatorAutoConfiguration.java | 65 +++ .../autoconfigure/amqp/package-info.java | 20 + .../audit/AuditAutoConfiguration.java | 0 .../AuditEventsEndpointAutoConfiguration.java | 30 +- .../autoconfigure/audit/package-info.java | 2 +- .../beans/BeansEndpointAutoConfiguration.java | 44 ++ .../autoconfigure/beans/package-info.java | 20 + .../CacheStatisticsAutoConfiguration.java | 0 .../autoconfigure/cache/package-info.java | 2 +- ...andraHealthIndicatorAutoConfiguration.java | 70 +++ .../autoconfigure/cassandra/package-info.java | 20 + .../cloudfoundry/AccessLevel.java | 2 +- ...CloudFoundryActuatorAutoConfiguration.java | 10 +- .../CloudFoundryAuthorizationException.java | 2 +- .../CloudFoundrySecurityInterceptor.java | 2 +- .../CloudFoundrySecurityService.java | 4 +- ...undryWebEndpointServletHandlerMapping.java | 20 +- ...SkipSslVerificationHttpRequestFactory.java | 2 +- .../autoconfigure}/cloudfoundry/Token.java | 2 +- .../cloudfoundry/TokenValidator.java | 4 +- .../cloudfoundry/package-info.java | 20 + .../AutoConfigurationReportEndpoint.java | 7 +- ...rationReportEndpointAutoConfiguration.java | 53 ++ .../autoconfigure/condition/package-info.java | 20 + .../ShutdownEndpointAutoConfiguration.java | 42 ++ .../autoconfigure/context/package-info.java | 20 + ...ertiesReportEndpointAutoConfiguration.java | 43 ++ .../context/properties/package-info.java | 20 + ...hbaseHealthIndicatorAutoConfiguration.java | 68 +++ .../autoconfigure/couchbase/package-info.java | 20 + ...earchHealthIndicatorAutoConfiguration.java | 33 +- ...lasticsearchHealthIndicatorProperties.java | 5 +- .../elasticsearch/package-info.java | 20 + .../DefaultCachingConfigurationFactory.java | 22 +- .../endpoint/EndpointAutoConfiguration.java | 88 +++ .../endpoint}/EndpointEnablement.java | 2 +- .../endpoint}/EndpointEnablementProvider.java | 4 +- .../endpoint}/EndpointProvider.java | 11 +- .../ConditionalOnEnabledEndpoint.java | 6 +- .../OnEnabledEndpointCondition.java | 14 +- .../DefaultEndpointObjectNameFactory.java | 7 +- .../jmx/JmxEndpointAutoConfiguration.java | 82 +++ .../endpoint/jmx}/JmxEndpointExporter.java | 16 +- .../jmx}/JmxEndpointExporterProperties.java | 2 +- .../autoconfigure/endpoint/package-info.java | 2 +- ...ndpointManagementContextConfiguration.java | 63 +++ .../endpoint/web}/package-info.java | 4 +- ...ndpointManagementContextConfiguration.java | 52 ++ .../web/servlet}/CorsEndpointProperties.java | 2 +- ...ndpointManagementContextConfiguration.java | 88 +++ .../EnvironmentEndpointAutoConfiguration.java | 43 ++ .../autoconfigure/env/package-info.java | 20 + .../FlywayEndpointAutoConfiguration.java | 53 ++ .../autoconfigure/flyway/package-info.java | 20 + ...CompositeHealthIndicatorConfiguration.java | 0 ...eReactiveHealthIndicatorConfiguration.java | 2 +- .../ConditionalOnEnabledHealthIndicator.java | 0 .../HealthEndpointAutoConfiguration.java | 98 ++++ .../HealthIndicatorAutoConfiguration.java | 64 +++ .../health/HealthIndicatorProperties.java | 0 ...ndpointManagementContextConfiguration.java | 25 +- .../OnEnabledHealthIndicatorCondition.java | 4 +- .../autoconfigure/health/package-info.java | 2 +- .../ConditionalOnEnabledInfoContributor.java | 0 .../InfoContributorAutoConfiguration.java | 3 - .../info/InfoContributorProperties.java | 0 .../info/InfoEndpointAutoConfiguration.java | 50 ++ .../OnEnabledInfoContributorCondition.java | 4 +- .../autoconfigure/info/package-info.java | 2 +- ...ourceHealthIndicatorAutoConfiguration.java | 118 ++++ .../autoconfigure/jdbc/package-info.java | 20 + .../JmsHealthIndicatorAutoConfiguration.java | 68 +++ .../autoconfigure/jms/package-info.java | 20 + ...JolokiaManagementContextConfiguration.java | 4 +- .../jolokia/JolokiaProperties.java | 0 .../autoconfigure/jolokia/package-info.java | 20 + .../LdapHealthIndicatorAutoConfiguration.java | 66 +++ .../autoconfigure/ldap/package-info.java | 20 + .../LiquibaseEndpointAutoConfiguration.java | 54 ++ .../autoconfigure/liquibase/package-info.java | 20 + ...ndpointManagementContextConfiguration.java | 23 +- .../LoggersEndpointAutoConfiguration.java | 45 ++ .../autoconfigure/logging/package-info.java | 20 + .../MailHealthIndicatorAutoConfiguration.java | 66 +++ .../autoconfigure/mail/package-info.java | 20 + ...ndpointManagementContextConfiguration.java | 41 ++ .../ThreadDumpEndpointAutoConfiguration.java | 42 ++ .../management/package-info.java | 20 + .../metrics/ActuatorMetricWriter.java | 0 .../metrics/ExportMetricReader.java | 0 .../metrics/ExportMetricWriter.java | 0 .../MetricExportAutoConfiguration.java | 2 +- .../MetricFilterAutoConfiguration.java | 0 .../metrics/MetricFilterProperties.java | 0 .../MetricRepositoryAutoConfiguration.java | 0 .../MetricsChannelAutoConfiguration.java | 0 .../MetricsDropwizardAutoConfiguration.java | 2 +- .../MetricsEndpointAutoConfiguration.java | 62 +++ .../PublicMetricsAutoConfiguration.java | 19 +- .../autoconfigure/metrics/package-info.java | 2 +- ...MongoHealthIndicatorAutoConfiguration.java | 66 +++ .../autoconfigure/mongo/package-info.java | 20 + ...Neo4jHealthIndicatorAutoConfiguration.java | 67 +++ .../autoconfigure/neo4j/package-info.java | 20 + .../actuate/autoconfigure/package-info.java | 2 +- ...RedisHealthIndicatorAutoConfiguration.java | 45 ++ .../RedisHealthIndicatorConfiguration.java | 58 ++ ...sReactiveHealthIndicatorConfiguration.java | 41 +- .../autoconfigure/redis/package-info.java | 20 + .../SolrHealthIndicatorAutoConfiguration.java | 66 +++ .../autoconfigure/solr/package-info.java | 20 + ...SpaceHealthIndicatorAutoConfiguration.java | 54 ++ .../DiskSpaceHealthIndicatorProperties.java | 3 +- .../autoconfigure/system/package-info.java | 20 + .../trace/TraceEndpointAutoConfiguration.java | 46 ++ .../TraceRepositoryAutoConfiguration.java | 0 .../TraceWebFilterAutoConfiguration.java | 2 +- .../autoconfigure/trace/package-info.java | 2 +- .../web}/ManagementContextConfiguration.java | 6 +- .../web}/ManagementContextFactory.java | 7 +- .../web}/ManagementContextType.java | 2 +- ...eyManagementChildContextConfiguration.java | 72 +++ ...veManagementChildContextConfiguration.java | 33 +- ...iveManagementContextAutoConfiguration.java | 45 ++ .../ReactiveManagementContextFactory.java | 16 +- .../server}/ConditionalOnManagementPort.java | 3 +- ...leChildManagementContextConfiguration.java | 3 +- .../web/server}/EnableManagementContext.java | 3 +- .../web/server/LocalManagementPort.java | 4 +- .../ManagementContextAutoConfiguration.java | 47 +- ...entContextConfigurationImportSelector.java | 8 +- .../web/server}/ManagementPortType.java | 2 +- .../ManagementServerFactoryCustomizer.java | 29 +- .../server}/ManagementServerProperties.java | 3 +- .../server}/OnManagementPortCondition.java | 7 +- .../web/server/package-info.java | 3 +- .../web/servlet/CompositeHandlerAdapter.java | 87 +++ .../CompositeHandlerExceptionResolver.java | 66 +++ .../web/servlet/CompositeHandlerMapping.java | 67 +++ .../web/servlet}/ManagementErrorEndpoint.java | 7 +- .../servlet}/ManagementServletContext.java | 4 +- .../web/servlet}/RequestMappingEndpoint.java | 7 +- ...questMappingEndpointAutoConfiguration.java | 44 ++ ...etManagementChildContextConfiguration.java | 158 ++++++ ...letManagementContextAutoConfiguration.java | 44 +- .../ServletManagementContextFactory.java | 14 +- ...bMvcEndpointChildContextConfiguration.java | 85 +++ ...itional-spring-configuration-metadata.json | 0 .../main/resources/META-INF/spring.factories | 60 ++ .../SpringApplicationHierarchyTests.java | 7 +- ...HealthIndicatorAutoConfigurationTests.java | 57 ++ .../audit/AuditAutoConfigurationTests.java | 0 ...tEventsEndpointAutoConfigurationTests.java | 61 ++ .../BeansEndpointAutoConfigurationTests.java | 51 ++ ...CacheStatisticsAutoConfigurationTests.java | 0 ...HealthIndicatorAutoConfigurationTests.java | 72 +++ .../cloudfoundry/AccessLevelTests.java | 2 +- .../AuthorizationExceptionMatcher.java | 4 +- ...FoundryActuatorAutoConfigurationTests.java | 12 +- ...oudFoundryAuthorizationExceptionTests.java | 4 +- ...FoundryMvcWebEndpointIntegrationTests.java | 18 +- .../CloudFoundrySecurityInterceptorTests.java | 4 +- .../CloudFoundrySecurityServiceTests.java | 4 +- ...slVerificationHttpRequestFactoryTests.java | 2 +- .../cloudfoundry/TokenTests.java | 4 +- .../cloudfoundry/TokenValidatorTests.java | 4 +- ...nReportEndpointAutoConfigurationTests.java | 51 ++ .../AutoConfigurationReportEndpointTests.java | 4 +- ...hutdownEndpointAutoConfigurationTests.java | 51 ++ ...sReportEndpointAutoConfigurationTests.java | 52 ++ ...HealthIndicatorAutoConfigurationTests.java | 72 +++ ...HealthIndicatorAutoConfigurationTests.java | 91 +++ ...faultCachingConfigurationFactoryTests.java | 15 +- .../EndpointEnablementProviderTests.java | 4 +- .../ConditionalOnEnabledEndpointTests.java | 10 +- ...DefaultEndpointObjectNameFactoryTests.java | 4 +- ...ronmentEndpointAutoConfigurationTests.java | 52 ++ .../FlywayEndpointAutoConfigurationTests.java | 66 +++ .../HealthEndpointAutoConfigurationTests.java | 27 +- ...HealthIndicatorAutoConfigurationTests.java | 147 +++++ ...veManagementContextConfigurationTests.java | 101 ++++ ...etManagementContextConfigurationTests.java | 99 ++++ ...InfoContributorAutoConfigurationTests.java | 0 .../InfoEndpointAutoConfigurationTests.java | 51 ++ .../EndpointAutoConfigurationClasses.java | 62 +++ .../JmxEndpointIntegrationTests.java | 12 +- ...tContextConfigurationIntegrationTests.java | 15 +- ...intsAutoConfigurationIntegrationTests.java | 14 +- .../WebMvcEndpointCorsIntegrationTests.java | 19 +- ...ebMvcEndpointExposureIntegrationTests.java | 24 +- .../WebMvcEndpointIntegrationTests.java | 16 +- ...HealthIndicatorAutoConfigurationTests.java | 138 +++++ ...HealthIndicatorAutoConfigurationTests.java | 58 ++ ...iaManagementContextConfigurationTests.java | 5 +- ...HealthIndicatorAutoConfigurationTests.java | 73 +++ ...quibaseEndpointAutoConfigurationTests.java | 67 +++ ...ntManagementContextConfigurationTests.java | 68 +++ ...LoggersEndpointAutoConfigurationTests.java | 66 +++ ...HealthIndicatorAutoConfigurationTests.java | 58 ++ ...ntManagementContextConfigurationTests.java | 51 ++ ...eadDumpEndpointAutoConfigurationTests.java | 52 ++ .../MetricExportAutoConfigurationTests.java | 2 +- .../MetricFilterAutoConfigurationTests.java | 0 ...etricRepositoryAutoConfigurationTests.java | 0 ...tricsDropwizardAutoConfigurationTests.java | 0 ...MetricsEndpointAutoConfigurationTests.java | 51 ++ .../PublicMetricsAutoConfigurationTests.java | 18 +- ...HealthIndicatorAutoConfigurationTests.java | 59 ++ ...HealthIndicatorAutoConfigurationTests.java | 72 +++ ...HealthIndicatorAutoConfigurationTests.java | 65 +++ ...tiveHealthIndicatorConfigurationTests.java | 60 ++ ...HealthIndicatorAutoConfigurationTests.java | 57 ++ ...HealthIndicatorAutoConfigurationTests.java | 56 ++ .../TraceEndpointAutoConfigurationTests.java | 51 ++ ...TraceRepositoryAutoConfigurationTests.java | 0 .../TraceWebFilterAutoConfigurationTests.java | 0 ...ntextConfigurationImportSelectorTests.java | 4 +- .../ManagementServerPropertiesTests.java | 2 +- .../servlet/MockServletWebServerFactory.java | 2 +- .../servlet}/RequestMappingEndpointTests.java | 20 +- ...ringIntegrationMetricReaderNoJmxTests.java | 2 +- .../SpringIntegrationMetricReaderTests.java | 2 +- .../test/resources/actuator-docs-index.html | 0 .../src/test/resources/cache/test-ehcache.xml | 6 + .../test/resources/cache/test-hazelcast.xml | 12 + .../test/resources/cache/test-infinispan.xml | 8 + .../db/changelog/db.changelog-master.yaml | 20 + .../resources/db/create-custom-schema.sql | 1 + .../test/resources/db/migration/V1__init.sql | 0 .../src/test/resources/git.properties | 13 + .../src/test/resources/hazelcast.xml | 12 + .../src/test/resources/log4j2-test.xml | 17 + .../src/test/resources/test.jks | Bin 0 -> 2248 bytes spring-boot-actuator/pom.xml | 153 ++---- .../RabbitHealthIndicator.java | 7 +- .../AuditEventsEndpoint.java | 8 +- .../AuditEventsJmxEndpointExtension.java | 9 +- .../endpoint/EndpointAutoConfiguration.java | 305 ---------- .../endpoint/ManagementContextResolver.java | 44 -- .../ManagementEndpointPathResolver.java | 42 -- ...dpointInfrastructureAutoConfiguration.java | 149 ----- ...ntChildManagementContextConfiguration.java | 374 ------------- .../WebEndpointHandlerMappingCustomizer.java | 37 -- ...ructureManagementContextConfiguration.java | 148 ----- .../endpoint/infrastructure/package-info.java | 21 - .../endpoint/web/package-info.java | 21 - .../HealthIndicatorAutoConfiguration.java | 91 --- .../health/HealthIndicatorsConfiguration.java | 381 ------------- ...anagementWebSecurityAutoConfiguration.java | 48 -- .../autoconfigure/web/package-info.java | 20 - .../{endpoint => beans}/BeansEndpoint.java | 7 +- .../boot/actuate/beans}/package-info.java | 4 +- .../CachePublicMetrics.java | 7 +- .../boot/actuate/cache/package-info.java | 2 +- .../CassandraHealthIndicator.java | 7 +- .../ShutdownEndpoint.java | 7 +- .../boot/actuate/context}/package-info.java | 4 +- ...ConfigurationPropertiesReportEndpoint.java | 8 +- .../context/properties/package-info.java | 20 + .../CouchbaseHealthIndicator.java | 9 +- .../ElasticsearchHealthIndicator.java | 53 +- .../ElasticsearchJestHealthIndicator.java | 10 +- .../actuate}/endpoint/EndpointDiscoverer.java | 2 +- .../boot/actuate}/endpoint/EndpointInfo.java | 2 +- .../boot/actuate}/endpoint/Operation.java | 2 +- .../actuate}/endpoint/OperationInvoker.java | 2 +- .../endpoint/OperationParameterMapper.java | 2 +- .../boot/actuate}/endpoint/OperationType.java | 2 +- .../endpoint/ParameterMappingException.java | 4 +- .../endpoint/ReflectiveOperationInvoker.java | 2 +- .../boot/actuate/endpoint/Sanitizer.java | 12 +- .../AnnotationEndpointDiscoverer.java | 18 +- .../endpoint/annotation}/DeleteOperation.java | 2 +- .../endpoint/annotation}/Endpoint.java | 4 +- .../annotation}/EndpointExposure.java | 2 +- .../endpoint/annotation}/ReadOperation.java | 2 +- .../endpoint/annotation}/Selector.java | 2 +- .../endpoint/annotation}/WriteOperation.java | 2 +- .../endpoint/annotation/package-info.java | 20 + .../endpoint/cache}/CachingConfiguration.java | 2 +- .../cache/CachingConfigurationFactory.java | 16 +- .../cache}/CachingOperationInvoker.java | 3 +- .../actuate/endpoint/cache/package-info.java | 20 + ...ersionServiceOperationParameterMapper.java | 19 +- .../convert/IsoOffsetDateTimeConverter.java | 52 ++ .../endpoint/convert/package-info.java | 20 + .../http/ActuatorMediaType.java} | 21 +- .../actuate/endpoint/http/package-info.java | 20 + .../actuate}/endpoint/jmx/EndpointMBean.java | 4 +- .../endpoint/jmx/EndpointMBeanInfo.java | 6 +- .../jmx/EndpointMBeanInfoAssembler.java | 6 +- .../endpoint/jmx/EndpointMBeanRegistrar.java | 2 +- .../jmx/EndpointObjectNameFactory.java | 2 +- .../endpoint/jmx/JmxEndpointMBeanFactory.java | 4 +- .../endpoint/jmx/JmxEndpointOperation.java | 8 +- .../JmxEndpointOperationParameterInfo.java | 2 +- .../jmx/JmxOperationResponseMapper.java | 2 +- .../JmxAnnotationEndpointDiscoverer.java | 28 +- .../jmx/annotation}/JmxEndpointExtension.java | 4 +- .../endpoint/jmx/annotation/package-info.java | 20 + .../actuate/endpoint/jmx/package-info.java | 4 +- .../actuate/endpoint/mvc/package-info.java | 20 - .../boot/actuate/endpoint/package-info.java | 1 - .../endpoint/web/EndpointLinksResolver.java | 4 +- .../boot/actuate}/endpoint/web/Link.java | 2 +- .../web/OperationRequestPredicate.java | 2 +- .../endpoint/web/WebEndpointHttpMethod.java | 2 +- .../endpoint/web/WebEndpointOperation.java | 8 +- .../endpoint/web/WebEndpointResponse.java | 4 +- .../WebAnnotationEndpointDiscoverer.java | 32 +- .../web/annotation}/WebEndpointExtension.java | 4 +- .../endpoint/web/annotation/package-info.java | 20 + .../jersey/JerseyEndpointResourceFactory.java | 21 +- .../endpoint/web/jersey/package-info.java | 20 + .../actuate/endpoint/web}/package-info.java | 4 +- .../WebFluxEndpointHandlerMapping.java | 30 +- .../endpoint/web/reactive/package-info.java | 20 + .../AbstractWebMvcEndpointHandlerMapping.java | 19 +- .../servlet/WebMvcEndpointHandlerMapping.java | 30 +- .../endpoint/web/servlet/package-info.java | 20 + .../EnvironmentEndpoint.java | 14 +- .../{endpoint => flyway}/FlywayEndpoint.java | 28 +- .../{endpoint => health}/HealthEndpoint.java | 9 +- .../HealthReactiveWebEndpointExtension.java | 12 +- .../HealthWebEndpointExtension.java | 11 +- .../{endpoint => health}/StatusEndpoint.java | 9 +- .../StatusReactiveWebEndpointExtension.java | 12 +- .../StatusWebEndpointExtension.java | 11 +- .../{endpoint => info}/InfoEndpoint.java | 9 +- .../DataSourceHealthIndicator.java | 7 +- .../{health => jms}/JmsHealthIndicator.java | 8 +- .../{health => ldap}/LdapHealthIndicator.java | 7 +- .../LiquibaseEndpoint.java | 21 +- .../web => logger}/LogFileWebEndpoint.java | 8 +- .../LoggersEndpoint.java | 12 +- .../{health => mail}/MailHealthIndicator.java | 8 +- .../HeapDumpWebEndpoint.java | 10 +- .../ThreadDumpEndpoint.java | 7 +- .../DataSourcePublicMetrics.java | 11 +- .../MetricsEndpoint.java | 10 +- .../{endpoint => metrics}/PublicMetrics.java | 5 +- .../SystemPublicMetrics.java | 5 +- .../TomcatPublicMetrics.java | 5 +- .../reader}/MetricReaderPublicMetrics.java | 5 +- .../reader}/MetricsEndpointMetricReader.java | 6 +- .../rich}/RichGaugeReaderPublicMetrics.java | 7 +- .../MongoHealthIndicator.java | 7 +- .../Neo4jHealthIndicator.java | 6 +- .../RedisHealthIndicator.java | 9 +- .../RedisReactiveHealthIndicator.java | 18 +- .../{health => solr}/SolrHealthIndicator.java | 9 +- .../DiskSpaceHealthIndicator.java | 34 +- .../{endpoint => trace}/TraceEndpoint.java | 9 +- .../actuate/trace/WebRequestTraceFilter.java | 2 +- .../main/resources/META-INF/spring.factories | 27 - .../boot/actuate/AdhocTestSuite.java | 7 +- .../amqp/RabbitHealthIndicatorTests.java | 90 +++ .../AuditEventsEndpointTests.java | 5 +- ...uditEventsEndpointWebIntegrationTests.java | 9 +- .../AuditEventsJmxEndpointExtensionTests.java | 6 +- .../ManagementEndpointPathResolverTests.java | 49 -- .../JmxEndpointAutoConfigurationTests.java | 77 --- ...ntManagementContextConfigurationTests.java | 279 ---------- ...HealthIndicatorAutoConfigurationTests.java | 52 -- .../HealthIndicatorsConfigurationTests.java | 519 ------------------ ...iveHealthIndicatorsConfigurationTests.java | 60 -- .../BeansEndpointTests.java | 6 +- .../CachePublicMetricsTests.java | 5 +- .../ShutdownEndpointTests.java | 2 +- ...sReportEndpointMethodAnnotationsTests.java | 6 +- ...onPropertiesReportEndpointParentTests.java | 4 +- ...ionPropertiesReportEndpointProxyTests.java | 6 +- ...rtiesReportEndpointSerializationTests.java | 6 +- ...gurationPropertiesReportEndpointTests.java | 6 +- .../ElasticsearchHealthIndicatorTests.java | 16 +- ...ElasticsearchJestHealthIndicatorTests.java | 6 +- .../AnnotationEndpointDiscovererTests.java | 16 +- .../cache}/CachingOperationInvokerTests.java | 4 +- ...nServiceOperationParameterMapperTests.java | 95 ++++ .../IsoOffsetDateTimeConverterTests.java | 49 ++ .../jmx/EndpointMBeanInfoAssemblerTests.java | 8 +- .../jmx/EndpointMBeanRegistrarTests.java | 2 +- .../endpoint/jmx/EndpointMBeanTests.java | 15 +- .../JmxAnnotationEndpointDiscovererTests.java | 28 +- .../AbstractWebEndpointIntegrationTests.java | 31 +- .../web/EndpointLinksResolverTests.java | 6 +- .../web/OperationRequestPredicateTests.java | 2 +- .../WebAnnotationEndpointDiscovererTests.java | 32 +- .../endpoint/web/WebEndpointsRunner.java | 415 -------------- .../JerseyWebEndpointIntegrationTests.java | 7 +- .../WebFluxEndpointIntegrationTests.java | 15 +- .../MvcWebEndpointIntegrationTests.java | 11 +- .../web/test/AbstractWebEndpointRunner.java | 229 ++++++++ .../endpoint/web/test/ContextFactory.java} | 15 +- .../web/test/JerseyEndpointsRunner.java | 107 ++++ .../endpoint/web/test/PortHolder.java} | 19 +- .../endpoint/web/test/WebEndpointRunners.java | 65 +++ .../web/test/WebFluxEndpointsRunner.java | 112 ++++ .../web/test/WebMvcEndpointRunner.java | 95 ++++ .../EnvironmentEndpointTests.java | 23 +- ...nvironmentEndpointWebIntegrationTests.java | 6 +- .../FlywayEndpointTests.java | 3 +- .../HealthEndpointTests.java | 8 +- .../HealthEndpointWebIntegrationTests.java | 11 +- .../health/RabbitHealthIndicatorTests.java | 59 -- .../StatusEndpointTests.java | 8 +- .../StatusEndpointWebIntegrationTests.java | 11 +- .../{endpoint => info}/InfoEndpointTests.java | 2 +- .../InfoEndpointWebIntegrationTests.java | 7 +- .../DataSourceHealthIndicatorTests.java | 4 +- .../JmsHealthIndicatorTests.java | 7 +- .../LdapHealthIndicatorTests.java | 23 +- .../LiquibaseEndpointTests.java | 2 +- .../LogFileWebEndpointTests.java | 2 +- ...LogFileWebEndpointWebIntegrationTests.java | 5 +- .../LoggersEndpointTests.java | 5 +- .../LoggersEndpointWebIntegrationTests.java | 19 +- .../MailHealthIndicatorTests.java | 6 +- .../HeapDumpWebEndpointTests.java | 2 +- ...eapDumpWebEndpointWebIntegrationTests.java | 5 +- .../ThreadDumpEndpointTests.java | 2 +- .../MetricsEndpointMvcIntegrationTests.java | 7 +- .../MetricsEndpointTests.java | 3 +- .../SystemPublicMetricsTests.java | 4 +- .../TomcatPublicMetricsTests.java | 3 +- .../MetricReaderPublicMetricsTests.java | 3 +- .../RichGaugeReaderPublicMetricsTests.java | 3 +- .../MongoHealthIndicatorTests.java | 22 +- .../Neo4jHealthIndicatorTests.java | 5 +- .../RedisHealthIndicatorTests.java | 4 +- .../RedisReactiveHealthIndicatorTests.java | 4 +- .../SolrHealthIndicatorTests.java | 20 +- .../DiskSpaceHealthIndicatorTests.java | 18 +- .../TraceEndpointTests.java | 6 +- .../trace/WebRequestTraceFilterTests.java | 2 +- .../src/test/resources/cache/test-ehcache.xml | 6 +- .../test/resources/cache/test-hazelcast.xml | 3 - .../test/resources/cache/test-infinispan.xml | 2 - .../src/test/resources/hazelcast.xml | 3 - spring-boot-autoconfigure/pom.xml | 1 - .../jdbc/DataSourceAutoConfiguration.java | 1 + .../jdbc/DataSourceInitializer.java | 1 + .../jdbc/DataSourceProperties.java | 1 + ...rcePoolMetadataProvidersConfiguration.java | 4 + .../liquibase/LiquibaseAutoConfiguration.java | 2 +- .../error/AbstractErrorController.java | 2 + .../servlet/error/BasicErrorController.java | 1 + .../error/ErrorMvcAutoConfiguration.java | 3 + .../flyway/FlywayAutoConfigurationTests.java | 2 +- .../jdbc/DataSourceInitializerTests.java | 1 + .../TomcatDataSourceConfigurationTests.java | 1 + .../jooq/JooqAutoConfigurationTests.java | 2 +- .../LiquibaseAutoConfigurationTests.java | 2 +- .../TransactionAutoConfigurationTests.java | 2 +- spring-boot-dependencies/pom.xml | 5 + spring-boot-docs/pom.xml | 8 +- .../appendix-auto-configuration-classes.adoc | 6 +- .../boot/jdbc/BasicDataSourceExample.java | 1 - .../boot/jdbc/SimpleDataSourceExample.java | 1 - .../jdbc/SimpleTwoDataSourcesExample.java | 1 - spring-boot-full-build/pom.xml | 1 + .../src/checkstyle/import-control.xml | 5 +- ...AndPathSampleActuatorApplicationTests.java | 2 +- .../SampleActuatorNoWebApplicationTests.java | 4 +- .../SampleActuatorUiApplicationPortTests.java | 2 +- ...gementAddressActuatorApplicationTests.java | 2 +- ...AndPathSampleActuatorApplicationTests.java | 2 +- ...entPortSampleActuatorApplicationTests.java | 2 +- .../redis/AggregateMetricsConfiguration.java | 6 +- .../spring-boot-starter-actuator/pom.xml | 2 +- .../web/servlet/WebMvcTypeExcludeFilter.java | 2 +- ...MvcTestAllControllersIntegrationTests.java | 2 +- .../boot/test/context/SpringBootTest.java | 8 +- spring-boot/pom.xml | 35 +- .../bind/convert/BinderConversionService.java | 2 +- .../endpoint/DefaultEndpointPathResolver.java | 33 -- .../boot/endpoint/web/mvc/package-info.java | 20 - .../boot/endpoint/web/package-info.java | 20 - .../endpoint/web/reactive/package-info.java | 20 - .../boot}/jdbc/DataSourceBuilder.java | 5 +- .../AbstractDataSourcePoolMetadata.java | 6 +- .../CommonsDbcp2DataSourcePoolMetadata.java | 6 +- .../jdbc/metadata/DataSourcePoolMetadata.java | 6 +- .../DataSourcePoolMetadataProvider.java | 4 +- .../DataSourcePoolMetadataProviders.java | 4 +- .../HikariDataSourcePoolMetadata.java | 6 +- .../TomcatDataSourcePoolMetadata.java | 5 +- .../servlet/error/DefaultErrorAttributes.java | 4 +- .../web/servlet/error/ErrorAttributes.java | 4 +- .../web/servlet/error/ErrorController.java | 3 +- .../DefaultEndpointPathResolverTests.java | 40 -- .../boot}/jdbc/DataSourceBuilderTests.java | 27 +- .../AbstractDataSourcePoolMetadataTests.java | 4 +- ...mmonsDbcp2DataSourcePoolMetadataTests.java | 4 +- .../DataSourcePoolMetadataProvidersTests.java | 4 +- .../HikariDataSourcePoolMetadataTests.java | 4 +- .../TomcatDataSourcePoolMetadataTests.java | 4 +- .../error/DefaultErrorAttributesTests.java | 2 +- 501 files changed, 8340 insertions(+), 4736 deletions(-) create mode 100644 spring-boot-actuator-autoconfigure/pom.xml rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/OnEnabledEndpointElementCondition.java => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/OnEndpointElementCondition.java (95%) create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/amqp/RabbitHealthIndicatorAutoConfiguration.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/amqp/package-info.java rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/main/java/org/springframework/boot/actuate/autoconfigure/audit/AuditAutoConfiguration.java (100%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx/JmxEndpointAutoConfiguration.java => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/audit/AuditEventsEndpointAutoConfiguration.java (57%) rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/main/java/org/springframework/boot/actuate/autoconfigure/audit/package-info.java (93%) create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/beans/BeansEndpointAutoConfiguration.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/beans/package-info.java rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/main/java/org/springframework/boot/actuate/autoconfigure/cache/CacheStatisticsAutoConfiguration.java (100%) rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/main/java/org/springframework/boot/actuate/autoconfigure/cache/package-info.java (93%) create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cassandra/CassandraHealthIndicatorAutoConfiguration.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cassandra/package-info.java rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure}/cloudfoundry/AccessLevel.java (96%) rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure}/cloudfoundry/CloudFoundryActuatorAutoConfiguration.java (92%) rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure}/cloudfoundry/CloudFoundryAuthorizationException.java (96%) rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure}/cloudfoundry/CloudFoundrySecurityInterceptor.java (98%) rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure}/cloudfoundry/CloudFoundrySecurityService.java (96%) rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure}/cloudfoundry/CloudFoundryWebEndpointServletHandlerMapping.java (90%) rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure}/cloudfoundry/SkipSslVerificationHttpRequestFactory.java (97%) rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure}/cloudfoundry/Token.java (98%) rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure}/cloudfoundry/TokenValidator.java (96%) create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/package-info.java rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/condition}/AutoConfigurationReportEndpoint.java (96%) create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/condition/AutoConfigurationReportEndpointAutoConfiguration.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/condition/package-info.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/context/ShutdownEndpointAutoConfiguration.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/context/package-info.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/context/properties/ConfigurationPropertiesReportEndpointAutoConfiguration.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/context/properties/package-info.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/couchbase/CouchbaseHealthIndicatorAutoConfiguration.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/couchbase/package-info.java rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/health/ElasticsearchHealthIndicatorConfiguration.java => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/elasticsearch/ElasticsearchHealthIndicatorAutoConfiguration.java (65%) rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/elasticsearch}/ElasticsearchHealthIndicatorProperties.java (90%) create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/elasticsearch/package-info.java rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/CachingConfigurationFactory.java => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/DefaultCachingConfigurationFactory.java (57%) create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/EndpointAutoConfiguration.java rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/support => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint}/EndpointEnablement.java (95%) rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/support => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint}/EndpointEnablementProvider.java (97%) rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint}/EndpointProvider.java (83%) rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition}/ConditionalOnEnabledEndpoint.java (92%) rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition}/OnEnabledEndpointCondition.java (89%) rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx}/DefaultEndpointObjectNameFactory.java (94%) create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx/JmxEndpointAutoConfiguration.java rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx}/JmxEndpointExporter.java (88%) rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx}/JmxEndpointExporterProperties.java (99%) rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/package-info.java (92%) create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/jersey/JerseyWebEndpointManagementContextConfiguration.java rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/support => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web}/package-info.java (90%) create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/reactive/WebFluxEndpointManagementContextConfiguration.java rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/servlet}/CorsEndpointProperties.java (99%) create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/servlet/WebMvcEndpointManagementContextConfiguration.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/env/EnvironmentEndpointAutoConfiguration.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/env/package-info.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/flyway/FlywayEndpointAutoConfiguration.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/flyway/package-info.java rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/main/java/org/springframework/boot/actuate/autoconfigure/health/CompositeHealthIndicatorConfiguration.java (100%) rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/main/java/org/springframework/boot/actuate/autoconfigure/health/CompositeReactiveHealthIndicatorConfiguration.java (95%) rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/main/java/org/springframework/boot/actuate/autoconfigure/health/ConditionalOnEnabledHealthIndicator.java (100%) create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthEndpointAutoConfiguration.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorAutoConfiguration.java rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorProperties.java (100%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/HealthWebEndpointConfiguration.java => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthWebEndpointManagementContextConfiguration.java (83%) rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/main/java/org/springframework/boot/actuate/autoconfigure/health/OnEnabledHealthIndicatorCondition.java (84%) rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/main/java/org/springframework/boot/actuate/autoconfigure/health/package-info.java (93%) rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/main/java/org/springframework/boot/actuate/autoconfigure/info/ConditionalOnEnabledInfoContributor.java (100%) rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/main/java/org/springframework/boot/actuate/autoconfigure/info/InfoContributorAutoConfiguration.java (93%) rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/main/java/org/springframework/boot/actuate/autoconfigure/info/InfoContributorProperties.java (100%) create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/info/InfoEndpointAutoConfiguration.java rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/main/java/org/springframework/boot/actuate/autoconfigure/info/OnEnabledInfoContributorCondition.java (84%) rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/main/java/org/springframework/boot/actuate/autoconfigure/info/package-info.java (93%) create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/jdbc/DataSourceHealthIndicatorAutoConfiguration.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/jdbc/package-info.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/jms/JmsHealthIndicatorAutoConfiguration.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/jms/package-info.java rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/main/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaManagementContextConfiguration.java (94%) rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/main/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaProperties.java (100%) create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/jolokia/package-info.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/ldap/LdapHealthIndicatorAutoConfiguration.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/ldap/package-info.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/liquibase/LiquibaseEndpointAutoConfiguration.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/liquibase/package-info.java rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/WebEndpointManagementContextConfiguration.java => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/LogFileWebEndpointManagementContextConfiguration.java (75%) create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/LoggersEndpointAutoConfiguration.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/package-info.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/mail/MailHealthIndicatorAutoConfiguration.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/mail/package-info.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/management/HeapDumpWebEndpointManagementContextConfiguration.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/management/ThreadDumpEndpointAutoConfiguration.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/management/package-info.java rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/ActuatorMetricWriter.java (100%) rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/ExportMetricReader.java (100%) rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/ExportMetricWriter.java (100%) rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricExportAutoConfiguration.java (98%) rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricFilterAutoConfiguration.java (100%) rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricFilterProperties.java (100%) rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricRepositoryAutoConfiguration.java (100%) rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsChannelAutoConfiguration.java (100%) rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsDropwizardAutoConfiguration.java (97%) create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsEndpointAutoConfiguration.java rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/PublicMetricsAutoConfiguration.java (87%) rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/package-info.java (92%) create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/mongo/MongoHealthIndicatorAutoConfiguration.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/mongo/package-info.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/neo4j/Neo4jHealthIndicatorAutoConfiguration.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/neo4j/package-info.java rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/main/java/org/springframework/boot/actuate/autoconfigure/package-info.java (91%) create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/redis/RedisHealthIndicatorAutoConfiguration.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/redis/RedisHealthIndicatorConfiguration.java rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/health/ReactiveHealthIndicatorsConfiguration.java => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/redis/RedisReactiveHealthIndicatorConfiguration.java (54%) create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/redis/package-info.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/solr/SolrHealthIndicatorAutoConfiguration.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/solr/package-info.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/system/DiskSpaceHealthIndicatorAutoConfiguration.java rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/system}/DiskSpaceHealthIndicatorProperties.java (92%) create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/system/package-info.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/TraceEndpointAutoConfiguration.java rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/TraceRepositoryAutoConfiguration.java (100%) rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/TraceWebFilterAutoConfiguration.java (97%) rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/package-info.java (92%) rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web}/ManagementContextConfiguration.java (91%) rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web}/ManagementContextFactory.java (84%) rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web}/ManagementContextType.java (94%) create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/jersey/JerseyManagementChildContextConfiguration.java rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/ReactiveEndpointChildManagementContextConfiguration.java => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/reactive/ReactiveManagementChildContextConfiguration.java (64%) create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/reactive/ReactiveManagementContextAutoConfiguration.java rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ReactiveWebManagementContextFactory.java => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/reactive/ReactiveManagementContextFactory.java (85%) rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server}/ConditionalOnManagementPort.java (93%) rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server}/EnableChildManagementContextConfiguration.java (86%) rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server}/EnableManagementContext.java (89%) rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure}/web/server/LocalManagementPort.java (94%) rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server}/ManagementContextAutoConfiguration.java (85%) rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server}/ManagementContextConfigurationImportSelector.java (93%) rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server}/ManagementPortType.java (96%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/ManagementWebServerFactoryCustomizer.java => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerFactoryCustomizer.java (72%) rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/web => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server}/ManagementServerProperties.java (97%) rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server}/OnManagementPortCondition.java (93%) rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure}/web/server/package-info.java (90%) create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/CompositeHandlerAdapter.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/CompositeHandlerExceptionResolver.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/CompositeHandlerMapping.java rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet}/ManagementErrorEndpoint.java (88%) rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet}/ManagementServletContext.java (91%) rename {spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet}/RequestMappingEndpoint.java (95%) create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/RequestMappingEndpointAutoConfiguration.java create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementChildContextConfiguration.java rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/ServletEndpointAutoConfiguration.java => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementContextAutoConfiguration.java (53%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ServletWebManagementContextFactory.java => spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementContextFactory.java (87%) create mode 100644 spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/WebMvcEndpointChildContextConfiguration.java rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/main/resources/META-INF/additional-spring-configuration-metadata.json (100%) create mode 100644 spring-boot-actuator-autoconfigure/src/main/resources/META-INF/spring.factories rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/test/java/org/springframework/boot/actuate/autoconfigure/SpringApplicationHierarchyTests.java (93%) create mode 100644 spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/amqp/RabbitHealthIndicatorAutoConfigurationTests.java rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/test/java/org/springframework/boot/actuate/autoconfigure/audit/AuditAutoConfigurationTests.java (100%) create mode 100644 spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/audit/AuditEventsEndpointAutoConfigurationTests.java create mode 100644 spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/beans/BeansEndpointAutoConfigurationTests.java rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/test/java/org/springframework/boot/actuate/autoconfigure/cache/CacheStatisticsAutoConfigurationTests.java (100%) create mode 100644 spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cassandra/CassandraHealthIndicatorAutoConfigurationTests.java rename {spring-boot-actuator/src/test/java/org/springframework/boot/actuate => spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure}/cloudfoundry/AccessLevelTests.java (96%) rename {spring-boot-actuator/src/test/java/org/springframework/boot/actuate => spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure}/cloudfoundry/AuthorizationExceptionMatcher.java (87%) rename {spring-boot-actuator/src/test/java/org/springframework/boot/actuate => spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure}/cloudfoundry/CloudFoundryActuatorAutoConfigurationTests.java (93%) rename {spring-boot-actuator/src/test/java/org/springframework/boot/actuate => spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure}/cloudfoundry/CloudFoundryAuthorizationExceptionTests.java (94%) rename {spring-boot-actuator/src/test/java/org/springframework/boot/actuate => spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure}/cloudfoundry/CloudFoundryMvcWebEndpointIntegrationTests.java (93%) rename {spring-boot-actuator/src/test/java/org/springframework/boot/actuate => spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure}/cloudfoundry/CloudFoundrySecurityInterceptorTests.java (97%) rename {spring-boot-actuator/src/test/java/org/springframework/boot/actuate => spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure}/cloudfoundry/CloudFoundrySecurityServiceTests.java (98%) rename {spring-boot-actuator/src/test/java/org/springframework/boot/actuate => spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure}/cloudfoundry/SkipSslVerificationHttpRequestFactoryTests.java (97%) rename {spring-boot-actuator/src/test/java/org/springframework/boot/actuate => spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure}/cloudfoundry/TokenTests.java (96%) rename {spring-boot-actuator/src/test/java/org/springframework/boot/actuate => spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure}/cloudfoundry/TokenValidatorTests.java (98%) create mode 100644 spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/condition/AutoConfigurationReportEndpointAutoConfigurationTests.java rename {spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint => spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/condition}/AutoConfigurationReportEndpointTests.java (94%) create mode 100644 spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/context/ShutdownEndpointAutoConfigurationTests.java create mode 100644 spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/context/properties/ConfigurationPropertiesReportEndpointAutoConfigurationTests.java create mode 100644 spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/couchbase/CouchbaseHealthIndicatorAutoConfigurationTests.java create mode 100644 spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/elasticsearch/ElasticsearchHealthIndicatorAutoConfigurationTests.java rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/CachingConfigurationFactoryTests.java => spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/DefaultCachingConfigurationFactoryTests.java (67%) rename {spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/support => spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint}/EndpointEnablementProviderTests.java (98%) rename {spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint => spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition}/ConditionalOnEnabledEndpointTests.java (96%) rename {spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure => spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx}/DefaultEndpointObjectNameFactoryTests.java (98%) create mode 100644 spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/env/EnvironmentEndpointAutoConfigurationTests.java create mode 100644 spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/flyway/FlywayEndpointAutoConfigurationTests.java rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/EndpointAutoConfigurationTests.java => spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthEndpointAutoConfigurationTests.java (81%) create mode 100644 spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorAutoConfigurationTests.java create mode 100644 spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthWebEndpointReactiveManagementContextConfigurationTests.java create mode 100644 spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthWebEndpointServletManagementContextConfigurationTests.java rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/test/java/org/springframework/boot/actuate/autoconfigure/info/InfoContributorAutoConfigurationTests.java (100%) create mode 100644 spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/info/InfoEndpointAutoConfigurationTests.java create mode 100644 spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/EndpointAutoConfigurationClasses.java rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/JmxEndpointInfrastructureAutoConfigurationTests.java => spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/JmxEndpointIntegrationTests.java (91%) rename {spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/jolokia => spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest}/JolokiaManagementContextConfigurationIntegrationTests.java (87%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/WebEndpointAutoConfigurationIntegrationTests.java => spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebEndpointsAutoConfigurationIntegrationTests.java (89%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/mvc/MvcEndpointCorsIntegrationTests.java => spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebMvcEndpointCorsIntegrationTests.java (91%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/WebMvcEndpointInfrastructureAutoConfigurationTests.java => spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebMvcEndpointExposureIntegrationTests.java (87%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/mvc/MvcEndpointIntegrationTests.java => spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebMvcEndpointIntegrationTests.java (90%) create mode 100644 spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/jdbc/DataSourceHealthIndicatorAutoConfigurationTests.java create mode 100644 spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/jms/JmsHealthIndicatorAutoConfigurationTests.java rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/test/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaManagementContextConfigurationTests.java (91%) create mode 100644 spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/ldap/LdapHealthIndicatorAutoConfigurationTests.java create mode 100644 spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/liquibase/LiquibaseEndpointAutoConfigurationTests.java create mode 100644 spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/logging/LogFileWebEndpointManagementContextConfigurationTests.java create mode 100644 spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/logging/LoggersEndpointAutoConfigurationTests.java create mode 100644 spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/mail/MailHealthIndicatorAutoConfigurationTests.java create mode 100644 spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/management/HeapDumpWebEndpointManagementContextConfigurationTests.java create mode 100644 spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/management/ThreadDumpEndpointAutoConfigurationTests.java rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricExportAutoConfigurationTests.java (98%) rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricFilterAutoConfigurationTests.java (100%) rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricRepositoryAutoConfigurationTests.java (100%) rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsDropwizardAutoConfigurationTests.java (100%) create mode 100644 spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsEndpointAutoConfigurationTests.java rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/PublicMetricsAutoConfigurationTests.java (94%) create mode 100644 spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/mongo/MongoHealthIndicatorAutoConfigurationTests.java create mode 100644 spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/neo4j/Neo4jHealthIndicatorAutoConfigurationTests.java create mode 100644 spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/redis/RedisHealthIndicatorAutoConfigurationTests.java create mode 100644 spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/redis/RedisReactiveHealthIndicatorConfigurationTests.java create mode 100644 spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/solr/SolrHealthIndicatorAutoConfigurationTests.java create mode 100644 spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/system/DiskSpaceHealthIndicatorAutoConfigurationTests.java create mode 100644 spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/trace/TraceEndpointAutoConfigurationTests.java rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/test/java/org/springframework/boot/actuate/autoconfigure/trace/TraceRepositoryAutoConfigurationTests.java (100%) rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/test/java/org/springframework/boot/actuate/autoconfigure/trace/TraceWebFilterAutoConfigurationTests.java (100%) rename {spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure => spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/server}/ManagementContextConfigurationImportSelectorTests.java (93%) rename {spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/web => spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/server}/ManagementServerPropertiesTests.java (97%) rename {spring-boot-actuator/src/test/java/org/springframework/boot/actuate => spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web}/servlet/MockServletWebServerFactory.java (97%) rename {spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint => spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/servlet}/RequestMappingEndpointTests.java (89%) rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/test/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReaderNoJmxTests.java (96%) rename {spring-boot-actuator => spring-boot-actuator-autoconfigure}/src/test/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReaderTests.java (97%) create mode 100644 spring-boot-actuator-autoconfigure/src/test/resources/actuator-docs-index.html create mode 100644 spring-boot-actuator-autoconfigure/src/test/resources/cache/test-ehcache.xml create mode 100644 spring-boot-actuator-autoconfigure/src/test/resources/cache/test-hazelcast.xml create mode 100644 spring-boot-actuator-autoconfigure/src/test/resources/cache/test-infinispan.xml create mode 100644 spring-boot-actuator-autoconfigure/src/test/resources/db/changelog/db.changelog-master.yaml create mode 100644 spring-boot-actuator-autoconfigure/src/test/resources/db/create-custom-schema.sql create mode 100644 spring-boot-actuator-autoconfigure/src/test/resources/db/migration/V1__init.sql create mode 100644 spring-boot-actuator-autoconfigure/src/test/resources/git.properties create mode 100644 spring-boot-actuator-autoconfigure/src/test/resources/hazelcast.xml create mode 100644 spring-boot-actuator-autoconfigure/src/test/resources/log4j2-test.xml create mode 100644 spring-boot-actuator-autoconfigure/src/test/resources/test.jks rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{health => amqp}/RabbitHealthIndicator.java (86%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{endpoint => audit}/AuditEventsEndpoint.java (86%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{endpoint/jmx => audit}/AuditEventsJmxEndpointExtension.java (80%) delete mode 100644 spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/EndpointAutoConfiguration.java delete mode 100644 spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/ManagementContextResolver.java delete mode 100644 spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/ManagementEndpointPathResolver.java delete mode 100644 spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/EndpointInfrastructureAutoConfiguration.java delete mode 100644 spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/ServletEndpointChildManagementContextConfiguration.java delete mode 100644 spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/WebEndpointHandlerMappingCustomizer.java delete mode 100644 spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/WebEndpointInfrastructureManagementContextConfiguration.java delete mode 100644 spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/package-info.java delete mode 100644 spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/package-info.java delete mode 100644 spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorAutoConfiguration.java delete mode 100644 spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorsConfiguration.java delete mode 100644 spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/security/ManagementWebSecurityAutoConfiguration.java delete mode 100644 spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/web/package-info.java rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{endpoint => beans}/BeansEndpoint.java (96%) rename {spring-boot/src/main/java/org/springframework/boot/endpoint => spring-boot-actuator/src/main/java/org/springframework/boot/actuate/beans}/package-info.java (87%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{endpoint => cache}/CachePublicMetrics.java (96%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{health => cassandra}/CassandraHealthIndicator.java (88%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{endpoint => context}/ShutdownEndpoint.java (91%) rename {spring-boot/src/main/java/org/springframework/boot/endpoint/jmx => spring-boot-actuator/src/main/java/org/springframework/boot/actuate/context}/package-info.java (86%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{endpoint => context/properties}/ConfigurationPropertiesReportEndpoint.java (98%) create mode 100644 spring-boot-actuator/src/main/java/org/springframework/boot/actuate/context/properties/package-info.java rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{health => couchbase}/CouchbaseHealthIndicator.java (82%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{health => elasticsearch}/ElasticsearchHealthIndicator.java (54%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{health => elasticsearch}/ElasticsearchJestHealthIndicator.java (83%) rename {spring-boot/src/main/java/org/springframework/boot => spring-boot-actuator/src/main/java/org/springframework/boot/actuate}/endpoint/EndpointDiscoverer.java (95%) rename {spring-boot/src/main/java/org/springframework/boot => spring-boot-actuator/src/main/java/org/springframework/boot/actuate}/endpoint/EndpointInfo.java (97%) rename {spring-boot/src/main/java/org/springframework/boot => spring-boot-actuator/src/main/java/org/springframework/boot/actuate}/endpoint/Operation.java (97%) rename {spring-boot/src/main/java/org/springframework/boot => spring-boot-actuator/src/main/java/org/springframework/boot/actuate}/endpoint/OperationInvoker.java (95%) rename {spring-boot/src/main/java/org/springframework/boot => spring-boot-actuator/src/main/java/org/springframework/boot/actuate}/endpoint/OperationParameterMapper.java (96%) rename {spring-boot/src/main/java/org/springframework/boot => spring-boot-actuator/src/main/java/org/springframework/boot/actuate}/endpoint/OperationType.java (94%) rename {spring-boot/src/main/java/org/springframework/boot => spring-boot-actuator/src/main/java/org/springframework/boot/actuate}/endpoint/ParameterMappingException.java (96%) rename {spring-boot/src/main/java/org/springframework/boot => spring-boot-actuator/src/main/java/org/springframework/boot/actuate}/endpoint/ReflectiveOperationInvoker.java (97%) rename {spring-boot/src/main/java/org/springframework/boot/endpoint => spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation}/AnnotationEndpointDiscoverer.java (94%) rename {spring-boot/src/main/java/org/springframework/boot/endpoint => spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation}/DeleteOperation.java (95%) rename {spring-boot/src/main/java/org/springframework/boot/endpoint => spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation}/Endpoint.java (92%) rename {spring-boot/src/main/java/org/springframework/boot/endpoint => spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation}/EndpointExposure.java (94%) rename {spring-boot/src/main/java/org/springframework/boot/endpoint => spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation}/ReadOperation.java (95%) rename {spring-boot/src/main/java/org/springframework/boot/endpoint => spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation}/Selector.java (94%) rename {spring-boot/src/main/java/org/springframework/boot/endpoint => spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation}/WriteOperation.java (95%) create mode 100644 spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation/package-info.java rename {spring-boot/src/main/java/org/springframework/boot/endpoint => spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/cache}/CachingConfiguration.java (95%) rename spring-boot/src/main/java/org/springframework/boot/endpoint/EndpointPathResolver.java => spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/cache/CachingConfigurationFactory.java (61%) rename {spring-boot/src/main/java/org/springframework/boot/endpoint => spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/cache}/CachingOperationInvoker.java (95%) create mode 100644 spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/cache/package-info.java rename {spring-boot/src/main/java/org/springframework/boot/endpoint => spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/convert}/ConversionServiceOperationParameterMapper.java (70%) create mode 100644 spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/convert/IsoOffsetDateTimeConverter.java create mode 100644 spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/convert/package-info.java rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{autoconfigure/endpoint/infrastructure/ActuatorMediaTypes.java => endpoint/http/ActuatorMediaType.java} (57%) create mode 100644 spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/http/package-info.java rename {spring-boot/src/main/java/org/springframework/boot => spring-boot-actuator/src/main/java/org/springframework/boot/actuate}/endpoint/jmx/EndpointMBean.java (97%) rename {spring-boot/src/main/java/org/springframework/boot => spring-boot-actuator/src/main/java/org/springframework/boot/actuate}/endpoint/jmx/EndpointMBeanInfo.java (89%) rename {spring-boot/src/main/java/org/springframework/boot => spring-boot-actuator/src/main/java/org/springframework/boot/actuate}/endpoint/jmx/EndpointMBeanInfoAssembler.java (96%) rename {spring-boot/src/main/java/org/springframework/boot => spring-boot-actuator/src/main/java/org/springframework/boot/actuate}/endpoint/jmx/EndpointMBeanRegistrar.java (98%) rename {spring-boot/src/main/java/org/springframework/boot => spring-boot-actuator/src/main/java/org/springframework/boot/actuate}/endpoint/jmx/EndpointObjectNameFactory.java (95%) rename {spring-boot/src/main/java/org/springframework/boot => spring-boot-actuator/src/main/java/org/springframework/boot/actuate}/endpoint/jmx/JmxEndpointMBeanFactory.java (94%) rename {spring-boot/src/main/java/org/springframework/boot => spring-boot-actuator/src/main/java/org/springframework/boot/actuate}/endpoint/jmx/JmxEndpointOperation.java (91%) rename {spring-boot/src/main/java/org/springframework/boot => spring-boot-actuator/src/main/java/org/springframework/boot/actuate}/endpoint/jmx/JmxEndpointOperationParameterInfo.java (96%) rename {spring-boot/src/main/java/org/springframework/boot => spring-boot-actuator/src/main/java/org/springframework/boot/actuate}/endpoint/jmx/JmxOperationResponseMapper.java (95%) rename {spring-boot/src/main/java/org/springframework/boot/endpoint/jmx => spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/annotation}/JmxAnnotationEndpointDiscoverer.java (86%) rename {spring-boot/src/main/java/org/springframework/boot/endpoint/jmx => spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/annotation}/JmxEndpointExtension.java (90%) create mode 100644 spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/annotation/package-info.java delete mode 100644 spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/package-info.java rename {spring-boot/src/main/java/org/springframework/boot => spring-boot-actuator/src/main/java/org/springframework/boot/actuate}/endpoint/web/EndpointLinksResolver.java (94%) rename {spring-boot/src/main/java/org/springframework/boot => spring-boot-actuator/src/main/java/org/springframework/boot/actuate}/endpoint/web/Link.java (96%) rename {spring-boot/src/main/java/org/springframework/boot => spring-boot-actuator/src/main/java/org/springframework/boot/actuate}/endpoint/web/OperationRequestPredicate.java (98%) rename {spring-boot/src/main/java/org/springframework/boot => spring-boot-actuator/src/main/java/org/springframework/boot/actuate}/endpoint/web/WebEndpointHttpMethod.java (94%) rename {spring-boot/src/main/java/org/springframework/boot => spring-boot-actuator/src/main/java/org/springframework/boot/actuate}/endpoint/web/WebEndpointOperation.java (89%) rename {spring-boot/src/main/java/org/springframework/boot => spring-boot-actuator/src/main/java/org/springframework/boot/actuate}/endpoint/web/WebEndpointResponse.java (93%) rename {spring-boot/src/main/java/org/springframework/boot/endpoint/web => spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/annotation}/WebAnnotationEndpointDiscoverer.java (86%) rename {spring-boot/src/main/java/org/springframework/boot/endpoint/web => spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/annotation}/WebEndpointExtension.java (90%) create mode 100644 spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/annotation/package-info.java rename {spring-boot/src/main/java/org/springframework/boot => spring-boot-actuator/src/main/java/org/springframework/boot/actuate}/endpoint/web/jersey/JerseyEndpointResourceFactory.java (91%) create mode 100644 spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/jersey/package-info.java rename {spring-boot/src/main/java/org/springframework/boot/endpoint/web/jersey => spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web}/package-info.java (87%) rename spring-boot/src/main/java/org/springframework/boot/endpoint/web/reactive/WebEndpointReactiveHandlerMapping.java => spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/reactive/WebFluxEndpointHandlerMapping.java (90%) create mode 100644 spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/reactive/package-info.java rename spring-boot/src/main/java/org/springframework/boot/endpoint/web/mvc/AbstractWebEndpointServletHandlerMapping.java => spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/servlet/AbstractWebMvcEndpointHandlerMapping.java (90%) rename spring-boot/src/main/java/org/springframework/boot/endpoint/web/mvc/WebEndpointServletHandlerMapping.java => spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/servlet/WebMvcEndpointHandlerMapping.java (81%) create mode 100644 spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/servlet/package-info.java rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{endpoint => env}/EnvironmentEndpoint.java (93%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{endpoint => flyway}/FlywayEndpoint.java (83%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{endpoint => health}/HealthEndpoint.java (80%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{endpoint/web => health}/HealthReactiveWebEndpointExtension.java (74%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{endpoint/web => health}/HealthWebEndpointExtension.java (77%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{endpoint => health}/StatusEndpoint.java (77%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{endpoint/web => health}/StatusReactiveWebEndpointExtension.java (74%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{endpoint/web => health}/StatusWebEndpointExtension.java (75%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{endpoint => info}/InfoEndpoint.java (85%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{health => jdbc}/DataSourceHealthIndicator.java (95%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{health => jms}/JmsHealthIndicator.java (83%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{health => ldap}/LdapHealthIndicator.java (88%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{endpoint => liquibase}/LiquibaseEndpoint.java (91%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{endpoint/web => logger}/LogFileWebEndpoint.java (90%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{endpoint => logging}/LoggersEndpoint.java (90%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{health => mail}/MailHealthIndicator.java (82%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{endpoint/web => management}/HeapDumpWebEndpoint.java (95%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{endpoint => management}/ThreadDumpEndpoint.java (87%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{endpoint => metrics}/DataSourcePublicMetrics.java (91%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{endpoint => metrics}/MetricsEndpoint.java (91%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{endpoint => metrics}/PublicMetrics.java (92%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{endpoint => metrics}/SystemPublicMetrics.java (98%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{endpoint => metrics}/TomcatPublicMetrics.java (96%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{endpoint => metrics/reader}/MetricReaderPublicMetrics.java (91%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{endpoint => metrics/reader}/MetricsEndpointMetricReader.java (93%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{endpoint => metrics/rich}/RichGaugeReaderPublicMetrics.java (91%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{health => mongo}/MongoHealthIndicator.java (84%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{health => neo4j}/Neo4jHealthIndicator.java (87%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{health => redis}/RedisHealthIndicator.java (88%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{health => redis}/RedisReactiveHealthIndicator.java (72%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{health => solr}/SolrHealthIndicator.java (83%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{health => system}/DiskSpaceHealthIndicator.java (60%) rename spring-boot-actuator/src/main/java/org/springframework/boot/actuate/{endpoint => trace}/TraceEndpoint.java (85%) delete mode 100644 spring-boot-actuator/src/main/resources/META-INF/spring.factories create mode 100644 spring-boot-actuator/src/test/java/org/springframework/boot/actuate/amqp/RabbitHealthIndicatorTests.java rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint => audit}/AuditEventsEndpointTests.java (92%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint/web => audit}/AuditEventsEndpointWebIntegrationTests.java (90%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint/jmx => audit}/AuditEventsJmxEndpointExtensionTests.java (89%) delete mode 100644 spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/ManagementEndpointPathResolverTests.java delete mode 100644 spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx/JmxEndpointAutoConfigurationTests.java delete mode 100644 spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/WebEndpointManagementContextConfigurationTests.java delete mode 100644 spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorAutoConfigurationTests.java delete mode 100644 spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorsConfigurationTests.java delete mode 100644 spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/health/ReactiveHealthIndicatorsConfigurationTests.java rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint => beans}/BeansEndpointTests.java (95%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint => cache}/CachePublicMetricsTests.java (92%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint => context}/ShutdownEndpointTests.java (98%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint => context/properties}/ConfigurationPropertiesReportEndpointMethodAnnotationsTests.java (92%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint => context/properties}/ConfigurationPropertiesReportEndpointParentTests.java (95%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint => context/properties}/ConfigurationPropertiesReportEndpointProxyTests.java (90%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint => context/properties}/ConfigurationPropertiesReportEndpointSerializationTests.java (97%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint => context/properties}/ConfigurationPropertiesReportEndpointTests.java (96%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{health => elasticsearch}/ElasticsearchHealthIndicatorTests.java (95%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{health => elasticsearch}/ElasticsearchJestHealthIndicatorTests.java (94%) rename {spring-boot/src/test/java/org/springframework/boot/endpoint => spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/annotation}/AnnotationEndpointDiscovererTests.java (94%) rename {spring-boot/src/test/java/org/springframework/boot/endpoint => spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/cache}/CachingOperationInvokerTests.java (95%) create mode 100644 spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/convert/ConversionServiceOperationParameterMapperTests.java create mode 100644 spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/convert/IsoOffsetDateTimeConverterTests.java rename {spring-boot/src/test/java/org/springframework/boot => spring-boot-actuator/src/test/java/org/springframework/boot/actuate}/endpoint/jmx/EndpointMBeanInfoAssemblerTests.java (95%) rename {spring-boot/src/test/java/org/springframework/boot => spring-boot-actuator/src/test/java/org/springframework/boot/actuate}/endpoint/jmx/EndpointMBeanRegistrarTests.java (98%) rename {spring-boot/src/test/java/org/springframework/boot => spring-boot-actuator/src/test/java/org/springframework/boot/actuate}/endpoint/jmx/EndpointMBeanTests.java (94%) rename {spring-boot/src/test/java/org/springframework/boot/endpoint/jmx => spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/jmx/annotation}/JmxAnnotationEndpointDiscovererTests.java (94%) rename {spring-boot/src/test/java/org/springframework/boot => spring-boot-actuator/src/test/java/org/springframework/boot/actuate}/endpoint/web/AbstractWebEndpointIntegrationTests.java (93%) rename {spring-boot/src/test/java/org/springframework/boot => spring-boot-actuator/src/test/java/org/springframework/boot/actuate}/endpoint/web/EndpointLinksResolverTests.java (94%) rename {spring-boot/src/test/java/org/springframework/boot => spring-boot-actuator/src/test/java/org/springframework/boot/actuate}/endpoint/web/OperationRequestPredicateTests.java (97%) rename {spring-boot/src/test/java/org/springframework/boot => spring-boot-actuator/src/test/java/org/springframework/boot/actuate}/endpoint/web/WebAnnotationEndpointDiscovererTests.java (93%) delete mode 100644 spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/WebEndpointsRunner.java rename {spring-boot/src/test/java/org/springframework/boot => spring-boot-actuator/src/test/java/org/springframework/boot/actuate}/endpoint/web/jersey/JerseyWebEndpointIntegrationTests.java (92%) rename spring-boot/src/test/java/org/springframework/boot/endpoint/web/reactive/ReactiveWebEndpointIntegrationTests.java => spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/reactive/WebFluxEndpointIntegrationTests.java (88%) rename {spring-boot/src/test/java/org/springframework/boot/endpoint/web/mvc => spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/servlet}/MvcWebEndpointIntegrationTests.java (89%) create mode 100644 spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/test/AbstractWebEndpointRunner.java rename spring-boot-actuator/src/{main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx/package-info.java => test/java/org/springframework/boot/actuate/endpoint/web/test/ContextFactory.java} (66%) create mode 100644 spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/test/JerseyEndpointsRunner.java rename spring-boot-actuator/src/{main/java/org/springframework/boot/actuate/autoconfigure/security/package-info.java => test/java/org/springframework/boot/actuate/endpoint/web/test/PortHolder.java} (76%) create mode 100644 spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/test/WebEndpointRunners.java create mode 100644 spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/test/WebFluxEndpointsRunner.java create mode 100644 spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/test/WebMvcEndpointRunner.java rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint => env}/EnvironmentEndpointTests.java (92%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint/web => env}/EnvironmentEndpointWebIntegrationTests.java (96%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint => flyway}/FlywayEndpointTests.java (96%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint => health}/HealthEndpointTests.java (84%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint/web => health}/HealthEndpointWebIntegrationTests.java (86%) delete mode 100644 spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/RabbitHealthIndicatorTests.java rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint => health}/StatusEndpointTests.java (81%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint/web => health}/StatusEndpointWebIntegrationTests.java (85%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint => info}/InfoEndpointTests.java (96%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint/web => info}/InfoEndpointWebIntegrationTests.java (91%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{health => jdbc}/DataSourceHealthIndicatorTests.java (95%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{health => jms}/JmsHealthIndicatorTests.java (94%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{health => ldap}/LdapHealthIndicatorTests.java (72%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint => liquibase}/LiquibaseEndpointTests.java (97%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint/web => logger}/LogFileWebEndpointTests.java (97%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint/web => logger}/LogFileWebEndpointWebIntegrationTests.java (93%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint => logger}/LoggersEndpointTests.java (94%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint/web => logger}/LoggersEndpointWebIntegrationTests.java (91%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{health => mail}/MailHealthIndicatorTests.java (93%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint/web => management}/HeapDumpWebEndpointTests.java (96%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint/web => management}/HeapDumpWebEndpointWebIntegrationTests.java (95%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint => management}/ThreadDumpEndpointTests.java (94%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint/web => metrics}/MetricsEndpointMvcIntegrationTests.java (94%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint => metrics}/MetricsEndpointTests.java (97%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint => metrics}/SystemPublicMetricsTests.java (95%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint => metrics}/TomcatPublicMetricsTests.java (94%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint => metrics/reader}/MetricReaderPublicMetricsTests.java (92%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint => metrics/rich}/RichGaugeReaderPublicMetricsTests.java (94%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{health => mongo}/MongoHealthIndicatorTests.java (71%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{health => neo4j}/Neo4jHealthIndicatorTests.java (94%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{health => redis}/RedisHealthIndicatorTests.java (96%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{health => redis}/RedisReactiveHealthIndicatorTests.java (95%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{health => solr}/SolrHealthIndicatorTests.java (77%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{health => system}/DiskSpaceHealthIndicatorTests.java (85%) rename spring-boot-actuator/src/test/java/org/springframework/boot/actuate/{endpoint => trace}/TraceEndpointTests.java (83%) delete mode 100644 spring-boot/src/main/java/org/springframework/boot/endpoint/DefaultEndpointPathResolver.java delete mode 100644 spring-boot/src/main/java/org/springframework/boot/endpoint/web/mvc/package-info.java delete mode 100644 spring-boot/src/main/java/org/springframework/boot/endpoint/web/package-info.java delete mode 100644 spring-boot/src/main/java/org/springframework/boot/endpoint/web/reactive/package-info.java rename {spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure => spring-boot/src/main/java/org/springframework/boot}/jdbc/DataSourceBuilder.java (97%) rename {spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure => spring-boot/src/main/java/org/springframework/boot}/jdbc/metadata/AbstractDataSourcePoolMetadata.java (91%) rename {spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure => spring-boot/src/main/java/org/springframework/boot}/jdbc/metadata/CommonsDbcp2DataSourcePoolMetadata.java (90%) rename {spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure => spring-boot/src/main/java/org/springframework/boot}/jdbc/metadata/DataSourcePoolMetadata.java (94%) rename {spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure => spring-boot/src/main/java/org/springframework/boot}/jdbc/metadata/DataSourcePoolMetadataProvider.java (93%) rename {spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure => spring-boot/src/main/java/org/springframework/boot}/jdbc/metadata/DataSourcePoolMetadataProviders.java (96%) rename {spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure => spring-boot/src/main/java/org/springframework/boot}/jdbc/metadata/HikariDataSourcePoolMetadata.java (92%) rename {spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure => spring-boot/src/main/java/org/springframework/boot}/jdbc/metadata/TomcatDataSourcePoolMetadata.java (91%) rename {spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure => spring-boot/src/main/java/org/springframework/boot}/web/servlet/error/DefaultErrorAttributes.java (98%) rename {spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure => spring-boot/src/main/java/org/springframework/boot}/web/servlet/error/ErrorAttributes.java (95%) rename {spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure => spring-boot/src/main/java/org/springframework/boot}/web/servlet/error/ErrorController.java (93%) delete mode 100644 spring-boot/src/test/java/org/springframework/boot/endpoint/DefaultEndpointPathResolverTests.java rename {spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure => spring-boot/src/test/java/org/springframework/boot}/jdbc/DataSourceBuilderTests.java (74%) rename {spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure => spring-boot/src/test/java/org/springframework/boot}/jdbc/metadata/AbstractDataSourcePoolMetadataTests.java (95%) rename {spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure => spring-boot/src/test/java/org/springframework/boot}/jdbc/metadata/CommonsDbcp2DataSourcePoolMetadataTests.java (95%) rename {spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure => spring-boot/src/test/java/org/springframework/boot}/jdbc/metadata/DataSourcePoolMetadataProvidersTests.java (94%) rename {spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure => spring-boot/src/test/java/org/springframework/boot}/jdbc/metadata/HikariDataSourcePoolMetadataTests.java (93%) rename {spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure => spring-boot/src/test/java/org/springframework/boot}/jdbc/metadata/TomcatDataSourcePoolMetadataTests.java (94%) rename {spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure => spring-boot/src/test/java/org/springframework/boot}/web/servlet/error/DefaultErrorAttributesTests.java (99%) diff --git a/pom.xml b/pom.xml index 958a31a8ba..6ff2420af2 100644 --- a/pom.xml +++ b/pom.xml @@ -83,6 +83,7 @@ spring-boot-autoconfigure spring-boot-test-autoconfigure spring-boot-actuator + spring-boot-actuator-autoconfigure spring-boot-devtools spring-boot-docs spring-boot-starters diff --git a/spring-boot-actuator-autoconfigure/pom.xml b/spring-boot-actuator-autoconfigure/pom.xml new file mode 100644 index 0000000000..e4d4f108fe --- /dev/null +++ b/spring-boot-actuator-autoconfigure/pom.xml @@ -0,0 +1,373 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-parent + 2.0.0.BUILD-SNAPSHOT + ../spring-boot-parent + + spring-boot-actuator-autoconfigure + Spring Boot Actuator AutoConfigure + Spring Boot Actuator AutoConfigure + http://projects.spring.io/spring-boot/ + + Pivotal Software, Inc. + http://www.spring.io + + + ${basedir}/.. + + + + + org.springframework.boot + spring-boot-actuator + + + org.springframework.boot + spring-boot-autoconfigure + + + com.fasterxml.jackson.core + jackson-databind + + + org.springframework + spring-core + + + org.springframework + spring-context + + + + com.fasterxml.jackson.dataformat + jackson-dataformat-xml + true + + + com.github.ben-manes.caffeine + caffeine + true + + + com.hazelcast + hazelcast + true + + + com.hazelcast + hazelcast-spring + true + + + com.sun.mail + javax.mail + true + + + com.timgroup + java-statsd-client + true + + + com.zaxxer + HikariCP + true + + + io.dropwizard.metrics + metrics-core + true + + + io.lettuce + lettuce-core + true + + + io.searchbox + jest + true + + + javax.cache + cache-api + true + + + javax.jms + javax.jms-api + true + + + javax.servlet + javax.servlet-api + true + + + net.sf.ehcache + ehcache + true + + + org.apache.activemq + activemq-broker + true + + + geronimo-jms_1.1_spec + org.apache.geronimo.specs + + + + + org.apache.commons + commons-dbcp2 + true + + + org.apache.tomcat.embed + tomcat-embed-core + true + + + org.apache.tomcat.embed + tomcat-embed-el + true + + + org.apache.tomcat + tomcat-jdbc + true + + + org.elasticsearch + elasticsearch + true + + + org.flywaydb + flyway-core + true + + + org.glassfish.jersey.core + jersey-server + true + + + org.glassfish.jersey.containers + jersey-container-servlet-core + true + + + org.hibernate + hibernate-validator + true + + + org.jolokia + jolokia-core + true + + + org.infinispan + infinispan-spring4-embedded + true + + + org.liquibase + liquibase-core + true + + + org.springframework + spring-jdbc + true + + + org.springframework + spring-messaging + true + + + org.springframework + spring-webflux + true + + + org.springframework + spring-webmvc + true + + + org.springframework.amqp + spring-rabbit + true + + + org.springframework.data + spring-data-cassandra + true + + + org.springframework.data + spring-data-couchbase + true + + + org.springframework.data + spring-data-ldap + true + + + org.springframework.data + spring-data-mongodb + true + + + org.springframework.data + spring-data-neo4j + true + + + org.springframework.data + spring-data-redis + true + + + org.springframework.data + spring-data-solr + true + + + + wstx-asl + org.codehaus.woodstox + + + + + org.springframework.integration + spring-integration-core + true + + + org.springframework.security + spring-security-config + true + + + org.springframework.security + spring-security-web + true + + + + org.springframework.boot + spring-boot-autoconfigure-processor + true + + + org.springframework.boot + spring-boot-configuration-processor + true + + + + org.springframework.boot + spring-boot-test + test + + + org.springframework.boot + spring-boot-test-support + test + + + ch.qos.logback + logback-classic + test + + + com.jayway.jsonpath + json-path + test + + + io.projectreactor.ipc + reactor-netty + test + + + io.undertow + undertow-core + test + + + io.undertow + undertow-servlet + test + + + org.jboss.spec.javax.servlet + jboss-servlet-api_3.1_spec + + + + + org.aspectj + aspectjrt + test + + + org.hsqldb + hsqldb + test + + + org.glassfish.jersey.media + jersey-media-json-jackson + test + + + org.skyscreamer + jsonassert + test + + + org.springframework.data + spring-data-elasticsearch + test + + + org.springframework.data + spring-data-rest-webmvc + test + + + org.springframework.integration + spring-integration-jmx + test + + + org.springframework.security + spring-security-test + test + + + org.yaml + snakeyaml + test + + + redis.clients + jedis + true + + + diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/OnEnabledEndpointElementCondition.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/OnEndpointElementCondition.java similarity index 95% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/OnEnabledEndpointElementCondition.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/OnEndpointElementCondition.java index 6ef502d69d..07be85e301 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/OnEnabledEndpointElementCondition.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/OnEndpointElementCondition.java @@ -34,13 +34,13 @@ import org.springframework.core.type.AnnotatedTypeMetadata; * @author Madhura Bhave * @since 2.0.0 */ -public abstract class OnEnabledEndpointElementCondition extends SpringBootCondition { +public abstract class OnEndpointElementCondition extends SpringBootCondition { private final String prefix; private final Class annotationType; - protected OnEnabledEndpointElementCondition(String prefix, + protected OnEndpointElementCondition(String prefix, Class annotationType) { this.prefix = prefix; this.annotationType = annotationType; diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/amqp/RabbitHealthIndicatorAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/amqp/RabbitHealthIndicatorAutoConfiguration.java new file mode 100644 index 0000000000..3c98818941 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/amqp/RabbitHealthIndicatorAutoConfiguration.java @@ -0,0 +1,65 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.amqp; + +import java.util.Map; + +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.boot.actuate.amqp.RabbitHealthIndicator; +import org.springframework.boot.actuate.autoconfigure.health.CompositeHealthIndicatorConfiguration; +import org.springframework.boot.actuate.autoconfigure.health.ConditionalOnEnabledHealthIndicator; +import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration; +import org.springframework.boot.actuate.health.HealthIndicator; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * {@link EnableAutoConfiguration Auto-configuration} for {@link RabbitHealthIndicator}. + * + * @author Christian Dupuis + * @since 2.0.0 + */ +@Configuration +@ConditionalOnClass(RabbitTemplate.class) +@ConditionalOnBean(RabbitTemplate.class) +@ConditionalOnEnabledHealthIndicator("rabbit") +@AutoConfigureBefore(HealthIndicatorAutoConfiguration.class) +@AutoConfigureAfter(RabbitAutoConfiguration.class) +public class RabbitHealthIndicatorAutoConfiguration extends + CompositeHealthIndicatorConfiguration { + + private final Map rabbitTemplates; + + public RabbitHealthIndicatorAutoConfiguration( + Map rabbitTemplates) { + this.rabbitTemplates = rabbitTemplates; + } + + @Bean + @ConditionalOnMissingBean(name = "rabbitHealthIndicator") + public HealthIndicator rabbitHealthIndicator() { + return createHealthIndicator(this.rabbitTemplates); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/amqp/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/amqp/package-info.java new file mode 100644 index 0000000000..2cff85ce1b --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/amqp/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Auto-configuration for actuator AMQP concerns. + */ +package org.springframework.boot.actuate.autoconfigure.amqp; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/audit/AuditAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/audit/AuditAutoConfiguration.java similarity index 100% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/audit/AuditAutoConfiguration.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/audit/AuditAutoConfiguration.java diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx/JmxEndpointAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/audit/AuditEventsEndpointAutoConfiguration.java similarity index 57% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx/JmxEndpointAutoConfiguration.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/audit/AuditEventsEndpointAutoConfiguration.java index 34e15dde15..ae7d5ba995 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx/JmxEndpointAutoConfiguration.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/audit/AuditEventsEndpointAutoConfiguration.java @@ -14,29 +14,39 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.endpoint.jmx; +package org.springframework.boot.actuate.autoconfigure.audit; -import org.springframework.boot.actuate.autoconfigure.endpoint.ConditionalOnEnabledEndpoint; -import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration; -import org.springframework.boot.actuate.endpoint.AuditEventsEndpoint; -import org.springframework.boot.actuate.endpoint.jmx.AuditEventsJmxEndpointExtension; +import org.springframework.boot.actuate.audit.AuditEventRepository; +import org.springframework.boot.actuate.audit.AuditEventsEndpoint; +import org.springframework.boot.actuate.audit.AuditEventsJmxEndpointExtension; +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; +import org.springframework.boot.actuate.logging.LoggersEndpoint; import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.endpoint.jmx.JmxEndpointExtension; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** - * Auto-configuration for JMX {@link org.springframework.boot.endpoint.Endpoint Endpoints} - * and JMX-specific {@link JmxEndpointExtension endpoint extensions}. + * {@link EnableAutoConfiguration Auto-configuration} for the {@link LoggersEndpoint}. * + * @author Phillip Webb * @author Andy Wilkinson * @since 2.0.0 */ -@AutoConfigureAfter(EndpointAutoConfiguration.class) @Configuration -public class JmxEndpointAutoConfiguration { +@AutoConfigureAfter(AuditAutoConfiguration.class) +public class AuditEventsEndpointAutoConfiguration { + + @Bean + @ConditionalOnMissingBean + @ConditionalOnBean(AuditEventRepository.class) + @ConditionalOnEnabledEndpoint + public AuditEventsEndpoint auditEventsEndpoint( + AuditEventRepository auditEventRepository) { + return new AuditEventsEndpoint(auditEventRepository); + } @Bean @ConditionalOnMissingBean diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/audit/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/audit/package-info.java similarity index 93% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/audit/package-info.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/audit/package-info.java index 1f7de78625..3d5c5ce9a9 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/audit/package-info.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/audit/package-info.java @@ -15,6 +15,6 @@ */ /** - * Auto-configuration for audit events. + * Auto-configuration for actuator audit concerns. */ package org.springframework.boot.actuate.autoconfigure.audit; diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/beans/BeansEndpointAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/beans/BeansEndpointAutoConfiguration.java new file mode 100644 index 0000000000..27cca0c549 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/beans/BeansEndpointAutoConfiguration.java @@ -0,0 +1,44 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.beans; + +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; +import org.springframework.boot.actuate.beans.BeansEndpoint; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * {@link EnableAutoConfiguration Auto-configuration} for the {@link BeansEndpoint}. + * + * @author Phillip Webb + * @since 2.0.0 + */ +@Configuration +public class BeansEndpointAutoConfiguration { + + @Bean + @ConditionalOnMissingBean + @ConditionalOnEnabledEndpoint + public BeansEndpoint beansEndpoint( + ConfigurableApplicationContext applicationContext) { + return new BeansEndpoint(applicationContext); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/beans/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/beans/package-info.java new file mode 100644 index 0000000000..f50051db8f --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/beans/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Auto-configuration for actuator Spring Bean concerns. + */ +package org.springframework.boot.actuate.autoconfigure.beans; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/cache/CacheStatisticsAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cache/CacheStatisticsAutoConfiguration.java similarity index 100% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/cache/CacheStatisticsAutoConfiguration.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cache/CacheStatisticsAutoConfiguration.java diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/cache/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cache/package-info.java similarity index 93% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/cache/package-info.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cache/package-info.java index cac6f73cc5..e1350cafb1 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/cache/package-info.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cache/package-info.java @@ -15,6 +15,6 @@ */ /** - * Auto-configuration for cache statistics. + * Auto-configuration for actuator cache concerns. */ package org.springframework.boot.actuate.autoconfigure.cache; diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cassandra/CassandraHealthIndicatorAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cassandra/CassandraHealthIndicatorAutoConfiguration.java new file mode 100644 index 0000000000..55918bf48e --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cassandra/CassandraHealthIndicatorAutoConfiguration.java @@ -0,0 +1,70 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.cassandra; + +import java.util.Map; + +import com.datastax.driver.core.Cluster; + +import org.springframework.boot.actuate.autoconfigure.health.CompositeHealthIndicatorConfiguration; +import org.springframework.boot.actuate.autoconfigure.health.ConditionalOnEnabledHealthIndicator; +import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration; +import org.springframework.boot.actuate.cassandra.CassandraHealthIndicator; +import org.springframework.boot.actuate.health.HealthIndicator; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.cassandra.core.CassandraOperations; + +/** + * {@link EnableAutoConfiguration Auto-configuration} for + * {@link CassandraHealthIndicator}. + * + * @author Julien Dubois + * @since 2.0.0 + */ +@Configuration +@ConditionalOnClass({ CassandraOperations.class, Cluster.class }) +@ConditionalOnBean(CassandraOperations.class) +@ConditionalOnEnabledHealthIndicator("cassandra") +@AutoConfigureBefore(HealthIndicatorAutoConfiguration.class) +@AutoConfigureAfter({ CassandraAutoConfiguration.class, + CassandraDataAutoConfiguration.class }) +public class CassandraHealthIndicatorAutoConfiguration extends + CompositeHealthIndicatorConfiguration { + + private final Map cassandraOperations; + + public CassandraHealthIndicatorAutoConfiguration( + Map cassandraOperations) { + this.cassandraOperations = cassandraOperations; + } + + @Bean + @ConditionalOnMissingBean(name = "cassandraHealthIndicator") + public HealthIndicator cassandraHealthIndicator() { + return createHealthIndicator(this.cassandraOperations); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cassandra/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cassandra/package-info.java new file mode 100644 index 0000000000..6805ec69dc --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cassandra/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Auto-configuration for actuator Cassandra concerns. + */ +package org.springframework.boot.actuate.autoconfigure.cassandra; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cloudfoundry/AccessLevel.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/AccessLevel.java similarity index 96% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cloudfoundry/AccessLevel.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/AccessLevel.java index 442e7bb0f2..3f0d16a336 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cloudfoundry/AccessLevel.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/AccessLevel.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.cloudfoundry; +package org.springframework.boot.actuate.autoconfigure.cloudfoundry; import java.util.Arrays; import java.util.List; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundryActuatorAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryActuatorAutoConfiguration.java similarity index 92% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundryActuatorAutoConfiguration.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryActuatorAutoConfiguration.java index c947723a8c..068698bdcd 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundryActuatorAutoConfiguration.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryActuatorAutoConfiguration.java @@ -14,12 +14,13 @@ * limitations under the License. */ -package org.springframework.boot.actuate.cloudfoundry; +package org.springframework.boot.actuate.autoconfigure.cloudfoundry; import java.util.Arrays; -import org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure.EndpointProvider; -import org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure.ServletEndpointAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointProvider; +import org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagementContextAutoConfiguration; +import org.springframework.boot.actuate.endpoint.web.WebEndpointOperation; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; @@ -30,7 +31,6 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplicat import org.springframework.boot.autoconfigure.security.SecurityProperties; import org.springframework.boot.cloud.CloudPlatform; import org.springframework.boot.endpoint.web.EndpointMapping; -import org.springframework.boot.endpoint.web.WebEndpointOperation; import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -52,7 +52,7 @@ import org.springframework.web.servlet.DispatcherServlet; */ @Configuration @ConditionalOnProperty(prefix = "management.cloudfoundry", name = "enabled", matchIfMissing = true) -@AutoConfigureAfter(ServletEndpointAutoConfiguration.class) +@AutoConfigureAfter(ServletManagementContextAutoConfiguration.class) @ConditionalOnCloudPlatform(CloudPlatform.CLOUD_FOUNDRY) public class CloudFoundryActuatorAutoConfiguration { diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundryAuthorizationException.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryAuthorizationException.java similarity index 96% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundryAuthorizationException.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryAuthorizationException.java index d45e7601de..c2ee514a69 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundryAuthorizationException.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryAuthorizationException.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.cloudfoundry; +package org.springframework.boot.actuate.autoconfigure.cloudfoundry; import org.springframework.http.HttpStatus; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundrySecurityInterceptor.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundrySecurityInterceptor.java similarity index 98% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundrySecurityInterceptor.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundrySecurityInterceptor.java index 23e474b696..054af4fbe0 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundrySecurityInterceptor.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundrySecurityInterceptor.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.cloudfoundry; +package org.springframework.boot.actuate.autoconfigure.cloudfoundry; import javax.servlet.http.HttpServletRequest; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundrySecurityService.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundrySecurityService.java similarity index 96% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundrySecurityService.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundrySecurityService.java index 7f7dd85f0b..1f4efb8ea7 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundrySecurityService.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundrySecurityService.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.cloudfoundry; +package org.springframework.boot.actuate.autoconfigure.cloudfoundry; import java.net.URI; import java.net.URISyntaxException; @@ -22,7 +22,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import org.springframework.boot.actuate.cloudfoundry.CloudFoundryAuthorizationException.Reason; +import org.springframework.boot.actuate.autoconfigure.cloudfoundry.CloudFoundryAuthorizationException.Reason; import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.http.HttpStatus; import org.springframework.http.RequestEntity; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundryWebEndpointServletHandlerMapping.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryWebEndpointServletHandlerMapping.java similarity index 90% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundryWebEndpointServletHandlerMapping.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryWebEndpointServletHandlerMapping.java index c49edc9462..178dff7df9 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundryWebEndpointServletHandlerMapping.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryWebEndpointServletHandlerMapping.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.cloudfoundry; +package org.springframework.boot.actuate.autoconfigure.cloudfoundry; import java.lang.reflect.Method; import java.util.Arrays; @@ -31,15 +31,15 @@ import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.springframework.boot.endpoint.EndpointInfo; -import org.springframework.boot.endpoint.OperationInvoker; -import org.springframework.boot.endpoint.ParameterMappingException; -import org.springframework.boot.endpoint.web.EndpointLinksResolver; +import org.springframework.boot.actuate.endpoint.EndpointInfo; +import org.springframework.boot.actuate.endpoint.OperationInvoker; +import org.springframework.boot.actuate.endpoint.ParameterMappingException; +import org.springframework.boot.actuate.endpoint.web.EndpointLinksResolver; +import org.springframework.boot.actuate.endpoint.web.Link; +import org.springframework.boot.actuate.endpoint.web.WebEndpointOperation; +import org.springframework.boot.actuate.endpoint.web.WebEndpointResponse; +import org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping; import org.springframework.boot.endpoint.web.EndpointMapping; -import org.springframework.boot.endpoint.web.Link; -import org.springframework.boot.endpoint.web.WebEndpointOperation; -import org.springframework.boot.endpoint.web.WebEndpointResponse; -import org.springframework.boot.endpoint.web.mvc.AbstractWebEndpointServletHandlerMapping; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -57,7 +57,7 @@ import org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMappi * @author Madhura Bhave */ class CloudFoundryWebEndpointServletHandlerMapping - extends AbstractWebEndpointServletHandlerMapping { + extends AbstractWebMvcEndpointHandlerMapping { private final Method handle = ReflectionUtils.findMethod(OperationHandler.class, "handle", HttpServletRequest.class, Map.class); diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cloudfoundry/SkipSslVerificationHttpRequestFactory.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/SkipSslVerificationHttpRequestFactory.java similarity index 97% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cloudfoundry/SkipSslVerificationHttpRequestFactory.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/SkipSslVerificationHttpRequestFactory.java index 91b0d4783d..b76b476ec0 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cloudfoundry/SkipSslVerificationHttpRequestFactory.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/SkipSslVerificationHttpRequestFactory.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.cloudfoundry; +package org.springframework.boot.actuate.autoconfigure.cloudfoundry; import java.io.IOException; import java.net.HttpURLConnection; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cloudfoundry/Token.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/Token.java similarity index 98% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cloudfoundry/Token.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/Token.java index 7da97acbc4..7a4a84bc09 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cloudfoundry/Token.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/Token.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.cloudfoundry; +package org.springframework.boot.actuate.autoconfigure.cloudfoundry; import java.nio.charset.Charset; import java.util.List; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cloudfoundry/TokenValidator.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/TokenValidator.java similarity index 96% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cloudfoundry/TokenValidator.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/TokenValidator.java index b0dae1077a..7a9fffd4aa 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cloudfoundry/TokenValidator.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/TokenValidator.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.cloudfoundry; +package org.springframework.boot.actuate.autoconfigure.cloudfoundry; import java.security.GeneralSecurityException; import java.security.KeyFactory; @@ -26,7 +26,7 @@ import java.security.spec.X509EncodedKeySpec; import java.util.Map; import java.util.concurrent.TimeUnit; -import org.springframework.boot.actuate.cloudfoundry.CloudFoundryAuthorizationException.Reason; +import org.springframework.boot.actuate.autoconfigure.cloudfoundry.CloudFoundryAuthorizationException.Reason; import org.springframework.util.Base64Utils; /** diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/package-info.java new file mode 100644 index 0000000000..3c42f83f5b --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Auto-configuration for actuator Cloud Foundry concerns. + */ +package org.springframework.boot.actuate.autoconfigure.cloudfoundry; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/AutoConfigurationReportEndpoint.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/condition/AutoConfigurationReportEndpoint.java similarity index 96% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/AutoConfigurationReportEndpoint.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/condition/AutoConfigurationReportEndpoint.java index b80f99ec81..9476b4fc1b 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/AutoConfigurationReportEndpoint.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/condition/AutoConfigurationReportEndpoint.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.autoconfigure.condition; import java.util.ArrayList; import java.util.LinkedHashMap; @@ -26,12 +26,12 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; import org.springframework.boot.autoconfigure.condition.ConditionEvaluationReport; import org.springframework.boot.autoconfigure.condition.ConditionEvaluationReport.ConditionAndOutcome; import org.springframework.boot.autoconfigure.condition.ConditionEvaluationReport.ConditionAndOutcomes; import org.springframework.boot.autoconfigure.condition.ConditionOutcome; -import org.springframework.boot.endpoint.Endpoint; -import org.springframework.boot.endpoint.ReadOperation; import org.springframework.context.annotation.Condition; import org.springframework.util.ClassUtils; import org.springframework.util.LinkedMultiValueMap; @@ -45,6 +45,7 @@ import org.springframework.util.StringUtils; * @author Phillip Webb * @author Dave Syer * @author Andy Wilkinson + * @since 2.0.0 */ @Endpoint(id = "autoconfig") public class AutoConfigurationReportEndpoint { diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/condition/AutoConfigurationReportEndpointAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/condition/AutoConfigurationReportEndpointAutoConfiguration.java new file mode 100644 index 0000000000..16993f4508 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/condition/AutoConfigurationReportEndpointAutoConfiguration.java @@ -0,0 +1,53 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.condition; + +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionEvaluationReport; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.SearchStrategy; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * {@link EnableAutoConfiguration Auto-configuration} for the + * {@link AutoConfigurationReportEndpoint}. + * + * @author Phillip Webb + * @since 2.0.0 + */ +@Configuration +public class AutoConfigurationReportEndpointAutoConfiguration { + + private ConfigurableApplicationContext context; + + public AutoConfigurationReportEndpointAutoConfiguration( + ConfigurableApplicationContext context) { + this.context = context; + } + + @Bean + @ConditionalOnMissingBean(search = SearchStrategy.CURRENT) + @ConditionalOnEnabledEndpoint + public AutoConfigurationReportEndpoint autoConfigurationReportEndpoint() { + return new AutoConfigurationReportEndpoint( + ConditionEvaluationReport.get(this.context.getBeanFactory())); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/condition/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/condition/package-info.java new file mode 100644 index 0000000000..057c8d79b3 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/condition/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Auto-configuration for actuator condition concerns. + */ +package org.springframework.boot.actuate.autoconfigure.condition; diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/context/ShutdownEndpointAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/context/ShutdownEndpointAutoConfiguration.java new file mode 100644 index 0000000000..c24a3d02b0 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/context/ShutdownEndpointAutoConfiguration.java @@ -0,0 +1,42 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.context; + +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; +import org.springframework.boot.actuate.context.ShutdownEndpoint; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * {@link EnableAutoConfiguration Auto-configuration} for the {@link ShutdownEndpoint}. + * + * @author Phillip Webb + * @since 2.0.0 + */ +@Configuration +public class ShutdownEndpointAutoConfiguration { + + @Bean + @ConditionalOnMissingBean + @ConditionalOnEnabledEndpoint + public ShutdownEndpoint shutdownEndpoint() { + return new ShutdownEndpoint(); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/context/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/context/package-info.java new file mode 100644 index 0000000000..fc57828642 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/context/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Auto-configuration for actuator Spring Context concerns. + */ +package org.springframework.boot.actuate.autoconfigure.context; diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/context/properties/ConfigurationPropertiesReportEndpointAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/context/properties/ConfigurationPropertiesReportEndpointAutoConfiguration.java new file mode 100644 index 0000000000..cb2789864f --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/context/properties/ConfigurationPropertiesReportEndpointAutoConfiguration.java @@ -0,0 +1,43 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.context.properties; + +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; +import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * {@link EnableAutoConfiguration Auto-configuration} for the + * {@link ConfigurationPropertiesReportEndpoint}. + * + * @author Phillip Webb + * @since 2.0.0 + */ +@Configuration +public class ConfigurationPropertiesReportEndpointAutoConfiguration { + + @Bean + @ConditionalOnMissingBean + @ConditionalOnEnabledEndpoint + public ConfigurationPropertiesReportEndpoint configurationPropertiesReportEndpoint() { + return new ConfigurationPropertiesReportEndpoint(); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/context/properties/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/context/properties/package-info.java new file mode 100644 index 0000000000..f227d9f2da --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/context/properties/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Auto-configuration for actuator property concerns. + */ +package org.springframework.boot.actuate.autoconfigure.context.properties; diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/couchbase/CouchbaseHealthIndicatorAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/couchbase/CouchbaseHealthIndicatorAutoConfiguration.java new file mode 100644 index 0000000000..252aaea374 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/couchbase/CouchbaseHealthIndicatorAutoConfiguration.java @@ -0,0 +1,68 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.couchbase; + +import java.util.Map; + +import com.couchbase.client.java.Bucket; + +import org.springframework.boot.actuate.autoconfigure.health.CompositeHealthIndicatorConfiguration; +import org.springframework.boot.actuate.autoconfigure.health.ConditionalOnEnabledHealthIndicator; +import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration; +import org.springframework.boot.actuate.couchbase.CouchbaseHealthIndicator; +import org.springframework.boot.actuate.health.HealthIndicator; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.data.couchbase.CouchbaseDataAutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.couchbase.core.CouchbaseOperations; + +/** + * {@link EnableAutoConfiguration Auto-configuration} for + * {@link CouchbaseHealthIndicator}. + * + * @author Eddú Meléndez + * @since 2.0.0 + */ +@Configuration +@ConditionalOnClass({ CouchbaseOperations.class, Bucket.class }) +@ConditionalOnBean(CouchbaseOperations.class) +@ConditionalOnEnabledHealthIndicator("couchbase") +@AutoConfigureBefore(HealthIndicatorAutoConfiguration.class) +@AutoConfigureAfter(CouchbaseDataAutoConfiguration.class) +public class CouchbaseHealthIndicatorAutoConfiguration extends + CompositeHealthIndicatorConfiguration { + + private final Map couchbaseOperations; + + public CouchbaseHealthIndicatorAutoConfiguration( + Map couchbaseOperations) { + this.couchbaseOperations = couchbaseOperations; + } + + @Bean + @ConditionalOnMissingBean(name = "couchbaseHealthIndicator") + public HealthIndicator couchbaseHealthIndicator() { + return createHealthIndicator(this.couchbaseOperations); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/couchbase/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/couchbase/package-info.java new file mode 100644 index 0000000000..8e73676607 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/couchbase/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Auto-configuration for actuator Couchbase concerns. + */ +package org.springframework.boot.actuate.autoconfigure.couchbase; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/health/ElasticsearchHealthIndicatorConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/elasticsearch/ElasticsearchHealthIndicatorAutoConfiguration.java similarity index 65% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/health/ElasticsearchHealthIndicatorConfiguration.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/elasticsearch/ElasticsearchHealthIndicatorAutoConfiguration.java index 09a18adf4e..c9d010031a 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/health/ElasticsearchHealthIndicatorConfiguration.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/elasticsearch/ElasticsearchHealthIndicatorAutoConfiguration.java @@ -14,34 +14,47 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.health; +package org.springframework.boot.actuate.autoconfigure.elasticsearch; import java.util.Map; import io.searchbox.client.JestClient; import org.elasticsearch.client.Client; -import org.springframework.boot.actuate.health.ElasticsearchHealthIndicator; -import org.springframework.boot.actuate.health.ElasticsearchHealthIndicatorProperties; -import org.springframework.boot.actuate.health.ElasticsearchJestHealthIndicator; +import org.springframework.boot.actuate.autoconfigure.health.CompositeHealthIndicatorConfiguration; +import org.springframework.boot.actuate.autoconfigure.health.ConditionalOnEnabledHealthIndicator; +import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration; +import org.springframework.boot.actuate.elasticsearch.ElasticsearchHealthIndicator; +import org.springframework.boot.actuate.elasticsearch.ElasticsearchJestHealthIndicator; import org.springframework.boot.actuate.health.HealthIndicator; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration; +import org.springframework.boot.autoconfigure.elasticsearch.jest.JestAutoConfiguration; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** - * Actual Elasticsearch health indicator configurations imported by - * {@link HealthIndicatorAutoConfiguration}. + * {@link EnableAutoConfiguration Auto-configuration} for + * {@link ElasticsearchHealthIndicator}. * + * @author Binwei Yang + * @author Andy Wilkinson * @author Stephane Nicoll + * @since 2.0.0 */ -class ElasticsearchHealthIndicatorConfiguration { +@Configuration +@ConditionalOnEnabledHealthIndicator("elasticsearch") +@AutoConfigureBefore(HealthIndicatorAutoConfiguration.class) +@AutoConfigureAfter({ ElasticsearchAutoConfiguration.class, JestAutoConfiguration.class }) +public class ElasticsearchHealthIndicatorAutoConfiguration { @Configuration @ConditionalOnBean(Client.class) - @ConditionalOnEnabledHealthIndicator("elasticsearch") @EnableConfigurationProperties(ElasticsearchHealthIndicatorProperties.class) static class ElasticsearchClientHealthIndicatorConfiguration extends CompositeHealthIndicatorConfiguration { @@ -64,14 +77,14 @@ class ElasticsearchHealthIndicatorConfiguration { @Override protected ElasticsearchHealthIndicator createHealthIndicator(Client client) { - return new ElasticsearchHealthIndicator(client, this.properties); + return new ElasticsearchHealthIndicator(client, + this.properties.getResponseTimeout(), this.properties.getIndices()); } } @Configuration @ConditionalOnBean(JestClient.class) - @ConditionalOnEnabledHealthIndicator("elasticsearch") static class ElasticsearchJestHealthIndicatorConfiguration extends CompositeHealthIndicatorConfiguration { diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/ElasticsearchHealthIndicatorProperties.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/elasticsearch/ElasticsearchHealthIndicatorProperties.java similarity index 90% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/ElasticsearchHealthIndicatorProperties.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/elasticsearch/ElasticsearchHealthIndicatorProperties.java index 80933f5efa..bab637de31 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/ElasticsearchHealthIndicatorProperties.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/elasticsearch/ElasticsearchHealthIndicatorProperties.java @@ -14,11 +14,12 @@ * limitations under the License. */ -package org.springframework.boot.actuate.health; +package org.springframework.boot.actuate.autoconfigure.elasticsearch; import java.util.ArrayList; import java.util.List; +import org.springframework.boot.actuate.elasticsearch.ElasticsearchHealthIndicator; import org.springframework.boot.context.properties.ConfigurationProperties; /** @@ -26,7 +27,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties; * * @author Binwei Yang * @author Andy Wilkinson - * @since 1.3.0 + * @since 2.0.0 */ @ConfigurationProperties(prefix = "management.health.elasticsearch", ignoreUnknownFields = false) public class ElasticsearchHealthIndicatorProperties { diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/elasticsearch/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/elasticsearch/package-info.java new file mode 100644 index 0000000000..18f523074e --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/elasticsearch/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Auto-configuration for actuator Elasticsearch concerns. + */ +package org.springframework.boot.actuate.autoconfigure.elasticsearch; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/CachingConfigurationFactory.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/DefaultCachingConfigurationFactory.java similarity index 57% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/CachingConfigurationFactory.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/DefaultCachingConfigurationFactory.java index d42002332e..603f5447f4 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/CachingConfigurationFactory.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/DefaultCachingConfigurationFactory.java @@ -14,20 +14,20 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure; +package org.springframework.boot.actuate.autoconfigure.endpoint; -import java.util.function.Function; - -import org.springframework.boot.endpoint.CachingConfiguration; +import org.springframework.boot.actuate.endpoint.cache.CachingConfiguration; +import org.springframework.boot.actuate.endpoint.cache.CachingConfigurationFactory; import org.springframework.core.env.Environment; /** - * A {@link CachingConfiguration} factory that use the {@link Environment} to extract the - * caching settings of each endpoint. + * Default {@link CachingConfigurationFactory} implementation that use the + * {@link Environment} to extract the caching settings of each endpoint. * * @author Stephane Nicoll + * @since 2.0.0 */ -class CachingConfigurationFactory implements Function { +public class DefaultCachingConfigurationFactory implements CachingConfigurationFactory { private final Environment environment; @@ -35,14 +35,14 @@ class CachingConfigurationFactory implements Function MEDIA_TYPES = Arrays + .asList(ActuatorMediaType.V2_JSON_VALUE, "application/json"); + + private final ApplicationContext applicationContext; + + EndpointWebConfiguration(ApplicationContext applicationContext) { + this.applicationContext = applicationContext; + } + + @Bean + public EndpointProvider webEndpointProvider( + OperationParameterMapper parameterMapper, + DefaultCachingConfigurationFactory cachingConfigurationFactory) { + Environment environment = this.applicationContext.getEnvironment(); + WebAnnotationEndpointDiscoverer endpointDiscoverer = new WebAnnotationEndpointDiscoverer( + this.applicationContext, parameterMapper, cachingConfigurationFactory, + MEDIA_TYPES, MEDIA_TYPES); + return new EndpointProvider<>(environment, endpointDiscoverer, + EndpointExposure.WEB); + } + + } + +} diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/support/EndpointEnablement.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/EndpointEnablement.java similarity index 95% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/support/EndpointEnablement.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/EndpointEnablement.java index aacfdcf73a..840aae0d80 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/support/EndpointEnablement.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/EndpointEnablement.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.endpoint.support; +package org.springframework.boot.actuate.autoconfigure.endpoint; /** * Determines if an endpoint is enabled or not. diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/support/EndpointEnablementProvider.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/EndpointEnablementProvider.java similarity index 97% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/support/EndpointEnablementProvider.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/EndpointEnablementProvider.java index ce16ca9927..27351d5714 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/support/EndpointEnablementProvider.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/EndpointEnablementProvider.java @@ -14,9 +14,9 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.endpoint.support; +package org.springframework.boot.actuate.autoconfigure.endpoint; -import org.springframework.boot.endpoint.EndpointExposure; +import org.springframework.boot.actuate.endpoint.annotation.EndpointExposure; import org.springframework.core.env.Environment; import org.springframework.util.Assert; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/EndpointProvider.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/EndpointProvider.java similarity index 83% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/EndpointProvider.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/EndpointProvider.java index d628186d31..6f2a13b4dd 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/EndpointProvider.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/EndpointProvider.java @@ -14,16 +14,15 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure; +package org.springframework.boot.actuate.autoconfigure.endpoint; import java.util.Collection; import java.util.stream.Collectors; -import org.springframework.boot.actuate.autoconfigure.endpoint.support.EndpointEnablementProvider; -import org.springframework.boot.endpoint.EndpointDiscoverer; -import org.springframework.boot.endpoint.EndpointExposure; -import org.springframework.boot.endpoint.EndpointInfo; -import org.springframework.boot.endpoint.Operation; +import org.springframework.boot.actuate.endpoint.EndpointDiscoverer; +import org.springframework.boot.actuate.endpoint.EndpointInfo; +import org.springframework.boot.actuate.endpoint.Operation; +import org.springframework.boot.actuate.endpoint.annotation.EndpointExposure; import org.springframework.core.env.Environment; /** diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/ConditionalOnEnabledEndpoint.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/ConditionalOnEnabledEndpoint.java similarity index 92% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/ConditionalOnEnabledEndpoint.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/ConditionalOnEnabledEndpoint.java index a4384a7ddd..ce267d2e38 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/ConditionalOnEnabledEndpoint.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/ConditionalOnEnabledEndpoint.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.endpoint; +package org.springframework.boot.actuate.autoconfigure.endpoint.condition; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; @@ -22,8 +22,8 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import org.springframework.boot.endpoint.Endpoint; -import org.springframework.boot.endpoint.EndpointExposure; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.EndpointExposure; import org.springframework.context.annotation.Conditional; /** diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/OnEnabledEndpointCondition.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/OnEnabledEndpointCondition.java similarity index 89% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/OnEnabledEndpointCondition.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/OnEnabledEndpointCondition.java index 0b85d557f4..dc5bdbdd72 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/OnEnabledEndpointCondition.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/OnEnabledEndpointCondition.java @@ -14,17 +14,17 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.endpoint; +package org.springframework.boot.actuate.autoconfigure.endpoint.condition; -import org.springframework.boot.actuate.autoconfigure.endpoint.support.EndpointEnablement; -import org.springframework.boot.actuate.autoconfigure.endpoint.support.EndpointEnablementProvider; +import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointEnablement; +import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointEnablementProvider; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.EndpointExposure; +import org.springframework.boot.actuate.endpoint.jmx.annotation.JmxEndpointExtension; +import org.springframework.boot.actuate.endpoint.web.annotation.WebEndpointExtension; import org.springframework.boot.autoconfigure.condition.ConditionMessage; import org.springframework.boot.autoconfigure.condition.ConditionOutcome; import org.springframework.boot.autoconfigure.condition.SpringBootCondition; -import org.springframework.boot.endpoint.Endpoint; -import org.springframework.boot.endpoint.EndpointExposure; -import org.springframework.boot.endpoint.jmx.JmxEndpointExtension; -import org.springframework.boot.endpoint.web.WebEndpointExtension; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ConditionContext; import org.springframework.core.annotation.AnnotationUtils; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/DefaultEndpointObjectNameFactory.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx/DefaultEndpointObjectNameFactory.java similarity index 94% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/DefaultEndpointObjectNameFactory.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx/DefaultEndpointObjectNameFactory.java index 04f8eea305..b01ed4b50c 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/DefaultEndpointObjectNameFactory.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx/DefaultEndpointObjectNameFactory.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure; +package org.springframework.boot.actuate.autoconfigure.endpoint.jmx; import java.util.Map; @@ -22,8 +22,8 @@ import javax.management.MBeanServer; import javax.management.MalformedObjectNameException; import javax.management.ObjectName; -import org.springframework.boot.endpoint.jmx.EndpointMBean; -import org.springframework.boot.endpoint.jmx.EndpointObjectNameFactory; +import org.springframework.boot.actuate.endpoint.jmx.EndpointMBean; +import org.springframework.boot.actuate.endpoint.jmx.EndpointObjectNameFactory; import org.springframework.jmx.support.ObjectNameManager; import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; @@ -74,7 +74,6 @@ class DefaultEndpointObjectNameFactory implements EndpointObjectNameFactory { return ""; } StringBuilder builder = new StringBuilder(); - for (Map.Entry name : this.properties.getStaticNames() .entrySet()) { builder.append(",").append(name.getKey()).append("=").append(name.getValue()); diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx/JmxEndpointAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx/JmxEndpointAutoConfiguration.java new file mode 100644 index 0000000000..bced1ed5b4 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx/JmxEndpointAutoConfiguration.java @@ -0,0 +1,82 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.endpoint.jmx; + +import javax.management.MBeanServer; + +import com.fasterxml.jackson.databind.ObjectMapper; + +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.boot.actuate.autoconfigure.endpoint.DefaultCachingConfigurationFactory; +import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointProvider; +import org.springframework.boot.actuate.endpoint.OperationParameterMapper; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.EndpointExposure; +import org.springframework.boot.actuate.endpoint.jmx.EndpointMBeanRegistrar; +import org.springframework.boot.actuate.endpoint.jmx.JmxEndpointOperation; +import org.springframework.boot.actuate.endpoint.jmx.annotation.JmxAnnotationEndpointDiscoverer; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnSingleCandidate; +import org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.util.ObjectUtils; + +/** + * {@link EnableAutoConfiguration Auto-configuration} for JMX {@link Endpoint} support. + * + * @author Andy Wilkinson + * @author Stephane Nicoll + * @author Phillip Webb + * @since 2.0.0 + */ +@AutoConfigureAfter(JmxAutoConfiguration.class) +@EnableConfigurationProperties(JmxEndpointExporterProperties.class) +public class JmxEndpointAutoConfiguration { + + private final ApplicationContext applicationContext; + + public JmxEndpointAutoConfiguration(ApplicationContext applicationContext) { + this.applicationContext = applicationContext; + } + + @Bean + public JmxAnnotationEndpointDiscoverer jmxEndpointDiscoverer( + OperationParameterMapper operationParameterMapper, + DefaultCachingConfigurationFactory cachingConfigurationFactory) { + return new JmxAnnotationEndpointDiscoverer(this.applicationContext, + operationParameterMapper, cachingConfigurationFactory); + } + + @ConditionalOnSingleCandidate(MBeanServer.class) + @Bean + public JmxEndpointExporter jmxMBeanExporter(JmxEndpointExporterProperties properties, + MBeanServer mBeanServer, JmxAnnotationEndpointDiscoverer endpointDiscoverer, + ObjectProvider objectMapper) { + EndpointProvider endpointProvider = new EndpointProvider<>( + this.applicationContext.getEnvironment(), endpointDiscoverer, + EndpointExposure.JMX); + EndpointMBeanRegistrar endpointMBeanRegistrar = new EndpointMBeanRegistrar( + mBeanServer, new DefaultEndpointObjectNameFactory(properties, mBeanServer, + ObjectUtils.getIdentityHexString(this.applicationContext))); + return new JmxEndpointExporter(endpointProvider, endpointMBeanRegistrar, + objectMapper.getIfAvailable(ObjectMapper::new)); + } + +} diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/JmxEndpointExporter.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx/JmxEndpointExporter.java similarity index 88% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/JmxEndpointExporter.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx/JmxEndpointExporter.java index 5a8c26302f..397eaefc70 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/JmxEndpointExporter.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx/JmxEndpointExporter.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure; +package org.springframework.boot.actuate.autoconfigure.endpoint.jmx; import java.util.ArrayList; import java.util.Collection; @@ -29,18 +29,18 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; -import org.springframework.boot.endpoint.Endpoint; -import org.springframework.boot.endpoint.jmx.EndpointMBean; -import org.springframework.boot.endpoint.jmx.EndpointMBeanRegistrar; -import org.springframework.boot.endpoint.jmx.JmxEndpointMBeanFactory; -import org.springframework.boot.endpoint.jmx.JmxEndpointOperation; -import org.springframework.boot.endpoint.jmx.JmxOperationResponseMapper; +import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointProvider; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.jmx.EndpointMBean; +import org.springframework.boot.actuate.endpoint.jmx.EndpointMBeanRegistrar; +import org.springframework.boot.actuate.endpoint.jmx.JmxEndpointMBeanFactory; +import org.springframework.boot.actuate.endpoint.jmx.JmxEndpointOperation; +import org.springframework.boot.actuate.endpoint.jmx.JmxOperationResponseMapper; /** * Exports all available {@link Endpoint} to a configurable {@link MBeanServer}. * * @author Stephane Nicoll - * @since 2.0.0 */ class JmxEndpointExporter implements InitializingBean, DisposableBean { diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/JmxEndpointExporterProperties.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx/JmxEndpointExporterProperties.java similarity index 99% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/JmxEndpointExporterProperties.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx/JmxEndpointExporterProperties.java index ade8cb898b..c44792068f 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/JmxEndpointExporterProperties.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx/JmxEndpointExporterProperties.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure; +package org.springframework.boot.actuate.autoconfigure.endpoint.jmx; import java.util.Properties; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/package-info.java similarity index 92% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/package-info.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/package-info.java index 46a5420a5f..2592c13b20 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/package-info.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/package-info.java @@ -15,6 +15,6 @@ */ /** - * Auto-configuration for endpoints. + * Additional actuator endpoint conditions and utilities. */ package org.springframework.boot.actuate.autoconfigure.endpoint; diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/jersey/JerseyWebEndpointManagementContextConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/jersey/JerseyWebEndpointManagementContextConfiguration.java new file mode 100644 index 0000000000..af0b27ee14 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/jersey/JerseyWebEndpointManagementContextConfiguration.java @@ -0,0 +1,63 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.endpoint.web.jersey; + +import java.util.HashSet; + +import org.glassfish.jersey.server.ResourceConfig; + +import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointProvider; +import org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration; +import org.springframework.boot.actuate.autoconfigure.web.server.ManagementServerProperties; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.web.WebEndpointOperation; +import org.springframework.boot.actuate.endpoint.web.jersey.JerseyEndpointResourceFactory; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; +import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type; +import org.springframework.boot.autoconfigure.jersey.ResourceConfigCustomizer; +import org.springframework.boot.endpoint.web.EndpointMapping; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * {@link ManagementContextConfiguration} for Jersey {@link Endpoint} concerns. + * + * @author Andy Wilkinson + * @author Phillip Webb + * @since 2.0.0 + */ +@Configuration +@ConditionalOnWebApplication(type = Type.SERVLET) +@ConditionalOnClass(ResourceConfig.class) +@ConditionalOnBean(ResourceConfig.class) +@ConditionalOnMissingBean(type = "org.springframework.web.servlet.DispatcherServlet") +class JerseyWebEndpointManagementContextConfiguration { + + @Bean + public ResourceConfigCustomizer webEndpointRegistrar( + EndpointProvider provider, + ManagementServerProperties managementServerProperties) { + return (resourceConfig) -> resourceConfig.registerResources( + new HashSet<>(new JerseyEndpointResourceFactory().createEndpointResources( + new EndpointMapping(managementServerProperties.getContextPath()), + provider.getEndpoints()))); + } + +} diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/support/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/package-info.java similarity index 90% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/support/package-info.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/package-info.java index 4b486c1b16..a1278f24d8 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/support/package-info.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/package-info.java @@ -15,6 +15,6 @@ */ /** - * Support classes for the Actuator's endpoint auto-configuration. + * Auto-configuration for the Actuator's web endpoints. */ -package org.springframework.boot.actuate.autoconfigure.endpoint.support; +package org.springframework.boot.actuate.autoconfigure.endpoint.web; diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/reactive/WebFluxEndpointManagementContextConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/reactive/WebFluxEndpointManagementContextConfiguration.java new file mode 100644 index 0000000000..2d120fc2af --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/reactive/WebFluxEndpointManagementContextConfiguration.java @@ -0,0 +1,52 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.endpoint.web.reactive; + +import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointProvider; +import org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration; +import org.springframework.boot.actuate.autoconfigure.web.server.ManagementServerProperties; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.web.WebEndpointOperation; +import org.springframework.boot.actuate.endpoint.web.reactive.WebFluxEndpointHandlerMapping; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; +import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type; +import org.springframework.boot.endpoint.web.EndpointMapping; +import org.springframework.context.annotation.Bean; + +/** + * {@link ManagementContextConfiguration} for Reactive {@link Endpoint} concerns. + * + * @author Andy Wilkinson + * @author Phillip Webb + * @since 2.0.0 + */ +@ManagementContextConfiguration +@ConditionalOnWebApplication(type = Type.REACTIVE) +public class WebFluxEndpointManagementContextConfiguration { + + @Bean + @ConditionalOnMissingBean + public WebFluxEndpointHandlerMapping webEndpointReactiveHandlerMapping( + EndpointProvider provider, + ManagementServerProperties managementServerProperties) { + return new WebFluxEndpointHandlerMapping( + new EndpointMapping(managementServerProperties.getContextPath()), + provider.getEndpoints()); + } + +} diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/CorsEndpointProperties.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/servlet/CorsEndpointProperties.java similarity index 99% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/CorsEndpointProperties.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/servlet/CorsEndpointProperties.java index dd06d63d5d..ec1c5412f7 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/CorsEndpointProperties.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/servlet/CorsEndpointProperties.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure; +package org.springframework.boot.actuate.autoconfigure.endpoint.web.servlet; import java.util.ArrayList; import java.util.List; diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/servlet/WebMvcEndpointManagementContextConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/servlet/WebMvcEndpointManagementContextConfiguration.java new file mode 100644 index 0000000000..0b31ef1844 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/servlet/WebMvcEndpointManagementContextConfiguration.java @@ -0,0 +1,88 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.endpoint.web.servlet; + +import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointProvider; +import org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration; +import org.springframework.boot.actuate.autoconfigure.web.server.ManagementServerProperties; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.web.WebEndpointOperation; +import org.springframework.boot.actuate.endpoint.web.servlet.WebMvcEndpointHandlerMapping; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; +import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.endpoint.web.EndpointMapping; +import org.springframework.context.annotation.Bean; +import org.springframework.util.CollectionUtils; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.servlet.DispatcherServlet; + +/** + * {@link ManagementContextConfiguration} for Spring MVC {@link Endpoint} concerns. + * + * @author Andy Wilkinson + * @author Phillip Webb + * @since 2.0.0 + */ +@ManagementContextConfiguration +@ConditionalOnWebApplication(type = Type.SERVLET) +@ConditionalOnClass(DispatcherServlet.class) +@ConditionalOnBean(DispatcherServlet.class) +@EnableConfigurationProperties({ CorsEndpointProperties.class, + ManagementServerProperties.class }) +public class WebMvcEndpointManagementContextConfiguration { + + @Bean + @ConditionalOnMissingBean + public WebMvcEndpointHandlerMapping webEndpointServletHandlerMapping( + EndpointProvider provider, + CorsEndpointProperties corsProperties, + ManagementServerProperties managementServerProperties) { + WebMvcEndpointHandlerMapping handlerMapping = new WebMvcEndpointHandlerMapping( + new EndpointMapping(managementServerProperties.getContextPath()), + provider.getEndpoints(), getCorsConfiguration(corsProperties)); + return handlerMapping; + } + + private CorsConfiguration getCorsConfiguration(CorsEndpointProperties properties) { + if (CollectionUtils.isEmpty(properties.getAllowedOrigins())) { + return null; + } + CorsConfiguration configuration = new CorsConfiguration(); + configuration.setAllowedOrigins(properties.getAllowedOrigins()); + if (!CollectionUtils.isEmpty(properties.getAllowedHeaders())) { + configuration.setAllowedHeaders(properties.getAllowedHeaders()); + } + if (!CollectionUtils.isEmpty(properties.getAllowedMethods())) { + configuration.setAllowedMethods(properties.getAllowedMethods()); + } + if (!CollectionUtils.isEmpty(properties.getExposedHeaders())) { + configuration.setExposedHeaders(properties.getExposedHeaders()); + } + if (properties.getMaxAge() != null) { + configuration.setMaxAge(properties.getMaxAge()); + } + if (properties.getAllowCredentials() != null) { + configuration.setAllowCredentials(properties.getAllowCredentials()); + } + return configuration; + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/env/EnvironmentEndpointAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/env/EnvironmentEndpointAutoConfiguration.java new file mode 100644 index 0000000000..24735272fc --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/env/EnvironmentEndpointAutoConfiguration.java @@ -0,0 +1,43 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.env; + +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; +import org.springframework.boot.actuate.env.EnvironmentEndpoint; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.Environment; + +/** + * {@link EnableAutoConfiguration Auto-configuration} for the {@link EnvironmentEndpoint}. + * + * @author Phillip Webb + * @since 2.0.0 + */ +@Configuration +public class EnvironmentEndpointAutoConfiguration { + + @Bean + @ConditionalOnMissingBean + @ConditionalOnEnabledEndpoint + public EnvironmentEndpoint environmentEndpoint(Environment environment) { + return new EnvironmentEndpoint(environment); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/env/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/env/package-info.java new file mode 100644 index 0000000000..d34d65e09c --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/env/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Auto-configuration for actuator Spring Environment concerns. + */ +package org.springframework.boot.actuate.autoconfigure.env; diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/flyway/FlywayEndpointAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/flyway/FlywayEndpointAutoConfiguration.java new file mode 100644 index 0000000000..8f0a9fbcf2 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/flyway/FlywayEndpointAutoConfiguration.java @@ -0,0 +1,53 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.flyway; + +import java.util.Map; + +import org.flywaydb.core.Flyway; + +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; +import org.springframework.boot.actuate.flyway.FlywayEndpoint; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * {@link EnableAutoConfiguration Auto-configuration} for {@link FlywayEndpoint}. + * + * @author Phillip Webb + * @since 2.0.0 + */ +@Configuration +@ConditionalOnClass(Flyway.class) +@AutoConfigureAfter(FlywayAutoConfiguration.class) +public class FlywayEndpointAutoConfiguration { + + @Bean + @ConditionalOnBean(Flyway.class) + @ConditionalOnMissingBean + @ConditionalOnEnabledEndpoint + public FlywayEndpoint flywayEndpoint(Map flywayBeans) { + return new FlywayEndpoint(flywayBeans); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/flyway/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/flyway/package-info.java new file mode 100644 index 0000000000..936c1feea0 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/flyway/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Auto-configuration for actuator Flyway concerns. + */ +package org.springframework.boot.actuate.autoconfigure.flyway; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/health/CompositeHealthIndicatorConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/CompositeHealthIndicatorConfiguration.java similarity index 100% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/health/CompositeHealthIndicatorConfiguration.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/CompositeHealthIndicatorConfiguration.java diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/health/CompositeReactiveHealthIndicatorConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/CompositeReactiveHealthIndicatorConfiguration.java similarity index 95% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/health/CompositeReactiveHealthIndicatorConfiguration.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/CompositeReactiveHealthIndicatorConfiguration.java index f15112f3eb..e753442300 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/health/CompositeReactiveHealthIndicatorConfiguration.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/CompositeReactiveHealthIndicatorConfiguration.java @@ -32,7 +32,7 @@ import org.springframework.core.ResolvableType; * @author Stephane Nicoll * @since 2.0.0 */ -public class CompositeReactiveHealthIndicatorConfiguration { +public abstract class CompositeReactiveHealthIndicatorConfiguration { @Autowired private HealthAggregator healthAggregator; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/health/ConditionalOnEnabledHealthIndicator.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/ConditionalOnEnabledHealthIndicator.java similarity index 100% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/health/ConditionalOnEnabledHealthIndicator.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/ConditionalOnEnabledHealthIndicator.java diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthEndpointAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthEndpointAutoConfiguration.java new file mode 100644 index 0000000000..07ab3899a3 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthEndpointAutoConfiguration.java @@ -0,0 +1,98 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.health; + +import java.util.LinkedHashMap; +import java.util.Map; + +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; +import org.springframework.boot.actuate.health.CompositeHealthIndicatorFactory; +import org.springframework.boot.actuate.health.HealthAggregator; +import org.springframework.boot.actuate.health.HealthEndpoint; +import org.springframework.boot.actuate.health.HealthIndicator; +import org.springframework.boot.actuate.health.OrderedHealthAggregator; +import org.springframework.boot.actuate.health.ReactiveHealthIndicator; +import org.springframework.boot.actuate.health.StatusEndpoint; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.util.ClassUtils; + +/** + * {@link EnableAutoConfiguration Auto-configuration} for {@link HealthEndpoint}. + * + * @author Andy Wilkinson + * @author Stephane Nicoll + * @author Phillip Webb + * @since 2.0.0 + */ +@Configuration +public class HealthEndpointAutoConfiguration { + + private final HealthIndicator healthIndicator; + + public HealthEndpointAutoConfiguration(ApplicationContext applicationContext, + ObjectProvider healthAggregator) { + this.healthIndicator = getHealthIndicator(applicationContext, + healthAggregator.getIfAvailable(OrderedHealthAggregator::new)); + } + + private HealthIndicator getHealthIndicator(ApplicationContext applicationContext, + HealthAggregator healthAggregator) { + Map indicators = new LinkedHashMap<>(); + indicators.putAll(applicationContext.getBeansOfType(HealthIndicator.class)); + if (ClassUtils.isPresent("reactor.core.publisher.Flux", null)) { + new ReactiveHealthIndicators().get(applicationContext) + .forEach(indicators::putIfAbsent); + } + CompositeHealthIndicatorFactory factory = new CompositeHealthIndicatorFactory(); + return factory.createHealthIndicator(healthAggregator, indicators); + } + + @Bean + @ConditionalOnMissingBean + @ConditionalOnEnabledEndpoint + public HealthEndpoint healthEndpoint() { + return new HealthEndpoint(this.healthIndicator); + } + + @Bean + @ConditionalOnMissingBean + @ConditionalOnEnabledEndpoint + public StatusEndpoint statusEndpoint() { + return new StatusEndpoint(this.healthIndicator); + } + + private static class ReactiveHealthIndicators { + + public Map get(ApplicationContext applicationContext) { + Map indicators = new LinkedHashMap<>(); + applicationContext.getBeansOfType(ReactiveHealthIndicator.class) + .forEach((name, indicator) -> indicators.put(name, adapt(indicator))); + return indicators; + } + + private HealthIndicator adapt(ReactiveHealthIndicator indicator) { + return () -> indicator.health().block(); + } + + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorAutoConfiguration.java new file mode 100644 index 0000000000..0247d393b8 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorAutoConfiguration.java @@ -0,0 +1,64 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.health; + +import org.springframework.boot.actuate.health.ApplicationHealthIndicator; +import org.springframework.boot.actuate.health.HealthAggregator; +import org.springframework.boot.actuate.health.HealthIndicator; +import org.springframework.boot.actuate.health.OrderedHealthAggregator; +import org.springframework.boot.actuate.health.ReactiveHealthIndicator; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * {@link EnableAutoConfiguration Auto-configuration} for {@link HealthIndicator}s. + * + * @author Andy Wilkinson + * @author Stephane Nicoll + * @author Phillip Webb + * @since 2.0.0 + */ +@Configuration +@EnableConfigurationProperties({ HealthIndicatorProperties.class }) +public class HealthIndicatorAutoConfiguration { + + private final HealthIndicatorProperties properties; + + public HealthIndicatorAutoConfiguration(HealthIndicatorProperties properties) { + this.properties = properties; + } + + @Bean + @ConditionalOnMissingBean({ HealthIndicator.class, ReactiveHealthIndicator.class }) + public ApplicationHealthIndicator applicationHealthIndicator() { + return new ApplicationHealthIndicator(); + } + + @Bean + @ConditionalOnMissingBean(HealthAggregator.class) + public OrderedHealthAggregator healthAggregator() { + OrderedHealthAggregator healthAggregator = new OrderedHealthAggregator(); + if (this.properties.getOrder() != null) { + healthAggregator.setStatusOrder(this.properties.getOrder()); + } + return healthAggregator; + } + +} diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorProperties.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorProperties.java similarity index 100% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorProperties.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorProperties.java diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/HealthWebEndpointConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthWebEndpointManagementContextConfiguration.java similarity index 83% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/HealthWebEndpointConfiguration.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthWebEndpointManagementContextConfiguration.java index 59fa01f666..3a49056136 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/HealthWebEndpointConfiguration.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthWebEndpointManagementContextConfiguration.java @@ -14,26 +14,26 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.endpoint.web; +package org.springframework.boot.actuate.autoconfigure.health; import java.util.Collections; import java.util.Map; import org.springframework.beans.factory.ObjectProvider; -import org.springframework.boot.actuate.autoconfigure.endpoint.ConditionalOnEnabledEndpoint; -import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorProperties; -import org.springframework.boot.actuate.endpoint.HealthEndpoint; -import org.springframework.boot.actuate.endpoint.StatusEndpoint; -import org.springframework.boot.actuate.endpoint.web.HealthReactiveWebEndpointExtension; -import org.springframework.boot.actuate.endpoint.web.HealthWebEndpointExtension; -import org.springframework.boot.actuate.endpoint.web.StatusReactiveWebEndpointExtension; -import org.springframework.boot.actuate.endpoint.web.StatusWebEndpointExtension; +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; +import org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration; import org.springframework.boot.actuate.health.CompositeReactiveHealthIndicatorFactory; import org.springframework.boot.actuate.health.HealthAggregator; +import org.springframework.boot.actuate.health.HealthEndpoint; import org.springframework.boot.actuate.health.HealthIndicator; +import org.springframework.boot.actuate.health.HealthReactiveWebEndpointExtension; import org.springframework.boot.actuate.health.HealthStatusHttpMapper; +import org.springframework.boot.actuate.health.HealthWebEndpointExtension; import org.springframework.boot.actuate.health.OrderedHealthAggregator; import org.springframework.boot.actuate.health.ReactiveHealthIndicator; +import org.springframework.boot.actuate.health.StatusEndpoint; +import org.springframework.boot.actuate.health.StatusReactiveWebEndpointExtension; +import org.springframework.boot.actuate.health.StatusWebEndpointExtension; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; @@ -43,13 +43,14 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** - * Configuration for web-specific health endpoints . + * {@link ManagementContextConfiguration} for health endpoints. + * * @author Stephane Nicoll * @since 2.0.0 */ -@Configuration +@ManagementContextConfiguration @EnableConfigurationProperties(HealthIndicatorProperties.class) -public class HealthWebEndpointConfiguration { +public class HealthWebEndpointManagementContextConfiguration { @Bean @ConditionalOnMissingBean diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/health/OnEnabledHealthIndicatorCondition.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/OnEnabledHealthIndicatorCondition.java similarity index 84% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/health/OnEnabledHealthIndicatorCondition.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/OnEnabledHealthIndicatorCondition.java index 3b620ab8fd..ae8da5b168 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/health/OnEnabledHealthIndicatorCondition.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/OnEnabledHealthIndicatorCondition.java @@ -16,7 +16,7 @@ package org.springframework.boot.actuate.autoconfigure.health; -import org.springframework.boot.actuate.autoconfigure.OnEnabledEndpointElementCondition; +import org.springframework.boot.actuate.autoconfigure.OnEndpointElementCondition; import org.springframework.context.annotation.Condition; /** @@ -24,7 +24,7 @@ import org.springframework.context.annotation.Condition; * * @author Stephane Nicoll */ -class OnEnabledHealthIndicatorCondition extends OnEnabledEndpointElementCondition { +class OnEnabledHealthIndicatorCondition extends OnEndpointElementCondition { OnEnabledHealthIndicatorCondition() { super("management.health.", ConditionalOnEnabledHealthIndicator.class); diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/health/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/package-info.java similarity index 93% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/health/package-info.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/package-info.java index 51560b3e17..da369ff332 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/health/package-info.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/package-info.java @@ -15,6 +15,6 @@ */ /** - * Auto-configuration for application health. + * Auto-configuration for actuator health concerns. */ package org.springframework.boot.actuate.autoconfigure.health; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/info/ConditionalOnEnabledInfoContributor.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/info/ConditionalOnEnabledInfoContributor.java similarity index 100% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/info/ConditionalOnEnabledInfoContributor.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/info/ConditionalOnEnabledInfoContributor.java diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/info/InfoContributorAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/info/InfoContributorAutoConfiguration.java similarity index 93% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/info/InfoContributorAutoConfiguration.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/info/InfoContributorAutoConfiguration.java index 46cd31f28f..b191175f43 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/info/InfoContributorAutoConfiguration.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/info/InfoContributorAutoConfiguration.java @@ -16,13 +16,11 @@ package org.springframework.boot.actuate.autoconfigure.info; -import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration; import org.springframework.boot.actuate.info.BuildInfoContributor; import org.springframework.boot.actuate.info.EnvironmentInfoContributor; import org.springframework.boot.actuate.info.GitInfoContributor; import org.springframework.boot.actuate.info.InfoContributor; import org.springframework.boot.autoconfigure.AutoConfigureAfter; -import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnSingleCandidate; @@ -46,7 +44,6 @@ import org.springframework.core.env.ConfigurableEnvironment; */ @Configuration @AutoConfigureAfter(ProjectInfoAutoConfiguration.class) -@AutoConfigureBefore(EndpointAutoConfiguration.class) @EnableConfigurationProperties(InfoContributorProperties.class) public class InfoContributorAutoConfiguration { diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/info/InfoContributorProperties.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/info/InfoContributorProperties.java similarity index 100% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/info/InfoContributorProperties.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/info/InfoContributorProperties.java diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/info/InfoEndpointAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/info/InfoEndpointAutoConfiguration.java new file mode 100644 index 0000000000..2b1583f929 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/info/InfoEndpointAutoConfiguration.java @@ -0,0 +1,50 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.info; + +import java.util.Collections; +import java.util.List; + +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; +import org.springframework.boot.actuate.info.InfoContributor; +import org.springframework.boot.actuate.info.InfoEndpoint; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * {@link EnableAutoConfiguration Auto-configuration} for the {@link InfoEndpoint}. + * + * @author Phillip Webb + * @since 2.0.0 + */ +@Configuration +@AutoConfigureAfter(InfoContributorAutoConfiguration.class) +public class InfoEndpointAutoConfiguration { + + @Bean + @ConditionalOnMissingBean + @ConditionalOnEnabledEndpoint + public InfoEndpoint infoEndpoint( + ObjectProvider> infoContributors) { + return new InfoEndpoint(infoContributors.getIfAvailable(Collections::emptyList)); + } + +} diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/info/OnEnabledInfoContributorCondition.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/info/OnEnabledInfoContributorCondition.java similarity index 84% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/info/OnEnabledInfoContributorCondition.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/info/OnEnabledInfoContributorCondition.java index a0683315eb..5818f239d4 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/info/OnEnabledInfoContributorCondition.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/info/OnEnabledInfoContributorCondition.java @@ -16,7 +16,7 @@ package org.springframework.boot.actuate.autoconfigure.info; -import org.springframework.boot.actuate.autoconfigure.OnEnabledEndpointElementCondition; +import org.springframework.boot.actuate.autoconfigure.OnEndpointElementCondition; import org.springframework.context.annotation.Condition; /** @@ -24,7 +24,7 @@ import org.springframework.context.annotation.Condition; * * @author Stephane Nicoll */ -class OnEnabledInfoContributorCondition extends OnEnabledEndpointElementCondition { +class OnEnabledInfoContributorCondition extends OnEndpointElementCondition { OnEnabledInfoContributorCondition() { super("management.info.", ConditionalOnEnabledInfoContributor.class); diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/info/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/info/package-info.java similarity index 93% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/info/package-info.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/info/package-info.java index ff38c61a8b..787feb2593 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/info/package-info.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/info/package-info.java @@ -15,6 +15,6 @@ */ /** - * Auto-configuration for application info. + * Auto-configuration for actuator info concerns. */ package org.springframework.boot.actuate.autoconfigure.info; diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/jdbc/DataSourceHealthIndicatorAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/jdbc/DataSourceHealthIndicatorAutoConfiguration.java new file mode 100644 index 0000000000..631bb77cdc --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/jdbc/DataSourceHealthIndicatorAutoConfiguration.java @@ -0,0 +1,118 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.jdbc; + +import java.util.Collection; +import java.util.LinkedHashMap; +import java.util.Map; + +import javax.sql.DataSource; + +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.boot.actuate.autoconfigure.health.CompositeHealthIndicatorConfiguration; +import org.springframework.boot.actuate.autoconfigure.health.ConditionalOnEnabledHealthIndicator; +import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration; +import org.springframework.boot.actuate.health.HealthIndicator; +import org.springframework.boot.actuate.jdbc.DataSourceHealthIndicator; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.boot.jdbc.metadata.DataSourcePoolMetadata; +import org.springframework.boot.jdbc.metadata.DataSourcePoolMetadataProvider; +import org.springframework.boot.jdbc.metadata.DataSourcePoolMetadataProviders; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; + +/** + * {@link EnableAutoConfiguration Auto-configuration} for + * {@link DataSourceHealthIndicator}. + * + * @author Dave Syer + * @author Christian Dupuis + * @author Andy Wilkinson + * @author Stephane Nicoll + * @author Arthur Kalimullin + * @since 2.0.0 + */ +@Configuration +@ConditionalOnClass({ JdbcTemplate.class, AbstractRoutingDataSource.class }) +@ConditionalOnBean(DataSource.class) +@ConditionalOnEnabledHealthIndicator("db") +@AutoConfigureBefore(HealthIndicatorAutoConfiguration.class) +@AutoConfigureAfter(DataSourceAutoConfiguration.class) +public class DataSourceHealthIndicatorAutoConfiguration extends + CompositeHealthIndicatorConfiguration + implements InitializingBean { + + private final Map dataSources; + + private final Collection metadataProviders; + + private DataSourcePoolMetadataProvider poolMetadataProvider; + + public DataSourceHealthIndicatorAutoConfiguration( + ObjectProvider> dataSources, + ObjectProvider> metadataProviders) { + this.dataSources = filterDataSources(dataSources.getIfAvailable()); + this.metadataProviders = metadataProviders.getIfAvailable(); + } + + private Map filterDataSources( + Map candidates) { + if (candidates == null) { + return null; + } + Map dataSources = new LinkedHashMap<>(); + for (Map.Entry entry : candidates.entrySet()) { + if (!(entry.getValue() instanceof AbstractRoutingDataSource)) { + dataSources.put(entry.getKey(), entry.getValue()); + } + } + return dataSources; + } + + @Override + public void afterPropertiesSet() throws Exception { + this.poolMetadataProvider = new DataSourcePoolMetadataProviders( + this.metadataProviders); + } + + @Bean + @ConditionalOnMissingBean(name = "dbHealthIndicator") + public HealthIndicator dbHealthIndicator() { + return createHealthIndicator(this.dataSources); + } + + @Override + protected DataSourceHealthIndicator createHealthIndicator(DataSource source) { + return new DataSourceHealthIndicator(source, getValidationQuery(source)); + } + + private String getValidationQuery(DataSource source) { + DataSourcePoolMetadata poolMetadata = this.poolMetadataProvider + .getDataSourcePoolMetadata(source); + return (poolMetadata == null ? null : poolMetadata.getValidationQuery()); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/jdbc/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/jdbc/package-info.java new file mode 100644 index 0000000000..ebaa037fda --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/jdbc/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Auto-configuration for actuator JDBC concerns. + */ +package org.springframework.boot.actuate.autoconfigure.jdbc; diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/jms/JmsHealthIndicatorAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/jms/JmsHealthIndicatorAutoConfiguration.java new file mode 100644 index 0000000000..350a5ceeea --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/jms/JmsHealthIndicatorAutoConfiguration.java @@ -0,0 +1,68 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.jms; + +import java.util.Map; + +import javax.jms.ConnectionFactory; + +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.boot.actuate.autoconfigure.health.CompositeHealthIndicatorConfiguration; +import org.springframework.boot.actuate.autoconfigure.health.ConditionalOnEnabledHealthIndicator; +import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration; +import org.springframework.boot.actuate.health.HealthIndicator; +import org.springframework.boot.actuate.jms.JmsHealthIndicator; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration; +import org.springframework.boot.autoconfigure.jms.artemis.ArtemisAutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * {@link EnableAutoConfiguration Auto-configuration} for {@link JmsHealthIndicator}. + * + * @author Stephane Nicoll + * @since 2.0.0 + */ +@Configuration +@ConditionalOnClass(ConnectionFactory.class) +@ConditionalOnBean(ConnectionFactory.class) +@ConditionalOnEnabledHealthIndicator("jms") +@AutoConfigureBefore(HealthIndicatorAutoConfiguration.class) +@AutoConfigureAfter({ ActiveMQAutoConfiguration.class, ArtemisAutoConfiguration.class }) +public class JmsHealthIndicatorAutoConfiguration extends + CompositeHealthIndicatorConfiguration { + + private final Map connectionFactories; + + public JmsHealthIndicatorAutoConfiguration( + ObjectProvider> connectionFactories) { + this.connectionFactories = connectionFactories.getIfAvailable(); + } + + @Bean + @ConditionalOnMissingBean(name = "jmsHealthIndicator") + public HealthIndicator jmsHealthIndicator() { + return createHealthIndicator(this.connectionFactories); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/jms/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/jms/package-info.java new file mode 100644 index 0000000000..3fb20861be --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/jms/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Auto-configuration for actuator JMS concerns. + */ +package org.springframework.boot.actuate.autoconfigure.jms; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaManagementContextConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaManagementContextConfiguration.java similarity index 94% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaManagementContextConfiguration.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaManagementContextConfiguration.java index 352d39757f..1ab0d97261 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaManagementContextConfiguration.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaManagementContextConfiguration.java @@ -18,8 +18,8 @@ package org.springframework.boot.actuate.autoconfigure.jolokia; import org.jolokia.http.AgentServlet; -import org.springframework.boot.actuate.autoconfigure.ManagementContextConfiguration; -import org.springframework.boot.actuate.endpoint.mvc.ManagementServletContext; +import org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration; +import org.springframework.boot.actuate.autoconfigure.web.servlet.ManagementServletContext; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaProperties.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaProperties.java similarity index 100% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaProperties.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaProperties.java diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/jolokia/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/jolokia/package-info.java new file mode 100644 index 0000000000..60cfe6a43b --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/jolokia/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Auto-configuration for actuator Jolokia support. + */ +package org.springframework.boot.actuate.autoconfigure.jolokia; diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/ldap/LdapHealthIndicatorAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/ldap/LdapHealthIndicatorAutoConfiguration.java new file mode 100644 index 0000000000..049b459ed8 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/ldap/LdapHealthIndicatorAutoConfiguration.java @@ -0,0 +1,66 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.ldap; + +import java.util.Map; + +import org.springframework.boot.actuate.autoconfigure.health.CompositeHealthIndicatorConfiguration; +import org.springframework.boot.actuate.autoconfigure.health.ConditionalOnEnabledHealthIndicator; +import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration; +import org.springframework.boot.actuate.health.HealthIndicator; +import org.springframework.boot.actuate.ldap.LdapHealthIndicator; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.data.ldap.LdapDataAutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.ldap.core.LdapOperations; + +/** + * {@link EnableAutoConfiguration Auto-configuration} for {@link LdapHealthIndicator}. + * + * @author Eddú Meléndez + * @author Stephane Nicoll + * @since 2.0.0 + */ +@Configuration +@ConditionalOnClass(LdapOperations.class) +@ConditionalOnBean(LdapOperations.class) +@ConditionalOnEnabledHealthIndicator("ldap") +@AutoConfigureBefore(HealthIndicatorAutoConfiguration.class) +@AutoConfigureAfter(LdapDataAutoConfiguration.class) +public class LdapHealthIndicatorAutoConfiguration extends + CompositeHealthIndicatorConfiguration { + + private final Map ldapOperations; + + public LdapHealthIndicatorAutoConfiguration( + Map ldapOperations) { + this.ldapOperations = ldapOperations; + } + + @Bean + @ConditionalOnMissingBean(name = "ldapHealthIndicator") + public HealthIndicator ldapHealthIndicator() { + return createHealthIndicator(this.ldapOperations); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/ldap/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/ldap/package-info.java new file mode 100644 index 0000000000..a0ef6b0b86 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/ldap/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Auto-configuration for actuator LDAP concerns. + */ +package org.springframework.boot.actuate.autoconfigure.ldap; diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/liquibase/LiquibaseEndpointAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/liquibase/LiquibaseEndpointAutoConfiguration.java new file mode 100644 index 0000000000..59f6cb08b2 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/liquibase/LiquibaseEndpointAutoConfiguration.java @@ -0,0 +1,54 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.liquibase; + +import java.util.Map; + +import liquibase.integration.spring.SpringLiquibase; + +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; +import org.springframework.boot.actuate.liquibase.LiquibaseEndpoint; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * {@link EnableAutoConfiguration Auto-configuration} for {@link LiquibaseEndpoint}. + * + * @author Phillip Webb + * @since 2.0.0 + */ +@Configuration +@ConditionalOnClass(SpringLiquibase.class) +@AutoConfigureAfter(LiquibaseAutoConfiguration.class) +public class LiquibaseEndpointAutoConfiguration { + + @Bean + @ConditionalOnBean(SpringLiquibase.class) + @ConditionalOnMissingBean + @ConditionalOnEnabledEndpoint + public LiquibaseEndpoint liquibaseEndpoint( + Map liquibaseBeans) { + return new LiquibaseEndpoint(liquibaseBeans); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/liquibase/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/liquibase/package-info.java new file mode 100644 index 0000000000..333271a8b9 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/liquibase/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Auto-configuration for actuator Liquibase concerns. + */ +package org.springframework.boot.actuate.autoconfigure.liquibase; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/WebEndpointManagementContextConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/LogFileWebEndpointManagementContextConfiguration.java similarity index 75% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/WebEndpointManagementContextConfiguration.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/LogFileWebEndpointManagementContextConfiguration.java index b076c58375..e8cab2d543 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/WebEndpointManagementContextConfiguration.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/LogFileWebEndpointManagementContextConfiguration.java @@ -14,12 +14,10 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.endpoint.web; +package org.springframework.boot.actuate.autoconfigure.logging; -import org.springframework.boot.actuate.autoconfigure.ManagementContextConfiguration; -import org.springframework.boot.actuate.autoconfigure.endpoint.ConditionalOnEnabledEndpoint; -import org.springframework.boot.actuate.endpoint.web.HeapDumpWebEndpoint; -import org.springframework.boot.actuate.endpoint.web.LogFileWebEndpoint; +import org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration; +import org.springframework.boot.actuate.logger.LogFileWebEndpoint; import org.springframework.boot.autoconfigure.condition.ConditionMessage; import org.springframework.boot.autoconfigure.condition.ConditionOutcome; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; @@ -27,32 +25,23 @@ import org.springframework.boot.autoconfigure.condition.SpringBootCondition; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ConditionContext; import org.springframework.context.annotation.Conditional; -import org.springframework.context.annotation.Import; import org.springframework.core.env.Environment; import org.springframework.core.type.AnnotatedTypeMetadata; import org.springframework.util.StringUtils; /** - * Configuration for web-specific endpoint functionality. + * {@link ManagementContextConfiguration} for {@link LogFileWebEndpoint}. * * @author Andy Wilkinson * @since 2.0.0 */ @ManagementContextConfiguration -@Import(HealthWebEndpointConfiguration.class) -public class WebEndpointManagementContextConfiguration { - - @Bean - @ConditionalOnMissingBean - @ConditionalOnEnabledEndpoint - public HeapDumpWebEndpoint heapDumpWebEndpoint() { - return new HeapDumpWebEndpoint(); - } +public class LogFileWebEndpointManagementContextConfiguration { @Bean @ConditionalOnMissingBean @Conditional(LogFileCondition.class) - public LogFileWebEndpoint logfileWebEndpoint(Environment environment) { + public LogFileWebEndpoint logFileWebEndpoint(Environment environment) { return new LogFileWebEndpoint(environment); } diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/LoggersEndpointAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/LoggersEndpointAutoConfiguration.java new file mode 100644 index 0000000000..9eb8c374af --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/LoggersEndpointAutoConfiguration.java @@ -0,0 +1,45 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.logging; + +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; +import org.springframework.boot.actuate.logging.LoggersEndpoint; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.logging.LoggingSystem; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * {@link EnableAutoConfiguration Auto-configuration} for the {@link LoggersEndpoint}. + * + * @author Phillip Webb + * @since 2.0.0 + */ +@Configuration +public class LoggersEndpointAutoConfiguration { + + @Bean + @ConditionalOnBean(LoggingSystem.class) + @ConditionalOnMissingBean + @ConditionalOnEnabledEndpoint + public LoggersEndpoint loggersEndpoint(LoggingSystem loggingSystem) { + return new LoggersEndpoint(loggingSystem); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/package-info.java new file mode 100644 index 0000000000..c9693ba275 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Auto-configuration for actuator logging concerns. + */ +package org.springframework.boot.actuate.autoconfigure.logging; diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/mail/MailHealthIndicatorAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/mail/MailHealthIndicatorAutoConfiguration.java new file mode 100644 index 0000000000..c5d38bc63c --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/mail/MailHealthIndicatorAutoConfiguration.java @@ -0,0 +1,66 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.mail; + +import java.util.Map; + +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.boot.actuate.autoconfigure.health.CompositeHealthIndicatorConfiguration; +import org.springframework.boot.actuate.autoconfigure.health.ConditionalOnEnabledHealthIndicator; +import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration; +import org.springframework.boot.actuate.health.HealthIndicator; +import org.springframework.boot.actuate.mail.MailHealthIndicator; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.mail.javamail.JavaMailSenderImpl; + +/** + * {@link EnableAutoConfiguration Auto-configuration} for {@link MailHealthIndicator}. + * + * @author Johannes Edmeier + * @since 2.0.0 + */ +@Configuration +@ConditionalOnClass(JavaMailSenderImpl.class) +@ConditionalOnBean(JavaMailSenderImpl.class) +@ConditionalOnEnabledHealthIndicator("mail") +@AutoConfigureBefore(HealthIndicatorAutoConfiguration.class) +@AutoConfigureAfter(MailSenderAutoConfiguration.class) +public class MailHealthIndicatorAutoConfiguration extends + CompositeHealthIndicatorConfiguration { + + private final Map mailSenders; + + public MailHealthIndicatorAutoConfiguration( + ObjectProvider> mailSenders) { + this.mailSenders = mailSenders.getIfAvailable(); + } + + @Bean + @ConditionalOnMissingBean(name = "mailHealthIndicator") + public HealthIndicator mailHealthIndicator() { + return createHealthIndicator(this.mailSenders); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/mail/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/mail/package-info.java new file mode 100644 index 0000000000..1f2ad84c53 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/mail/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Auto-configuration for actuator Java Mail concerns. + */ +package org.springframework.boot.actuate.autoconfigure.mail; diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/management/HeapDumpWebEndpointManagementContextConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/management/HeapDumpWebEndpointManagementContextConfiguration.java new file mode 100644 index 0000000000..a5f8988ba3 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/management/HeapDumpWebEndpointManagementContextConfiguration.java @@ -0,0 +1,41 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.management; + +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; +import org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration; +import org.springframework.boot.actuate.management.HeapDumpWebEndpoint; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; + +/** + * {@link ManagementContextConfiguration} for {@link HeapDumpWebEndpoint}. + * + * @author Andy Wilkinson + * @since 2.0.0 + */ +@ManagementContextConfiguration +public class HeapDumpWebEndpointManagementContextConfiguration { + + @Bean + @ConditionalOnMissingBean + @ConditionalOnEnabledEndpoint + public HeapDumpWebEndpoint heapDumpWebEndpoint() { + return new HeapDumpWebEndpoint(); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/management/ThreadDumpEndpointAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/management/ThreadDumpEndpointAutoConfiguration.java new file mode 100644 index 0000000000..75628f543e --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/management/ThreadDumpEndpointAutoConfiguration.java @@ -0,0 +1,42 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.management; + +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; +import org.springframework.boot.actuate.management.ThreadDumpEndpoint; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * {@link EnableAutoConfiguration Auto-configuration} for the {@link ThreadDumpEndpoint}. + * + * @author Phillip Webb + * @since 2.0.0 + */ +@Configuration +public class ThreadDumpEndpointAutoConfiguration { + + @Bean + @ConditionalOnMissingBean + @ConditionalOnEnabledEndpoint + public ThreadDumpEndpoint dumpEndpoint() { + return new ThreadDumpEndpoint(); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/management/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/management/package-info.java new file mode 100644 index 0000000000..fe950c4f44 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/management/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Auto-configuration for actuator management concerns. + */ +package org.springframework.boot.actuate.autoconfigure.management; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/ActuatorMetricWriter.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/ActuatorMetricWriter.java similarity index 100% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/ActuatorMetricWriter.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/ActuatorMetricWriter.java diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/ExportMetricReader.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/ExportMetricReader.java similarity index 100% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/ExportMetricReader.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/ExportMetricReader.java diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/ExportMetricWriter.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/ExportMetricWriter.java similarity index 100% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/ExportMetricWriter.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/ExportMetricWriter.java diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricExportAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricExportAutoConfiguration.java similarity index 98% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricExportAutoConfiguration.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricExportAutoConfiguration.java index 07e5fe8741..277adb0580 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricExportAutoConfiguration.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricExportAutoConfiguration.java @@ -23,12 +23,12 @@ import java.util.Map; import org.springframework.beans.factory.ObjectProvider; import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.actuate.endpoint.MetricsEndpointMetricReader; import org.springframework.boot.actuate.metrics.export.Exporter; import org.springframework.boot.actuate.metrics.export.MetricExportProperties; import org.springframework.boot.actuate.metrics.export.MetricExporters; import org.springframework.boot.actuate.metrics.reader.CompositeMetricReader; import org.springframework.boot.actuate.metrics.reader.MetricReader; +import org.springframework.boot.actuate.metrics.reader.MetricsEndpointMetricReader; import org.springframework.boot.actuate.metrics.statsd.StatsdMetricWriter; import org.springframework.boot.actuate.metrics.writer.GaugeWriter; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricFilterAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricFilterAutoConfiguration.java similarity index 100% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricFilterAutoConfiguration.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricFilterAutoConfiguration.java diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricFilterProperties.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricFilterProperties.java similarity index 100% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricFilterProperties.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricFilterProperties.java diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricRepositoryAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricRepositoryAutoConfiguration.java similarity index 100% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricRepositoryAutoConfiguration.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricRepositoryAutoConfiguration.java diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsChannelAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsChannelAutoConfiguration.java similarity index 100% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsChannelAutoConfiguration.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsChannelAutoConfiguration.java diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsDropwizardAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsDropwizardAutoConfiguration.java similarity index 97% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsDropwizardAutoConfiguration.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsDropwizardAutoConfiguration.java index 48a9656e3c..82e69dfd34 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsDropwizardAutoConfiguration.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsDropwizardAutoConfiguration.java @@ -19,11 +19,11 @@ package org.springframework.boot.actuate.autoconfigure.metrics; import com.codahale.metrics.MetricRegistry; import org.springframework.beans.factory.ObjectProvider; -import org.springframework.boot.actuate.endpoint.MetricReaderPublicMetrics; import org.springframework.boot.actuate.metrics.CounterService; import org.springframework.boot.actuate.metrics.GaugeService; import org.springframework.boot.actuate.metrics.dropwizard.DropwizardMetricServices; import org.springframework.boot.actuate.metrics.dropwizard.ReservoirFactory; +import org.springframework.boot.actuate.metrics.reader.MetricReaderPublicMetrics; import org.springframework.boot.actuate.metrics.reader.MetricRegistryMetricReader; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsEndpointAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsEndpointAutoConfiguration.java new file mode 100644 index 0000000000..97323fae09 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsEndpointAutoConfiguration.java @@ -0,0 +1,62 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.metrics; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; +import org.springframework.boot.actuate.metrics.MetricsEndpoint; +import org.springframework.boot.actuate.metrics.PublicMetrics; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.annotation.AnnotationAwareOrderComparator; + +/** + * {@link EnableAutoConfiguration Auto-configuration} for the {@link MetricsEndpoint}. + * + * @author Phillip Webb + * @since 2.0.0 + */ +@Configuration +@AutoConfigureAfter(PublicMetricsAutoConfiguration.class) +public class MetricsEndpointAutoConfiguration { + + @Bean + @ConditionalOnMissingBean + @ConditionalOnEnabledEndpoint + public MetricsEndpoint metricsEndpoint( + ObjectProvider> publicMetrics) { + return metricsEndpoint(publicMetrics.getIfAvailable(Collections::emptyList)); + } + + private MetricsEndpoint metricsEndpoint(List publicMetrics) { + return new MetricsEndpoint(sort(publicMetrics)); + } + + private List sort(List publicMetrics) { + List sorted = new ArrayList<>(publicMetrics); + Collections.sort(sorted, AnnotationAwareOrderComparator.INSTANCE); + return sorted; + } + +} diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/PublicMetricsAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/PublicMetricsAutoConfiguration.java similarity index 87% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/PublicMetricsAutoConfiguration.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/PublicMetricsAutoConfiguration.java index 7aefe9d184..c66c08d7b1 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/PublicMetricsAutoConfiguration.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/PublicMetricsAutoConfiguration.java @@ -27,21 +27,19 @@ import org.apache.catalina.startup.Tomcat; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.actuate.autoconfigure.cache.CacheStatisticsAutoConfiguration; -import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration; +import org.springframework.boot.actuate.cache.CachePublicMetrics; import org.springframework.boot.actuate.cache.CacheStatisticsProvider; -import org.springframework.boot.actuate.endpoint.CachePublicMetrics; -import org.springframework.boot.actuate.endpoint.DataSourcePublicMetrics; -import org.springframework.boot.actuate.endpoint.MetricReaderPublicMetrics; -import org.springframework.boot.actuate.endpoint.PublicMetrics; -import org.springframework.boot.actuate.endpoint.RichGaugeReaderPublicMetrics; -import org.springframework.boot.actuate.endpoint.SystemPublicMetrics; -import org.springframework.boot.actuate.endpoint.TomcatPublicMetrics; +import org.springframework.boot.actuate.metrics.DataSourcePublicMetrics; +import org.springframework.boot.actuate.metrics.PublicMetrics; +import org.springframework.boot.actuate.metrics.SystemPublicMetrics; +import org.springframework.boot.actuate.metrics.TomcatPublicMetrics; import org.springframework.boot.actuate.metrics.integration.SpringIntegrationMetricReader; import org.springframework.boot.actuate.metrics.reader.CompositeMetricReader; import org.springframework.boot.actuate.metrics.reader.MetricReader; +import org.springframework.boot.actuate.metrics.reader.MetricReaderPublicMetrics; import org.springframework.boot.actuate.metrics.rich.RichGaugeReader; +import org.springframework.boot.actuate.metrics.rich.RichGaugeReaderPublicMetrics; import org.springframework.boot.autoconfigure.AutoConfigureAfter; -import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; @@ -51,7 +49,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplicat import org.springframework.boot.autoconfigure.condition.SearchStrategy; import org.springframework.boot.autoconfigure.integration.IntegrationAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvider; +import org.springframework.boot.jdbc.metadata.DataSourcePoolMetadataProvider; import org.springframework.cache.CacheManager; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -68,7 +66,6 @@ import org.springframework.integration.support.management.IntegrationManagementC * @since 2.0.0 */ @Configuration -@AutoConfigureBefore(EndpointAutoConfiguration.class) @AutoConfigureAfter({ DataSourceAutoConfiguration.class, CacheAutoConfiguration.class, MetricRepositoryAutoConfiguration.class, CacheStatisticsAutoConfiguration.class, IntegrationAutoConfiguration.class }) diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/package-info.java similarity index 92% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/package-info.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/package-info.java index d6fe8ba5c8..7dbdea918f 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/package-info.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/package-info.java @@ -15,6 +15,6 @@ */ /** - * Auto-configuration for metrics. + * Auto-configuration for actuator metrics concerns. */ package org.springframework.boot.actuate.autoconfigure.metrics; diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/mongo/MongoHealthIndicatorAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/mongo/MongoHealthIndicatorAutoConfiguration.java new file mode 100644 index 0000000000..92ac844f24 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/mongo/MongoHealthIndicatorAutoConfiguration.java @@ -0,0 +1,66 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.mongo; + +import java.util.Map; + +import org.springframework.boot.actuate.autoconfigure.health.CompositeHealthIndicatorConfiguration; +import org.springframework.boot.actuate.autoconfigure.health.ConditionalOnEnabledHealthIndicator; +import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration; +import org.springframework.boot.actuate.health.HealthIndicator; +import org.springframework.boot.actuate.mongo.MongoHealthIndicator; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration; +import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.mongodb.core.MongoTemplate; + +/** + * {@link EnableAutoConfiguration Auto-configuration} for {@link MongoHealthIndicator}. + * + * @author Christian Dupuis + * @since 2.0.0 + */ +@Configuration +@ConditionalOnClass(MongoTemplate.class) +@ConditionalOnBean(MongoTemplate.class) +@ConditionalOnEnabledHealthIndicator("mongo") +@AutoConfigureBefore(HealthIndicatorAutoConfiguration.class) +@AutoConfigureAfter({ MongoAutoConfiguration.class, MongoDataAutoConfiguration.class }) +public class MongoHealthIndicatorAutoConfiguration extends + CompositeHealthIndicatorConfiguration { + + private final Map mongoTemplates; + + public MongoHealthIndicatorAutoConfiguration( + Map mongoTemplates) { + this.mongoTemplates = mongoTemplates; + } + + @Bean + @ConditionalOnMissingBean(name = "mongoHealthIndicator") + public HealthIndicator mongoHealthIndicator() { + return createHealthIndicator(this.mongoTemplates); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/mongo/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/mongo/package-info.java new file mode 100644 index 0000000000..f4e0b8660f --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/mongo/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Auto-configuration for actuator MongoDB concerns. + */ +package org.springframework.boot.actuate.autoconfigure.mongo; diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/neo4j/Neo4jHealthIndicatorAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/neo4j/Neo4jHealthIndicatorAutoConfiguration.java new file mode 100644 index 0000000000..9962fb5779 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/neo4j/Neo4jHealthIndicatorAutoConfiguration.java @@ -0,0 +1,67 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.neo4j; + +import java.util.Map; + +import org.neo4j.ogm.session.SessionFactory; + +import org.springframework.boot.actuate.autoconfigure.health.CompositeHealthIndicatorConfiguration; +import org.springframework.boot.actuate.autoconfigure.health.ConditionalOnEnabledHealthIndicator; +import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration; +import org.springframework.boot.actuate.health.HealthIndicator; +import org.springframework.boot.actuate.neo4j.Neo4jHealthIndicator; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.data.neo4j.Neo4jDataAutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * {@link EnableAutoConfiguration Auto-configuration} for {@link Neo4jHealthIndicator}. + * + * @author Eric Spiegelberg + * @author Stephane Nicoll + * @since 2.0.0 + */ +@Configuration +@ConditionalOnClass(SessionFactory.class) +@ConditionalOnBean(SessionFactory.class) +@ConditionalOnEnabledHealthIndicator("neo4j") +@AutoConfigureBefore(HealthIndicatorAutoConfiguration.class) +@AutoConfigureAfter(Neo4jDataAutoConfiguration.class) +public class Neo4jHealthIndicatorAutoConfiguration extends + CompositeHealthIndicatorConfiguration { + + private final Map sessionFactories; + + public Neo4jHealthIndicatorAutoConfiguration( + Map sessionFactories) { + this.sessionFactories = sessionFactories; + } + + @Bean + @ConditionalOnMissingBean(name = "neo4jHealthIndicator") + public HealthIndicator neo4jHealthIndicator() { + return createHealthIndicator(this.sessionFactories); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/neo4j/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/neo4j/package-info.java new file mode 100644 index 0000000000..213093e133 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/neo4j/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Auto-configuration for actuator Neo4J concerns. + */ +package org.springframework.boot.actuate.autoconfigure.neo4j; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/package-info.java similarity index 91% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/package-info.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/package-info.java index 79d99200db..cf096ee6d6 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/package-info.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/package-info.java @@ -15,6 +15,6 @@ */ /** - * Classes for general Actuator auto-configuration concerns. + * Classes for general actuator auto-configuration concerns. */ package org.springframework.boot.actuate.autoconfigure; diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/redis/RedisHealthIndicatorAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/redis/RedisHealthIndicatorAutoConfiguration.java new file mode 100644 index 0000000000..c5be3c9ac1 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/redis/RedisHealthIndicatorAutoConfiguration.java @@ -0,0 +1,45 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.redis; + +import org.springframework.boot.actuate.autoconfigure.health.ConditionalOnEnabledHealthIndicator; +import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration; +import org.springframework.boot.actuate.redis.RedisHealthIndicator; +import org.springframework.boot.actuate.redis.RedisReactiveHealthIndicator; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; + +/** + * {@link EnableAutoConfiguration Auto-configuration} for {@link RedisHealthIndicator} and + * {@link RedisReactiveHealthIndicator}. + * + * @author Phillip Webb + * @since 2.0.0 + */ +@Configuration +@ConditionalOnEnabledHealthIndicator("redis") +@AutoConfigureBefore(HealthIndicatorAutoConfiguration.class) +@AutoConfigureAfter(RedisAutoConfiguration.class) +@Import({ RedisReactiveHealthIndicatorConfiguration.class, + RedisHealthIndicatorConfiguration.class }) +public class RedisHealthIndicatorAutoConfiguration { + +} diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/redis/RedisHealthIndicatorConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/redis/RedisHealthIndicatorConfiguration.java new file mode 100644 index 0000000000..3af0bfc6b7 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/redis/RedisHealthIndicatorConfiguration.java @@ -0,0 +1,58 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.redis; + +import java.util.Map; + +import org.springframework.boot.actuate.autoconfigure.health.CompositeHealthIndicatorConfiguration; +import org.springframework.boot.actuate.health.HealthIndicator; +import org.springframework.boot.actuate.redis.RedisHealthIndicator; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; + +/** + * Configuration for {@link RedisHealthIndicator}. + * + * @author Christian Dupuis + * @author Richard Santana + * @author Stephane Nicoll + * @author Mark Paluch + */ +@Configuration +@ConditionalOnClass(RedisConnectionFactory.class) +@ConditionalOnBean(RedisConnectionFactory.class) +class RedisHealthIndicatorConfiguration extends + CompositeHealthIndicatorConfiguration { + + private final Map redisConnectionFactories; + + RedisHealthIndicatorConfiguration( + Map redisConnectionFactories) { + this.redisConnectionFactories = redisConnectionFactories; + } + + @Bean + @ConditionalOnMissingBean(name = "redisHealthIndicator") + public HealthIndicator redisHealthIndicator() { + return createHealthIndicator(this.redisConnectionFactories); + } + +} diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/health/ReactiveHealthIndicatorsConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/redis/RedisReactiveHealthIndicatorConfiguration.java similarity index 54% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/health/ReactiveHealthIndicatorsConfiguration.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/redis/RedisReactiveHealthIndicatorConfiguration.java index bb6e8f30ef..e9e6151652 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/health/ReactiveHealthIndicatorsConfiguration.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/redis/RedisReactiveHealthIndicatorConfiguration.java @@ -14,14 +14,15 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.health; +package org.springframework.boot.actuate.autoconfigure.redis; import java.util.Map; import reactor.core.publisher.Flux; +import org.springframework.boot.actuate.autoconfigure.health.CompositeReactiveHealthIndicatorConfiguration; import org.springframework.boot.actuate.health.ReactiveHealthIndicator; -import org.springframework.boot.actuate.health.RedisReactiveHealthIndicator; +import org.springframework.boot.actuate.redis.RedisReactiveHealthIndicator; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; @@ -30,34 +31,30 @@ import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.ReactiveRedisConnectionFactory; /** - * Configuration for available {@link ReactiveHealthIndicator reactive health indicators}. + * Configuration for {@link RedisReactiveHealthIndicator}. * + * @author Christian Dupuis + * @author Richard Santana * @author Stephane Nicoll - * @since 2.0.0 + * @author Mark Paluch */ @Configuration @ConditionalOnClass(Flux.class) -public class ReactiveHealthIndicatorsConfiguration { +@ConditionalOnBean(ReactiveRedisConnectionFactory.class) +class RedisReactiveHealthIndicatorConfiguration extends + CompositeReactiveHealthIndicatorConfiguration { - @Configuration - @ConditionalOnBean(ReactiveRedisConnectionFactory.class) - @ConditionalOnEnabledHealthIndicator("redis") - static class RedisHealthIndicatorConfiguration extends - CompositeReactiveHealthIndicatorConfiguration { + private final Map redisConnectionFactories; - private final Map redisConnectionFactories; - - RedisHealthIndicatorConfiguration( - Map redisConnectionFactories) { - this.redisConnectionFactories = redisConnectionFactories; - } - - @Bean - @ConditionalOnMissingBean(name = "redisHealthIndicator") - public ReactiveHealthIndicator redisHealthIndicator() { - return createHealthIndicator(this.redisConnectionFactories); - } + RedisReactiveHealthIndicatorConfiguration( + Map redisConnectionFactories) { + this.redisConnectionFactories = redisConnectionFactories; + } + @Bean + @ConditionalOnMissingBean(name = "redisHealthIndicator") + public ReactiveHealthIndicator redisHealthIndicator() { + return createHealthIndicator(this.redisConnectionFactories); } } diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/redis/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/redis/package-info.java new file mode 100644 index 0000000000..ac46c6de76 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/redis/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Auto-configuration for actuator Redis concerns. + */ +package org.springframework.boot.actuate.autoconfigure.redis; diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/solr/SolrHealthIndicatorAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/solr/SolrHealthIndicatorAutoConfiguration.java new file mode 100644 index 0000000000..90ee7ba25e --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/solr/SolrHealthIndicatorAutoConfiguration.java @@ -0,0 +1,66 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.solr; + +import java.util.Map; + +import org.apache.solr.client.solrj.SolrClient; + +import org.springframework.boot.actuate.autoconfigure.health.CompositeHealthIndicatorConfiguration; +import org.springframework.boot.actuate.autoconfigure.health.ConditionalOnEnabledHealthIndicator; +import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration; +import org.springframework.boot.actuate.health.HealthIndicator; +import org.springframework.boot.actuate.solr.SolrHealthIndicator; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * {@link EnableAutoConfiguration Auto-configuration} for {@link SolrHealthIndicator}. + * + * @author Andy Wilkinson + * @author Stephane Nicoll + * @since 2.0.0 + */ +@Configuration +@ConditionalOnClass(SolrClient.class) +@ConditionalOnBean(SolrClient.class) +@ConditionalOnEnabledHealthIndicator("solr") +@AutoConfigureBefore(HealthIndicatorAutoConfiguration.class) +@AutoConfigureAfter(SolrAutoConfiguration.class) +public class SolrHealthIndicatorAutoConfiguration + extends CompositeHealthIndicatorConfiguration { + + private final Map solrClients; + + public SolrHealthIndicatorAutoConfiguration(Map solrClients) { + this.solrClients = solrClients; + } + + @Bean + @ConditionalOnMissingBean(name = "solrHealthIndicator") + public HealthIndicator solrHealthIndicator() { + return createHealthIndicator(this.solrClients); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/solr/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/solr/package-info.java new file mode 100644 index 0000000000..2b19a725eb --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/solr/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Auto-configuration for actuator Solr concerns. + */ +package org.springframework.boot.actuate.autoconfigure.solr; diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/system/DiskSpaceHealthIndicatorAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/system/DiskSpaceHealthIndicatorAutoConfiguration.java new file mode 100644 index 0000000000..8c61f849d2 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/system/DiskSpaceHealthIndicatorAutoConfiguration.java @@ -0,0 +1,54 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.system; + +import org.springframework.boot.actuate.autoconfigure.health.ConditionalOnEnabledHealthIndicator; +import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration; +import org.springframework.boot.actuate.system.DiskSpaceHealthIndicator; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * {@link EnableAutoConfiguration Auto-configuration} for + * {@link DiskSpaceHealthIndicator}. + * + * @author Mattias Severson + * @author Andy Wilkinson + * @since 2.0.0 + */ +@Configuration +@ConditionalOnEnabledHealthIndicator("diskspace") +@AutoConfigureBefore(HealthIndicatorAutoConfiguration.class) +public class DiskSpaceHealthIndicatorAutoConfiguration { + + @Bean + @ConditionalOnMissingBean(name = "diskSpaceHealthIndicator") + public DiskSpaceHealthIndicator diskSpaceHealthIndicator( + DiskSpaceHealthIndicatorProperties properties) { + return new DiskSpaceHealthIndicator(properties.getPath(), + properties.getThreshold()); + } + + @Bean + public DiskSpaceHealthIndicatorProperties diskSpaceHealthIndicatorProperties() { + return new DiskSpaceHealthIndicatorProperties(); + } + +} diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/DiskSpaceHealthIndicatorProperties.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/system/DiskSpaceHealthIndicatorProperties.java similarity index 92% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/DiskSpaceHealthIndicatorProperties.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/system/DiskSpaceHealthIndicatorProperties.java index 5295f3cb50..b6f0ae8af4 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/DiskSpaceHealthIndicatorProperties.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/system/DiskSpaceHealthIndicatorProperties.java @@ -14,10 +14,11 @@ * limitations under the License. */ -package org.springframework.boot.actuate.health; +package org.springframework.boot.actuate.autoconfigure.system; import java.io.File; +import org.springframework.boot.actuate.system.DiskSpaceHealthIndicator; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.util.Assert; diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/system/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/system/package-info.java new file mode 100644 index 0000000000..5165a14bfa --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/system/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Auto-configuration for actuator system concerns. + */ +package org.springframework.boot.actuate.autoconfigure.system; diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/TraceEndpointAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/TraceEndpointAutoConfiguration.java new file mode 100644 index 0000000000..aca48c5e79 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/TraceEndpointAutoConfiguration.java @@ -0,0 +1,46 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.trace; + +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; +import org.springframework.boot.actuate.trace.InMemoryTraceRepository; +import org.springframework.boot.actuate.trace.TraceEndpoint; +import org.springframework.boot.actuate.trace.TraceRepository; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * {@link EnableAutoConfiguration Auto-configuration} for the {@link TraceEndpoint}. + * + * @author Phillip Webb + * @since 2.0.0 + */ +@Configuration +public class TraceEndpointAutoConfiguration { + + @Bean + @ConditionalOnMissingBean + @ConditionalOnEnabledEndpoint + public TraceEndpoint traceEndpoint(ObjectProvider traceRepository) { + return new TraceEndpoint( + traceRepository.getIfAvailable(() -> new InMemoryTraceRepository())); + } + +} diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/TraceRepositoryAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/TraceRepositoryAutoConfiguration.java similarity index 100% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/TraceRepositoryAutoConfiguration.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/TraceRepositoryAutoConfiguration.java diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/TraceWebFilterAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/TraceWebFilterAutoConfiguration.java similarity index 97% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/TraceWebFilterAutoConfiguration.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/TraceWebFilterAutoConfiguration.java index ea3685c4c9..a9fa4c5d6d 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/TraceWebFilterAutoConfiguration.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/TraceWebFilterAutoConfiguration.java @@ -29,8 +29,8 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.autoconfigure.web.servlet.error.ErrorAttributes; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.web.servlet.error.ErrorAttributes; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.DispatcherServlet; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/package-info.java similarity index 92% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/package-info.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/package-info.java index f3c3cbbc44..0bec580d50 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/package-info.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/package-info.java @@ -15,6 +15,6 @@ */ /** - * Auto-configuration for tracing. + * Auto-configuration for actuator tracing concerns. */ package org.springframework.boot.actuate.autoconfigure.trace; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementContextConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/ManagementContextConfiguration.java similarity index 91% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementContextConfiguration.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/ManagementContextConfiguration.java index ce3b3db365..8b2c5b6c85 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementContextConfiguration.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/ManagementContextConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure; +package org.springframework.boot.actuate.autoconfigure.web; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; @@ -30,7 +30,7 @@ import org.springframework.core.annotation.Order; * Specialized {@link Configuration @Configuration} class that defines configuration * specific for the management context. Configurations should be registered in * {@code /META-INF/spring.factories} under the - * {@code org.springframework.boot.actuate.autoconfigure.ManagementContextConfiguration} + * {@code org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration} * key. *

* {@code ManagementContextConfiguration} classes can be ordered using {@link Order}. @@ -38,7 +38,7 @@ import org.springframework.core.annotation.Order; * * @author Phillip Webb * @author Andy Wilkinson - * @since 1.3.0 + * @since 2.0.0 */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementContextFactory.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/ManagementContextFactory.java similarity index 84% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementContextFactory.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/ManagementContextFactory.java index 91154ca6e8..7d4f67fd98 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementContextFactory.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/ManagementContextFactory.java @@ -14,18 +14,19 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure; +package org.springframework.boot.actuate.autoconfigure.web; import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; /** - * A factory for creating a separate management context when the management web server is + * Factory for creating a separate management context when the management web server is * running on a different port to the main application. * * @author Andy Wilkinson + * @since 2.0.0 */ -interface ManagementContextFactory { +public interface ManagementContextFactory { /** * Create the management application context. diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementContextType.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/ManagementContextType.java similarity index 94% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementContextType.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/ManagementContextType.java index 68d0e023c0..5e245ea5de 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementContextType.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/ManagementContextType.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure; +package org.springframework.boot.actuate.autoconfigure.web; /** * Enumeration of management context types. diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/jersey/JerseyManagementChildContextConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/jersey/JerseyManagementChildContextConfiguration.java new file mode 100644 index 0000000000..7a331ce578 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/jersey/JerseyManagementChildContextConfiguration.java @@ -0,0 +1,72 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.web.jersey; + +import java.util.List; + +import org.glassfish.jersey.server.ResourceConfig; +import org.glassfish.jersey.servlet.ServletContainer; + +import org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration; +import org.springframework.boot.actuate.autoconfigure.web.ManagementContextType; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; +import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type; +import org.springframework.boot.autoconfigure.jersey.ResourceConfigCustomizer; +import org.springframework.boot.web.servlet.ServletRegistrationBean; +import org.springframework.context.annotation.Bean; + +/** + * {@link ManagementContextConfiguration} for Jersey infrastructure when a separate + * management context with a web server running on a different port is required. + * + * @author Stephane Nicoll + * @author Andy Wilkinson + * @author Phillip Webb + * @since 2.0.0 + */ +@ManagementContextConfiguration(ManagementContextType.CHILD) +@ConditionalOnWebApplication(type = Type.SERVLET) +@ConditionalOnClass(ResourceConfig.class) +@ConditionalOnMissingClass("org.springframework.web.servlet.DispatcherServlet") +public class JerseyManagementChildContextConfiguration { + + private final List resourceConfigCustomizers; + + public JerseyManagementChildContextConfiguration( + List resourceConfigCustomizers) { + this.resourceConfigCustomizers = resourceConfigCustomizers; + } + + @Bean + public ServletRegistrationBean jerseyServletRegistration() { + ServletRegistrationBean registration = new ServletRegistrationBean<>( + new ServletContainer(endpointResourceConfig()), "/*"); + return registration; + } + + @Bean + public ResourceConfig endpointResourceConfig() { + ResourceConfig resourceConfig = new ResourceConfig(); + for (ResourceConfigCustomizer customizer : this.resourceConfigCustomizers) { + customizer.customize(resourceConfig); + } + return resourceConfig; + } + +} diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/ReactiveEndpointChildManagementContextConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/reactive/ReactiveManagementChildContextConfiguration.java similarity index 64% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/ReactiveEndpointChildManagementContextConfiguration.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/reactive/ReactiveManagementChildContextConfiguration.java index 41596f9c37..d3136ccb60 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/ReactiveEndpointChildManagementContextConfiguration.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/reactive/ReactiveManagementChildContextConfiguration.java @@ -14,11 +14,12 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure; +package org.springframework.boot.actuate.autoconfigure.web.reactive; import org.springframework.beans.factory.ListableBeanFactory; -import org.springframework.boot.actuate.autoconfigure.ManagementContextConfiguration; -import org.springframework.boot.actuate.autoconfigure.ManagementContextType; +import org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration; +import org.springframework.boot.actuate.autoconfigure.web.ManagementContextType; +import org.springframework.boot.actuate.autoconfigure.web.server.ManagementServerFactoryCustomizer; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type; import org.springframework.boot.autoconfigure.web.reactive.DefaultReactiveWebServerCustomizer; @@ -30,31 +31,33 @@ import org.springframework.web.reactive.config.EnableWebFlux; import org.springframework.web.server.adapter.WebHttpHandlerBuilder; /** - * Configuration for reactive web endpoint infrastructure when a separate management - * context with a web server running on a different port is required. + * {@link ManagementContextConfiguration} for reactive web infrastructure when a separate + * management context with a web server running on a different port is required. * * @author Andy Wilkinson + * @author Phillip Webb + * @since 2.0.0 */ @EnableWebFlux @ManagementContextConfiguration(ManagementContextType.CHILD) @ConditionalOnWebApplication(type = Type.REACTIVE) -class ReactiveEndpointChildManagementContextConfiguration { +public class ReactiveManagementChildContextConfiguration { + + @Bean + public ReactiveManagementServerFactoryCustomizer reactiveManagementServerFactoryCustomizer( + ListableBeanFactory beanFactory) { + return new ReactiveManagementServerFactoryCustomizer(beanFactory); + } @Bean public HttpHandler httpHandler(ApplicationContext applicationContext) { return WebHttpHandlerBuilder.applicationContext(applicationContext).build(); } - @Bean - public ManagementReactiveWebServerFactoryCustomizer webServerFactoryCustomizer( - ListableBeanFactory beanFactory) { - return new ManagementReactiveWebServerFactoryCustomizer(beanFactory); - } + class ReactiveManagementServerFactoryCustomizer extends + ManagementServerFactoryCustomizer { - static class ManagementReactiveWebServerFactoryCustomizer extends - ManagementWebServerFactoryCustomizer { - - ManagementReactiveWebServerFactoryCustomizer(ListableBeanFactory beanFactory) { + ReactiveManagementServerFactoryCustomizer(ListableBeanFactory beanFactory) { super(beanFactory, DefaultReactiveWebServerCustomizer.class); } diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/reactive/ReactiveManagementContextAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/reactive/ReactiveManagementContextAutoConfiguration.java new file mode 100644 index 0000000000..e2e4bceec1 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/reactive/ReactiveManagementContextAutoConfiguration.java @@ -0,0 +1,45 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.web.reactive; + +import javax.servlet.Servlet; + +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; +import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * {@link EnableAutoConfiguration Auto-configuration} for Servlet-specific management + * context concerns. + * + * @author Phillip Webb + * @since 2.0.0 + */ +@Configuration +@ConditionalOnClass(Servlet.class) +@ConditionalOnWebApplication(type = Type.REACTIVE) +public class ReactiveManagementContextAutoConfiguration { + + @Bean + public ReactiveManagementContextFactory reactiveWebChildContextFactory() { + return new ReactiveManagementContextFactory(); + } + +} diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ReactiveWebManagementContextFactory.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/reactive/ReactiveManagementContextFactory.java similarity index 85% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ReactiveWebManagementContextFactory.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/reactive/ReactiveManagementContextFactory.java index 08167a00d1..e74e286796 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ReactiveWebManagementContextFactory.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/reactive/ReactiveManagementContextFactory.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure; +package org.springframework.boot.actuate.autoconfigure.web.reactive; import java.lang.reflect.Modifier; @@ -23,6 +23,7 @@ import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.RootBeanDefinition; +import org.springframework.boot.actuate.autoconfigure.web.ManagementContextFactory; import org.springframework.boot.autoconfigure.web.reactive.ReactiveWebServerAutoConfiguration; import org.springframework.boot.web.reactive.context.GenericReactiveWebApplicationContext; import org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext; @@ -31,11 +32,11 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; /** - * A {@link ManagementContextFactory} for WebFlux-based web applications. + * A {@link ManagementContextFactory} for reactive web applications. * * @author Andy Wilkinson */ -class ReactiveWebManagementContextFactory implements ManagementContextFactory { +class ReactiveManagementContextFactory implements ManagementContextFactory { @Override public ConfigurableApplicationContext createManagementContext( @@ -76,10 +77,11 @@ class ReactiveWebManagementContextFactory implements ManagementContextFactory { return factoryClass; } - private boolean cannotBeInstantiated(Class clazz) { - return clazz.isLocalClass() - || (clazz.isMemberClass() && !Modifier.isStatic(clazz.getModifiers())) - || clazz.isAnonymousClass(); + private boolean cannotBeInstantiated(Class factoryClass) { + return factoryClass.isLocalClass() + || (factoryClass.isMemberClass() + && !Modifier.isStatic(factoryClass.getModifiers())) + || factoryClass.isAnonymousClass(); } } diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ConditionalOnManagementPort.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ConditionalOnManagementPort.java similarity index 93% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ConditionalOnManagementPort.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ConditionalOnManagementPort.java index 2871986475..5dcdc2cf5f 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ConditionalOnManagementPort.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ConditionalOnManagementPort.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure; +package org.springframework.boot.actuate.autoconfigure.web.server; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; @@ -27,6 +27,7 @@ import org.springframework.context.annotation.Conditional; /** * {@link Conditional} that matches based on the configuration of the management port. * + * @author Andy Wilkinson * @since 2.0.0 */ @Retention(RetentionPolicy.RUNTIME) diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EnableChildManagementContextConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/EnableChildManagementContextConfiguration.java similarity index 86% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EnableChildManagementContextConfiguration.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/EnableChildManagementContextConfiguration.java index 55f32b2a6c..284ea4b9db 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EnableChildManagementContextConfiguration.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/EnableChildManagementContextConfiguration.java @@ -14,8 +14,9 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure; +package org.springframework.boot.actuate.autoconfigure.web.server; +import org.springframework.boot.actuate.autoconfigure.web.ManagementContextType; import org.springframework.context.annotation.Configuration; /** diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EnableManagementContext.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/EnableManagementContext.java similarity index 89% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EnableManagementContext.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/EnableManagementContext.java index b487af37b7..8ac078f94a 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EnableManagementContext.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/EnableManagementContext.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure; +package org.springframework.boot.actuate.autoconfigure.web.server; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; @@ -22,6 +22,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import org.springframework.boot.actuate.autoconfigure.web.ManagementContextType; import org.springframework.context.annotation.Import; /** diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/web/server/LocalManagementPort.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/LocalManagementPort.java similarity index 94% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/web/server/LocalManagementPort.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/LocalManagementPort.java index 44ea827e78..2188d2693a 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/web/server/LocalManagementPort.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/LocalManagementPort.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.web.server; +package org.springframework.boot.actuate.autoconfigure.web.server; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; @@ -30,7 +30,7 @@ import org.springframework.beans.factory.annotation.Value; * @Value("${local.management.port}"). * * @author Stephane Nicoll - * @since 1.4.0 + * @since 2.0.0 */ @Target({ ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE }) diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementContextAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementContextAutoConfiguration.java similarity index 85% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementContextAutoConfiguration.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementContextAutoConfiguration.java index 79c7d72884..462f227080 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementContextAutoConfiguration.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementContextAutoConfiguration.java @@ -14,23 +14,21 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure; +package org.springframework.boot.actuate.autoconfigure.web.server; import org.springframework.beans.factory.SmartInitializingSingleton; -import org.springframework.boot.actuate.autoconfigure.web.ManagementServerProperties; -import org.springframework.boot.actuate.endpoint.mvc.ManagementServletContext; +import org.springframework.boot.actuate.autoconfigure.web.ManagementContextFactory; +import org.springframework.boot.actuate.autoconfigure.web.ManagementContextType; import org.springframework.boot.autoconfigure.AutoConfigureOrder; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; -import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type; import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.context.event.ApplicationFailedEvent; +import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.web.reactive.context.ConfigurableReactiveWebApplicationContext; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationListener; import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.event.ContextClosedEvent; import org.springframework.context.support.AbstractApplicationContext; @@ -54,20 +52,9 @@ import org.springframework.web.context.ConfigurableWebApplicationContext; */ @Configuration @AutoConfigureOrder(Ordered.LOWEST_PRECEDENCE) +@EnableConfigurationProperties(ManagementServerProperties.class) public class ManagementContextAutoConfiguration { - @Configuration - @ConditionalOnWebApplication(type = Type.SERVLET) - static class ServletManagementContextConfiguration { - - @Bean - public ManagementServletContext managementServletContext( - ManagementServerProperties properties) { - return () -> properties.getContextPath(); - } - - } - @Configuration @ConditionalOnManagementPort(ManagementPortType.SAME) static class SameManagementContextConfiguration @@ -126,14 +113,14 @@ public class ManagementContextAutoConfiguration { @Configuration @ConditionalOnManagementPort(ManagementPortType.DIFFERENT) - static class SeparateManagementContextConfiguration + static class DifferentManagementContextConfiguration implements SmartInitializingSingleton { private final ApplicationContext applicationContext; private final ManagementContextFactory managementContextFactory; - SeparateManagementContextConfiguration(ApplicationContext applicationContext, + DifferentManagementContextConfiguration(ApplicationContext applicationContext, ManagementContextFactory managementContextFactory) { this.applicationContext = applicationContext; this.managementContextFactory = managementContextFactory; @@ -170,26 +157,6 @@ public class ManagementContextAutoConfiguration { } } - @ConditionalOnWebApplication(type = Type.SERVLET) - static class ServletChildContextConfiguration { - - @Bean - public ServletWebManagementContextFactory servletWebChildContextFactory() { - return new ServletWebManagementContextFactory(); - } - - } - - @ConditionalOnWebApplication(type = Type.REACTIVE) - static class ReactiveChildContextConfiguration { - - @Bean - public ReactiveWebManagementContextFactory reactiveWebChildContextFactory() { - return new ReactiveWebManagementContextFactory(); - } - - } - } /** diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementContextConfigurationImportSelector.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementContextConfigurationImportSelector.java similarity index 93% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementContextConfigurationImportSelector.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementContextConfigurationImportSelector.java index 1b90fa0991..22e58d1f30 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementContextConfigurationImportSelector.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementContextConfigurationImportSelector.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure; +package org.springframework.boot.actuate.autoconfigure.web.server; import java.io.IOException; import java.util.ArrayList; @@ -22,6 +22,8 @@ import java.util.List; import java.util.Map; import org.springframework.beans.factory.BeanClassLoaderAware; +import org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration; +import org.springframework.boot.actuate.autoconfigure.web.ManagementContextType; import org.springframework.context.annotation.DeferredImportSelector; import org.springframework.core.OrderComparator; import org.springframework.core.Ordered; @@ -71,12 +73,12 @@ class ManagementContextConfigurationImportSelector this.classLoader); List configurations = new ArrayList<>(); for (String className : loadFactoryNames()) { - getConfiguration(readerFactory, configurations, className); + addConfiguration(readerFactory, configurations, className); } return configurations; } - private void getConfiguration(SimpleMetadataReaderFactory readerFactory, + private void addConfiguration(SimpleMetadataReaderFactory readerFactory, List configurations, String className) { try { MetadataReader metadataReader = readerFactory.getMetadataReader(className); diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementPortType.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementPortType.java similarity index 96% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementPortType.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementPortType.java index 7a90f8fd98..d0b2d76e3f 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementPortType.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementPortType.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure; +package org.springframework.boot.actuate.autoconfigure.web.server; import org.springframework.core.env.Environment; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/ManagementWebServerFactoryCustomizer.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerFactoryCustomizer.java similarity index 72% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/ManagementWebServerFactoryCustomizer.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerFactoryCustomizer.java index 3527e82c06..030b7dbc09 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/ManagementWebServerFactoryCustomizer.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerFactoryCustomizer.java @@ -14,13 +14,12 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure; +package org.springframework.boot.actuate.autoconfigure.web.server; import java.util.Collections; import org.springframework.beans.factory.BeanFactoryUtils; import org.springframework.beans.factory.ListableBeanFactory; -import org.springframework.boot.actuate.autoconfigure.web.ManagementServerProperties; import org.springframework.boot.autoconfigure.web.ServerProperties; import org.springframework.boot.web.server.ConfigurableWebServerFactory; import org.springframework.boot.web.server.ErrorPage; @@ -35,15 +34,16 @@ import org.springframework.core.Ordered; * * @param the type of web server factory to customize * @author Andy Wilkinson + * @since 2.0.0 */ -abstract class ManagementWebServerFactoryCustomizer +public abstract class ManagementServerFactoryCustomizer implements WebServerFactoryCustomizer, Ordered { private final ListableBeanFactory beanFactory; private final Class> customizerClass; - protected ManagementWebServerFactoryCustomizer(ListableBeanFactory beanFactory, + protected ManagementServerFactoryCustomizer(ListableBeanFactory beanFactory, Class> customizerClass) { this.beanFactory = beanFactory; this.customizerClass = customizerClass; @@ -55,7 +55,7 @@ abstract class ManagementWebServerFactoryCustomizeremptySet()); + factory.setErrorPages(Collections.emptySet()); // and add the management-specific bits - customize(webServerFactory, managementServerProperties, serverProperties); + customize(factory, managementServerProperties, serverProperties); } - protected void customize(T webServerFactory, + protected void customize(T factory, ManagementServerProperties managementServerProperties, ServerProperties serverProperties) { - webServerFactory.setPort(managementServerProperties.getPort()); + factory.setPort(managementServerProperties.getPort()); Ssl ssl = managementServerProperties.getSsl(); if (ssl != null) { - webServerFactory.setSsl(ssl); + factory.setSsl(ssl); } - webServerFactory.setServerHeader(serverProperties.getServerHeader()); - webServerFactory.setAddress(managementServerProperties.getAddress()); - webServerFactory - .addErrorPages(new ErrorPage(serverProperties.getError().getPath())); + factory.setServerHeader(serverProperties.getServerHeader()); + factory.setAddress(managementServerProperties.getAddress()); + factory.addErrorPages(new ErrorPage(serverProperties.getError().getPath())); } } diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/web/ManagementServerProperties.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerProperties.java similarity index 97% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/web/ManagementServerProperties.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerProperties.java index 7ffe28d930..28fda50e12 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/web/ManagementServerProperties.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerProperties.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.web; +package org.springframework.boot.actuate.autoconfigure.web.server; import java.net.InetAddress; @@ -32,6 +32,7 @@ import org.springframework.util.StringUtils; * @author Dave Syer * @author Stephane Nicoll * @author Vedran Pavic + * @since 2.0.0 * @see ServerProperties */ @ConfigurationProperties(prefix = "management", ignoreUnknownFields = true) diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/OnManagementPortCondition.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/OnManagementPortCondition.java similarity index 93% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/OnManagementPortCondition.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/OnManagementPortCondition.java index c3627d977e..1b441f7020 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/OnManagementPortCondition.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/OnManagementPortCondition.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure; +package org.springframework.boot.actuate.autoconfigure.web.server; import java.util.Map; @@ -47,10 +47,9 @@ class OnManagementPortCondition extends SpringBootCondition { return ConditionOutcome .noMatch(message.because("non web application context")); } - Map annotationAttributes = metadata + Map attributes = metadata .getAnnotationAttributes(ConditionalOnManagementPort.class.getName()); - ManagementPortType requiredType = (ManagementPortType) annotationAttributes - .get("value"); + ManagementPortType requiredType = (ManagementPortType) attributes.get("value"); ManagementPortType actualType = ManagementPortType.get(context.getEnvironment()); if (actualType == requiredType) { return ConditionOutcome.match(message.because( diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/web/server/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/package-info.java similarity index 90% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/web/server/package-info.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/package-info.java index 3103f97c71..0c4e17ff03 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/web/server/package-info.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/package-info.java @@ -16,6 +16,5 @@ /** * Actuator web server support. - * */ -package org.springframework.boot.actuate.web.server; +package org.springframework.boot.actuate.autoconfigure.web.server; diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/CompositeHandlerAdapter.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/CompositeHandlerAdapter.java new file mode 100644 index 0000000000..a599f668a5 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/CompositeHandlerAdapter.java @@ -0,0 +1,87 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.web.servlet; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.ListableBeanFactory; +import org.springframework.core.annotation.AnnotationAwareOrderComparator; +import org.springframework.web.servlet.HandlerAdapter; +import org.springframework.web.servlet.ModelAndView; + +/** + * Composite {@link HandlerAdapter}. + * + * @author Andy Wilkinson + * @author Stephane Nicoll + * @author Phillip Webb + */ +class CompositeHandlerAdapter implements HandlerAdapter { + + private final ListableBeanFactory beanFactory; + + private List adapters; + + CompositeHandlerAdapter(ListableBeanFactory beanFactory) { + this.beanFactory = beanFactory; + } + + @Override + public boolean supports(Object handler) { + return getAdapter(handler).isPresent(); + } + + @Override + public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, + Object handler) throws Exception { + Optional adapter = getAdapter(handler); + if (adapter.isPresent()) { + return adapter.get().handle(request, response, handler); + } + return null; + } + + @Override + public long getLastModified(HttpServletRequest request, Object handler) { + Optional adapter = getAdapter(handler); + if (adapter.isPresent()) { + return adapter.get().getLastModified(request, handler); + } + return 0; + } + + private Optional getAdapter(Object handler) { + if (this.adapters == null) { + this.adapters = extractAdapters(); + } + return this.adapters.stream().filter((a) -> a.supports(handler)).findFirst(); + } + + private List extractAdapters() { + List list = new ArrayList<>(); + list.addAll(this.beanFactory.getBeansOfType(HandlerAdapter.class).values()); + list.remove(this); + AnnotationAwareOrderComparator.sort(list); + return list; + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/CompositeHandlerExceptionResolver.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/CompositeHandlerExceptionResolver.java new file mode 100644 index 0000000000..1159030897 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/CompositeHandlerExceptionResolver.java @@ -0,0 +1,66 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.web.servlet; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.ListableBeanFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.annotation.AnnotationAwareOrderComparator; +import org.springframework.web.servlet.HandlerExceptionResolver; +import org.springframework.web.servlet.ModelAndView; + +/** + * Composite {@link HandlerExceptionResolver}. + * + * @author Andy Wilkinson + * @author Stephane Nicoll + * @author Phillip Webb + */ +class CompositeHandlerExceptionResolver implements HandlerExceptionResolver { + + @Autowired + private ListableBeanFactory beanFactory; + + private List resolvers; + + @Override + public ModelAndView resolveException(HttpServletRequest request, + HttpServletResponse response, Object handler, Exception ex) { + if (this.resolvers == null) { + this.resolvers = extractResolvers(); + } + return this.resolvers.stream().map( + (resolver) -> resolver.resolveException(request, response, handler, ex)) + .filter(Objects::nonNull).findFirst().orElse(null); + } + + private List extractResolvers() { + List list = new ArrayList<>(); + list.addAll( + this.beanFactory.getBeansOfType(HandlerExceptionResolver.class).values()); + list.remove(this); + AnnotationAwareOrderComparator.sort(list); + return list; + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/CompositeHandlerMapping.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/CompositeHandlerMapping.java new file mode 100644 index 0000000000..c975cf1f67 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/CompositeHandlerMapping.java @@ -0,0 +1,67 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.web.servlet; + +import java.util.ArrayList; +import java.util.List; + +import javax.servlet.http.HttpServletRequest; + +import org.springframework.beans.factory.ListableBeanFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.annotation.AnnotationAwareOrderComparator; +import org.springframework.web.servlet.HandlerExceptionResolver; +import org.springframework.web.servlet.HandlerExecutionChain; +import org.springframework.web.servlet.HandlerMapping; + +/** + * Composite {@link HandlerExceptionResolver}. + * + * @author Andy Wilkinson + * @author Stephane Nicoll + * @author Phillip Webb + */ +class CompositeHandlerMapping implements HandlerMapping { + + @Autowired + private ListableBeanFactory beanFactory; + + private List mappings; + + @Override + public HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception { + if (this.mappings == null) { + this.mappings = extractMappings(); + } + for (HandlerMapping mapping : this.mappings) { + HandlerExecutionChain handler = mapping.getHandler(request); + if (handler != null) { + return handler; + } + } + return null; + } + + private List extractMappings() { + List list = new ArrayList<>(); + list.addAll(this.beanFactory.getBeansOfType(HandlerMapping.class).values()); + list.remove(this); + AnnotationAwareOrderComparator.sort(list); + return list; + } + +} diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/ManagementErrorEndpoint.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ManagementErrorEndpoint.java similarity index 88% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/ManagementErrorEndpoint.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ManagementErrorEndpoint.java index 23389b9f9d..aec514bcbb 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/ManagementErrorEndpoint.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ManagementErrorEndpoint.java @@ -14,12 +14,12 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint.mvc; +package org.springframework.boot.actuate.autoconfigure.web.servlet; import java.util.Map; -import org.springframework.boot.autoconfigure.web.servlet.error.ErrorAttributes; -import org.springframework.boot.autoconfigure.web.servlet.error.ErrorController; +import org.springframework.boot.web.servlet.error.ErrorAttributes; +import org.springframework.boot.web.servlet.error.ErrorController; import org.springframework.stereotype.Controller; import org.springframework.util.Assert; import org.springframework.web.bind.annotation.RequestMapping; @@ -32,6 +32,7 @@ import org.springframework.web.context.request.ServletWebRequest; * the way the handler mappings are set up it will not be detected. * * @author Dave Syer + * @since 2.0.0 */ @Controller public class ManagementErrorEndpoint { diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/ManagementServletContext.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ManagementServletContext.java similarity index 91% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/ManagementServletContext.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ManagementServletContext.java index 21ed75f334..94af0d3637 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/ManagementServletContext.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ManagementServletContext.java @@ -14,13 +14,13 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint.mvc; +package org.springframework.boot.actuate.autoconfigure.web.servlet; /** * Provides information about the management servlet context for MVC controllers to use. * * @author Phillip Webb - * @since 1.3.0 + * @since 2.0.0 */ @FunctionalInterface public interface ManagementServletContext { diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/RequestMappingEndpoint.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/RequestMappingEndpoint.java similarity index 95% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/RequestMappingEndpoint.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/RequestMappingEndpoint.java index ddc851522b..5ac5864932 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/RequestMappingEndpoint.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/RequestMappingEndpoint.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.autoconfigure.web.servlet; import java.util.Collection; import java.util.Collections; @@ -25,8 +25,8 @@ import java.util.Map.Entry; import org.springframework.aop.support.AopUtils; import org.springframework.beans.BeansException; -import org.springframework.boot.endpoint.Endpoint; -import org.springframework.boot.endpoint.ReadOperation; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.web.method.HandlerMethod; @@ -38,6 +38,7 @@ import org.springframework.web.servlet.handler.AbstractUrlHandlerMapping; * * @author Dave Syer * @author Andy Wilkinson + * @since 2.0.0 */ @Endpoint(id = "mappings") public class RequestMappingEndpoint implements ApplicationContextAware { diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/RequestMappingEndpointAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/RequestMappingEndpointAutoConfiguration.java new file mode 100644 index 0000000000..04bac88a4f --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/RequestMappingEndpointAutoConfiguration.java @@ -0,0 +1,44 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.web.servlet; + +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.handler.AbstractHandlerMethodMapping; + +/** + * {@link EnableAutoConfiguration Auto-configuration} for {@link RequestMappingEndpoint}. + * + * @author Phillip Webb + * @since 2.0.0 + */ +@Configuration +@ConditionalOnClass(AbstractHandlerMethodMapping.class) +public class RequestMappingEndpointAutoConfiguration { + + @Bean + @ConditionalOnMissingBean + @ConditionalOnEnabledEndpoint + public RequestMappingEndpoint requestMappingEndpoint() { + return new RequestMappingEndpoint(); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementChildContextConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementChildContextConfiguration.java new file mode 100644 index 0000000000..46c12d1969 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementChildContextConfiguration.java @@ -0,0 +1,158 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.web.servlet; + +import javax.servlet.Filter; + +import org.apache.catalina.Valve; +import org.apache.catalina.valves.AccessLogValve; + +import org.springframework.beans.factory.BeanFactory; +import org.springframework.beans.factory.HierarchicalBeanFactory; +import org.springframework.beans.factory.ListableBeanFactory; +import org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration; +import org.springframework.boot.actuate.autoconfigure.web.ManagementContextType; +import org.springframework.boot.actuate.autoconfigure.web.server.ManagementServerFactoryCustomizer; +import org.springframework.boot.actuate.autoconfigure.web.server.ManagementServerProperties; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; +import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type; +import org.springframework.boot.autoconfigure.condition.SearchStrategy; +import org.springframework.boot.autoconfigure.web.ServerProperties; +import org.springframework.boot.autoconfigure.web.servlet.DefaultServletWebServerFactoryCustomizer; +import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; +import org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory; +import org.springframework.boot.web.server.WebServerFactoryCustomizer; +import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.Ordered; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; + +/** + * {@link ManagementContextConfiguration} for Servlet web endpoint infrastructure when a + * separate management context with a web server running on a different port is required. + * + * @author Dave Syer + * @author Stephane Nicoll + * @author Andy Wilkinson + * @author Eddú Meléndez + * @author Phillip Webb + */ +@Configuration +@ManagementContextConfiguration(ManagementContextType.CHILD) +@ConditionalOnWebApplication(type = Type.SERVLET) +class ServletManagementChildContextConfiguration { + + @Bean + public ServletManagementServerFactoryCustomizer serverFactoryCustomizer( + ListableBeanFactory beanFactory) { + return new ServletManagementServerFactoryCustomizer(beanFactory); + } + + @Bean + public UndertowAccessLogCustomizer undertowAccessLogCustomizer() { + return new UndertowAccessLogCustomizer(); + } + + @Bean + @ConditionalOnClass(name = "org.apache.catalina.valves.AccessLogValve") + public TomcatAccessLogCustomizer tomcatAccessLogCustomizer() { + return new TomcatAccessLogCustomizer(); + } + + @Configuration + @ConditionalOnClass({ EnableWebSecurity.class, Filter.class }) + @ConditionalOnBean(name = "springSecurityFilterChain", search = SearchStrategy.ANCESTORS) + class ServletManagementContextSecurityConfiguration { + + @Bean + public Filter springSecurityFilterChain(HierarchicalBeanFactory beanFactory) { + BeanFactory parent = beanFactory.getParentBeanFactory(); + return parent.getBean("springSecurityFilterChain", Filter.class); + } + + } + + static class ServletManagementServerFactoryCustomizer extends + ManagementServerFactoryCustomizer { + + ServletManagementServerFactoryCustomizer(ListableBeanFactory beanFactory) { + super(beanFactory, DefaultServletWebServerFactoryCustomizer.class); + } + + @Override + protected void customize(ConfigurableServletWebServerFactory webServerFactory, + ManagementServerProperties managementServerProperties, + ServerProperties serverProperties) { + super.customize(webServerFactory, managementServerProperties, + serverProperties); + webServerFactory.setContextPath(""); + } + + } + + static abstract class AccessLogCustomizer implements Ordered { + + protected String customizePrefix(String prefix) { + return "management_" + prefix; + } + + @Override + public int getOrder() { + return 1; + } + + } + + static class TomcatAccessLogCustomizer extends AccessLogCustomizer + implements WebServerFactoryCustomizer { + + @Override + public void customize(TomcatServletWebServerFactory serverFactory) { + AccessLogValve accessLogValve = findAccessLogValve(serverFactory); + if (accessLogValve == null) { + return; + } + accessLogValve.setPrefix(customizePrefix(accessLogValve.getPrefix())); + } + + private AccessLogValve findAccessLogValve( + TomcatServletWebServerFactory serverFactory) { + for (Valve engineValve : serverFactory.getEngineValves()) { + if (engineValve instanceof AccessLogValve) { + return (AccessLogValve) engineValve; + } + } + return null; + } + + } + + static class UndertowAccessLogCustomizer extends AccessLogCustomizer + implements WebServerFactoryCustomizer { + + @Override + public void customize(UndertowServletWebServerFactory serverFactory) { + serverFactory.setAccessLogPrefix( + customizePrefix(serverFactory.getAccessLogPrefix())); + } + + } + +} diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/ServletEndpointAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementContextAutoConfiguration.java similarity index 53% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/ServletEndpointAutoConfiguration.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementContextAutoConfiguration.java index 2bc92539af..a410ba8a7e 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/ServletEndpointAutoConfiguration.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementContextAutoConfiguration.java @@ -14,58 +14,42 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure; +package org.springframework.boot.actuate.autoconfigure.web.servlet; import javax.servlet.Servlet; -import org.springframework.boot.actuate.autoconfigure.endpoint.ManagementContextResolver; -import org.springframework.boot.actuate.autoconfigure.web.ManagementServerProperties; -import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.actuate.autoconfigure.web.server.ManagementServerProperties; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type; -import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; -import org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration; -import org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration; -import org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration; -import org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration; -import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration; -import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.web.servlet.filter.ApplicationContextHeaderFilter; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** - * {@link EnableAutoConfiguration Auto-configuration} for Servlet-specific endpoint - * concerns. + * {@link EnableAutoConfiguration Auto-configuration} for Servlet-specific management + * context concerns. * - * @author Dave Syer * @author Phillip Webb - * @author Christian Dupuis - * @author Andy Wilkinson - * @author Johannes Edmeier - * @author Eddú Meléndez - * @author Venil Noronha - * @author Madhura Bhave + * @since 2.0.0 */ @Configuration @ConditionalOnClass(Servlet.class) @ConditionalOnWebApplication(type = Type.SERVLET) -@EnableConfigurationProperties(ManagementServerProperties.class) -@AutoConfigureAfter({ PropertyPlaceholderAutoConfiguration.class, - ServletWebServerFactoryAutoConfiguration.class, WebMvcAutoConfiguration.class, - RepositoryRestMvcAutoConfiguration.class, HypermediaAutoConfiguration.class, - HttpMessageConvertersAutoConfiguration.class, - EndpointInfrastructureAutoConfiguration.class }) -public class ServletEndpointAutoConfiguration { +public class ServletManagementContextAutoConfiguration { @Bean - public ManagementContextResolver managementContextResolver( - ApplicationContext applicationContext) { - return new ManagementContextResolver(applicationContext); + public ServletManagementContextFactory servletWebChildContextFactory() { + return new ServletManagementContextFactory(); + } + + @Bean + public ManagementServletContext managementServletContext( + ManagementServerProperties properties) { + return () -> properties.getContextPath(); } // Put Servlets and Filters in their own nested class so they don't force early diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ServletWebManagementContextFactory.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementContextFactory.java similarity index 87% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ServletWebManagementContextFactory.java rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementContextFactory.java index 7efb1878ba..ba79dfa41b 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ServletWebManagementContextFactory.java +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementContextFactory.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure; +package org.springframework.boot.actuate.autoconfigure.web.servlet; import java.lang.reflect.Modifier; import java.util.ArrayList; @@ -26,6 +26,7 @@ import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.RootBeanDefinition; +import org.springframework.boot.actuate.autoconfigure.web.ManagementContextFactory; import org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration; import org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext; import org.springframework.boot.web.servlet.server.ServletWebServerFactory; @@ -37,7 +38,7 @@ import org.springframework.context.ConfigurableApplicationContext; * * @author Andy Wilkinson */ -class ServletWebManagementContextFactory implements ManagementContextFactory { +class ServletManagementContextFactory implements ManagementContextFactory { @Override public ConfigurableApplicationContext createManagementContext( @@ -79,10 +80,11 @@ class ServletWebManagementContextFactory implements ManagementContextFactory { return factoryClass; } - private boolean cannotBeInstantiated(Class clazz) { - return clazz.isLocalClass() - || (clazz.isMemberClass() && !Modifier.isStatic(clazz.getModifiers())) - || clazz.isAnonymousClass(); + private boolean cannotBeInstantiated(Class factoryClass) { + return factoryClass.isLocalClass() + || (factoryClass.isMemberClass() + && !Modifier.isStatic(factoryClass.getModifiers())) + || factoryClass.isAnonymousClass(); } } diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/WebMvcEndpointChildContextConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/WebMvcEndpointChildContextConfiguration.java new file mode 100644 index 0000000000..baa6ae0ebc --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/WebMvcEndpointChildContextConfiguration.java @@ -0,0 +1,85 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.web.servlet; + +import org.springframework.beans.factory.ListableBeanFactory; +import org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration; +import org.springframework.boot.actuate.autoconfigure.web.ManagementContextType; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; +import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type; +import org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration; +import org.springframework.boot.web.servlet.error.ErrorAttributes; +import org.springframework.context.annotation.Bean; +import org.springframework.web.servlet.DispatcherServlet; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; + +/** + * {@link ManagementContextConfiguration} for Spring MVC infrastructure when a separate + * management context with a web server running on a different port is required. + * + * @author Stephane Nicoll + * @author Andy Wilkinson + * @author Phillip Webb + * @since 2.0.0 + */ +@ManagementContextConfiguration(ManagementContextType.CHILD) +@ConditionalOnWebApplication(type = Type.SERVLET) +@ConditionalOnClass(DispatcherServlet.class) +@EnableWebMvc +class WebMvcEndpointChildContextConfiguration { + + /* + * The error controller is present but not mapped as an endpoint in this context + * because of the DispatcherServlet having had its HandlerMapping explicitly disabled. + * So we expose the same feature but only for machine endpoints. + */ + @Bean + @ConditionalOnBean(ErrorAttributes.class) + public ManagementErrorEndpoint errorEndpoint(ErrorAttributes errorAttributes) { + return new ManagementErrorEndpoint(errorAttributes); + } + + @Bean(name = DispatcherServletAutoConfiguration.DEFAULT_DISPATCHER_SERVLET_BEAN_NAME) + public DispatcherServlet dispatcherServlet() { + DispatcherServlet dispatcherServlet = new DispatcherServlet(); + // Ensure the parent configuration does not leak down to us + dispatcherServlet.setDetectAllHandlerAdapters(false); + dispatcherServlet.setDetectAllHandlerExceptionResolvers(false); + dispatcherServlet.setDetectAllHandlerMappings(false); + dispatcherServlet.setDetectAllViewResolvers(false); + return dispatcherServlet; + } + + @Bean(name = DispatcherServlet.HANDLER_MAPPING_BEAN_NAME) + public CompositeHandlerMapping compositeHandlerMapping() { + return new CompositeHandlerMapping(); + } + + @Bean(name = DispatcherServlet.HANDLER_ADAPTER_BEAN_NAME) + public CompositeHandlerAdapter compositeHandlerAdapter( + ListableBeanFactory beanFactory) { + return new CompositeHandlerAdapter(beanFactory); + } + + @Bean(name = DispatcherServlet.HANDLER_EXCEPTION_RESOLVER_BEAN_NAME) + public CompositeHandlerExceptionResolver compositeHandlerExceptionResolver() { + return new CompositeHandlerExceptionResolver(); + } + +} diff --git a/spring-boot-actuator/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json similarity index 100% rename from spring-boot-actuator/src/main/resources/META-INF/additional-spring-configuration-metadata.json rename to spring-boot-actuator-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json diff --git a/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/spring.factories b/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000000..f3f69dd701 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/spring.factories @@ -0,0 +1,60 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +org.springframework.boot.actuate.autoconfigure.amqp.RabbitHealthIndicatorAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.audit.AuditAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.audit.AuditEventsEndpointAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.beans.BeansEndpointAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.cache.CacheStatisticsAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.cassandra.CassandraHealthIndicatorAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.cloudfoundry.CloudFoundryActuatorAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.condition.AutoConfigurationReportEndpointAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.context.properties.ConfigurationPropertiesReportEndpointAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.context.ShutdownEndpointAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.couchbase.CouchbaseHealthIndicatorAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.elasticsearch.ElasticsearchHealthIndicatorAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.endpoint.jmx.JmxEndpointAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.env.EnvironmentEndpointAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.flyway.FlywayEndpointAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.health.HealthEndpointAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.info.InfoContributorAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.info.InfoEndpointAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.jdbc.DataSourceHealthIndicatorAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.jms.JmsHealthIndicatorAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.ldap.LdapHealthIndicatorAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.liquibase.LiquibaseEndpointAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.logging.LoggersEndpointAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.mail.MailHealthIndicatorAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.management.ThreadDumpEndpointAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.metrics.MetricExportAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.metrics.MetricFilterAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.metrics.MetricRepositoryAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.metrics.MetricsChannelAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.metrics.MetricsDropwizardAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.metrics.MetricsEndpointAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.metrics.PublicMetricsAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.mongo.MongoHealthIndicatorAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.neo4j.Neo4jHealthIndicatorAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.redis.RedisHealthIndicatorAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.solr.SolrHealthIndicatorAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.system.DiskSpaceHealthIndicatorAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.trace.TraceEndpointAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.trace.TraceRepositoryAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.trace.TraceWebFilterAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.web.reactive.ReactiveManagementContextAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagementContextAutoConfiguration,\ +org.springframework.boot.actuate.autoconfigure.web.servlet.RequestMappingEndpointAutoConfiguration + +org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration=\ +org.springframework.boot.actuate.autoconfigure.endpoint.web.reactive.WebFluxEndpointManagementContextConfiguration,\ +org.springframework.boot.actuate.autoconfigure.endpoint.web.servlet.WebMvcEndpointManagementContextConfiguration,\ +org.springframework.boot.actuate.autoconfigure.endpoint.web.jersey.JerseyWebEndpointManagementContextConfiguration,\ +org.springframework.boot.actuate.autoconfigure.health.HealthWebEndpointManagementContextConfiguration,\ +org.springframework.boot.actuate.autoconfigure.jolokia.JolokiaManagementContextConfiguration,\ +org.springframework.boot.actuate.autoconfigure.logging.LogFileWebEndpointManagementContextConfiguration,\ +org.springframework.boot.actuate.autoconfigure.management.HeapDumpWebEndpointManagementContextConfiguration,\ +org.springframework.boot.actuate.autoconfigure.web.jersey.JerseyManagementChildContextConfiguration,\ +org.springframework.boot.actuate.autoconfigure.web.reactive.ReactiveManagementChildContextConfiguration,\ +org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagementChildContextConfiguration,\ +org.springframework.boot.actuate.autoconfigure.web.servlet.WebMvcEndpointChildContextConfiguration diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/SpringApplicationHierarchyTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/SpringApplicationHierarchyTests.java similarity index 93% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/SpringApplicationHierarchyTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/SpringApplicationHierarchyTests.java index 3d07c0b71d..9e0aaccbe4 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/SpringApplicationHierarchyTests.java +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/SpringApplicationHierarchyTests.java @@ -19,7 +19,6 @@ package org.springframework.boot.actuate.autoconfigure; import org.junit.After; import org.junit.Test; -import org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure.EndpointInfrastructureAutoConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration; import org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration; @@ -30,6 +29,7 @@ import org.springframework.boot.autoconfigure.data.neo4j.Neo4jDataAutoConfigurat import org.springframework.boot.autoconfigure.data.neo4j.Neo4jRepositoriesAutoConfiguration; import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; import org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration; +import org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.test.util.ApplicationContextTestUtils; import org.springframework.context.ConfigurableApplicationContext; @@ -67,7 +67,8 @@ public class SpringApplicationHierarchyTests { CassandraAutoConfiguration.class, CassandraDataAutoConfiguration.class, MongoDataAutoConfiguration.class, Neo4jDataAutoConfiguration.class, Neo4jRepositoriesAutoConfiguration.class, RedisAutoConfiguration.class, - RedisRepositoriesAutoConfiguration.class }, excludeName = { + RedisRepositoriesAutoConfiguration.class, + FlywayAutoConfiguration.class }, excludeName = { "org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration" }) public static class Child { @@ -79,7 +80,7 @@ public class SpringApplicationHierarchyTests { MongoDataAutoConfiguration.class, Neo4jDataAutoConfiguration.class, Neo4jRepositoriesAutoConfiguration.class, RedisAutoConfiguration.class, RedisRepositoriesAutoConfiguration.class, - EndpointInfrastructureAutoConfiguration.class }, excludeName = { + FlywayAutoConfiguration.class }, excludeName = { "org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration" }) public static class Parent { diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/amqp/RabbitHealthIndicatorAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/amqp/RabbitHealthIndicatorAutoConfigurationTests.java new file mode 100644 index 0000000000..e5099f6088 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/amqp/RabbitHealthIndicatorAutoConfigurationTests.java @@ -0,0 +1,57 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.amqp; + +import org.junit.Test; + +import org.springframework.boot.actuate.amqp.RabbitHealthIndicator; +import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration; +import org.springframework.boot.actuate.health.ApplicationHealthIndicator; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link RabbitHealthIndicatorAutoConfiguration}. + * + * @author Phillip Webb + */ +public class RabbitHealthIndicatorAutoConfigurationTests { + + private ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withConfiguration(AutoConfigurations.of(RabbitAutoConfiguration.class, + RabbitHealthIndicatorAutoConfiguration.class, + HealthIndicatorAutoConfiguration.class)); + + @Test + public void runShouldCreateIndicator() throws Exception { + this.contextRunner.run((context) -> assertThat(context) + .hasSingleBean(RabbitHealthIndicator.class) + .doesNotHaveBean(ApplicationHealthIndicator.class)); + } + + @Test + public void runWhenDisabledShouldNotCreateIndicator() throws Exception { + this.contextRunner.withPropertyValues("management.health.rabbit.enabled:false") + .run((context) -> assertThat(context) + .doesNotHaveBean(RabbitHealthIndicator.class) + .hasSingleBean(ApplicationHealthIndicator.class)); + } + +} diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/audit/AuditAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/audit/AuditAutoConfigurationTests.java similarity index 100% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/audit/AuditAutoConfigurationTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/audit/AuditAutoConfigurationTests.java diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/audit/AuditEventsEndpointAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/audit/AuditEventsEndpointAutoConfigurationTests.java new file mode 100644 index 0000000000..dba2173e4c --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/audit/AuditEventsEndpointAutoConfigurationTests.java @@ -0,0 +1,61 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.audit; + +import org.junit.Test; + +import org.springframework.boot.actuate.audit.AuditEventsEndpoint; +import org.springframework.boot.actuate.audit.AuditEventsJmxEndpointExtension; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link AuditEventsEndpointAutoConfiguration}. + * + * @author Andy Wilkinson + * @author Phillip Webb + */ +public class AuditEventsEndpointAutoConfigurationTests { + + private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withConfiguration(AutoConfigurations.of(AuditAutoConfiguration.class, + AuditEventsEndpointAutoConfiguration.class)); + + @Test + public void runShouldHaveEndpointBean() { + this.contextRunner.run((context) -> assertThat(context) + .hasSingleBean(AuditEventsEndpoint.class)); + } + + @Test + public void runShouldHaveJmxExtensionBean() { + this.contextRunner.run((context) -> assertThat(context) + .hasSingleBean(AuditEventsJmxEndpointExtension.class)); + } + + @Test + public void runWhenEnabledPropertyIsFalseShouldNotHaveEndpointOrExtensionBean() + throws Exception { + this.contextRunner.withPropertyValues("endpoints.auditevents.enabled:false") + .run((context) -> assertThat(context) + .doesNotHaveBean(AuditEventsEndpoint.class) + .doesNotHaveBean(AuditEventsJmxEndpointExtension.class)); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/beans/BeansEndpointAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/beans/BeansEndpointAutoConfigurationTests.java new file mode 100644 index 0000000000..620e3b5c2f --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/beans/BeansEndpointAutoConfigurationTests.java @@ -0,0 +1,51 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.beans; + +import org.junit.Test; + +import org.springframework.boot.actuate.beans.BeansEndpoint; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link BeansEndpointAutoConfiguration}. + * + * @author Phillip Webb + */ +public class BeansEndpointAutoConfigurationTests { + + private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withConfiguration( + AutoConfigurations.of(BeansEndpointAutoConfiguration.class)); + + @Test + public void runShouldHaveEndpointBean() { + this.contextRunner + .run((context) -> assertThat(context).hasSingleBean(BeansEndpoint.class)); + } + + @Test + public void runWhenEnabledPropertyIsFalseShouldNotHaveEndpointBean() + throws Exception { + this.contextRunner.withPropertyValues("endpoints.beans.enabled:false").run( + (context) -> assertThat(context).doesNotHaveBean(BeansEndpoint.class)); + } + +} diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/cache/CacheStatisticsAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cache/CacheStatisticsAutoConfigurationTests.java similarity index 100% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/cache/CacheStatisticsAutoConfigurationTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cache/CacheStatisticsAutoConfigurationTests.java diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cassandra/CassandraHealthIndicatorAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cassandra/CassandraHealthIndicatorAutoConfigurationTests.java new file mode 100644 index 0000000000..6bd030a6ee --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cassandra/CassandraHealthIndicatorAutoConfigurationTests.java @@ -0,0 +1,72 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.cassandra; + +import org.junit.Test; + +import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration; +import org.springframework.boot.actuate.cassandra.CassandraHealthIndicator; +import org.springframework.boot.actuate.health.ApplicationHealthIndicator; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.cassandra.core.CassandraOperations; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; + +/** + * Tests for {@link CassandraHealthIndicatorAutoConfiguration}. + * + * @author Phillip Webb + */ +public class CassandraHealthIndicatorAutoConfigurationTests { + + private ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withConfiguration(AutoConfigurations.of(CassandraConfiguration.class, + CassandraHealthIndicatorAutoConfiguration.class, + HealthIndicatorAutoConfiguration.class)); + + @Test + public void runShouldCreateIndicator() throws Exception { + this.contextRunner.run((context) -> assertThat(context) + .hasSingleBean(CassandraHealthIndicator.class) + .doesNotHaveBean(ApplicationHealthIndicator.class)); + } + + @Test + public void runWhenDisabledShouldNotCreateIndicator() throws Exception { + this.contextRunner.withPropertyValues("management.health.cassandra.enabled:false") + .run((context) -> assertThat(context) + .doesNotHaveBean(CassandraHealthIndicator.class) + .hasSingleBean(ApplicationHealthIndicator.class)); + } + + @Configuration + @AutoConfigureBefore(CassandraHealthIndicatorAutoConfiguration.class) + protected static class CassandraConfiguration { + + @Bean + public CassandraOperations cassandraOperations() { + return mock(CassandraOperations.class); + } + + } + +} diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/AccessLevelTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/AccessLevelTests.java similarity index 96% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/AccessLevelTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/AccessLevelTests.java index 40a13a47d8..50d6268bdf 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/AccessLevelTests.java +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/AccessLevelTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.cloudfoundry; +package org.springframework.boot.actuate.autoconfigure.cloudfoundry; import org.junit.Test; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/AuthorizationExceptionMatcher.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/AuthorizationExceptionMatcher.java similarity index 87% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/AuthorizationExceptionMatcher.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/AuthorizationExceptionMatcher.java index e72d9ba0d9..1ca01e0e9a 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/AuthorizationExceptionMatcher.java +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/AuthorizationExceptionMatcher.java @@ -14,12 +14,12 @@ * limitations under the License. */ -package org.springframework.boot.actuate.cloudfoundry; +package org.springframework.boot.actuate.autoconfigure.cloudfoundry; import org.hamcrest.CustomMatcher; import org.hamcrest.Matcher; -import org.springframework.boot.actuate.cloudfoundry.CloudFoundryAuthorizationException.Reason; +import org.springframework.boot.actuate.autoconfigure.cloudfoundry.CloudFoundryAuthorizationException.Reason; /** * Hamcrest matcher to check the {@link AuthorizationExceptionMatcher} {@link Reason}. diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundryActuatorAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryActuatorAutoConfigurationTests.java similarity index 93% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundryActuatorAutoConfigurationTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryActuatorAutoConfigurationTests.java index 90c6fb268a..4f815d8cea 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundryActuatorAutoConfigurationTests.java +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryActuatorAutoConfigurationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.cloudfoundry; +package org.springframework.boot.actuate.autoconfigure.cloudfoundry; import java.util.Arrays; @@ -22,8 +22,9 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; -import org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure.EndpointInfrastructureAutoConfiguration; -import org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure.ServletEndpointAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagementContextAutoConfiguration; import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration; import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration; @@ -64,8 +65,9 @@ public class CloudFoundryActuatorAutoConfigurationTests { HttpMessageConvertersAutoConfiguration.class, PropertyPlaceholderAutoConfiguration.class, RestTemplateAutoConfiguration.class, - EndpointInfrastructureAutoConfiguration.class, - ServletEndpointAutoConfiguration.class, + ManagementContextAutoConfiguration.class, + ServletManagementContextAutoConfiguration.class, + EndpointAutoConfiguration.class, CloudFoundryActuatorAutoConfiguration.class); } diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundryAuthorizationExceptionTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryAuthorizationExceptionTests.java similarity index 94% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundryAuthorizationExceptionTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryAuthorizationExceptionTests.java index 239f82ca9f..46ae3be480 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundryAuthorizationExceptionTests.java +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryAuthorizationExceptionTests.java @@ -14,11 +14,11 @@ * limitations under the License. */ -package org.springframework.boot.actuate.cloudfoundry; +package org.springframework.boot.actuate.autoconfigure.cloudfoundry; import org.junit.Test; -import org.springframework.boot.actuate.cloudfoundry.CloudFoundryAuthorizationException.Reason; +import org.springframework.boot.actuate.autoconfigure.cloudfoundry.CloudFoundryAuthorizationException.Reason; import org.springframework.http.HttpStatus; import static org.assertj.core.api.Assertions.assertThat; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundryMvcWebEndpointIntegrationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryMvcWebEndpointIntegrationTests.java similarity index 93% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundryMvcWebEndpointIntegrationTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryMvcWebEndpointIntegrationTests.java index 59e42ac6bd..fdf12d908c 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundryMvcWebEndpointIntegrationTests.java +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryMvcWebEndpointIntegrationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.cloudfoundry; +package org.springframework.boot.actuate.autoconfigure.cloudfoundry; import java.util.Arrays; import java.util.Collections; @@ -24,15 +24,15 @@ import java.util.function.Consumer; import org.junit.Test; -import org.springframework.boot.endpoint.CachingConfiguration; -import org.springframework.boot.endpoint.ConversionServiceOperationParameterMapper; -import org.springframework.boot.endpoint.Endpoint; -import org.springframework.boot.endpoint.OperationParameterMapper; -import org.springframework.boot.endpoint.ReadOperation; -import org.springframework.boot.endpoint.Selector; -import org.springframework.boot.endpoint.WriteOperation; +import org.springframework.boot.actuate.endpoint.OperationParameterMapper; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; +import org.springframework.boot.actuate.endpoint.annotation.Selector; +import org.springframework.boot.actuate.endpoint.annotation.WriteOperation; +import org.springframework.boot.actuate.endpoint.cache.CachingConfiguration; +import org.springframework.boot.actuate.endpoint.convert.ConversionServiceOperationParameterMapper; +import org.springframework.boot.actuate.endpoint.web.annotation.WebAnnotationEndpointDiscoverer; import org.springframework.boot.endpoint.web.EndpointMapping; -import org.springframework.boot.endpoint.web.WebAnnotationEndpointDiscoverer; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext; import org.springframework.context.ApplicationContext; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundrySecurityInterceptorTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundrySecurityInterceptorTests.java similarity index 97% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundrySecurityInterceptorTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundrySecurityInterceptorTests.java index 47766ab31f..8ecb75725a 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundrySecurityInterceptorTests.java +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundrySecurityInterceptorTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.cloudfoundry; +package org.springframework.boot.actuate.autoconfigure.cloudfoundry; import org.junit.Before; import org.junit.Test; @@ -22,7 +22,7 @@ import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import org.springframework.boot.actuate.cloudfoundry.CloudFoundryAuthorizationException.Reason; +import org.springframework.boot.actuate.autoconfigure.cloudfoundry.CloudFoundryAuthorizationException.Reason; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.mock.web.MockHttpServletRequest; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundrySecurityServiceTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundrySecurityServiceTests.java similarity index 98% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundrySecurityServiceTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundrySecurityServiceTests.java index a5cf377bd5..5eb2396cdf 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundrySecurityServiceTests.java +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundrySecurityServiceTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.cloudfoundry; +package org.springframework.boot.actuate.autoconfigure.cloudfoundry; import java.util.Map; @@ -23,7 +23,7 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; -import org.springframework.boot.actuate.cloudfoundry.CloudFoundryAuthorizationException.Reason; +import org.springframework.boot.actuate.autoconfigure.cloudfoundry.CloudFoundryAuthorizationException.Reason; import org.springframework.boot.test.web.client.MockServerRestTemplateCustomizer; import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.http.HttpStatus; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/SkipSslVerificationHttpRequestFactoryTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/SkipSslVerificationHttpRequestFactoryTests.java similarity index 97% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/SkipSslVerificationHttpRequestFactoryTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/SkipSslVerificationHttpRequestFactoryTests.java index df585067b1..2a00eed556 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/SkipSslVerificationHttpRequestFactoryTests.java +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/SkipSslVerificationHttpRequestFactoryTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.cloudfoundry; +package org.springframework.boot.actuate.autoconfigure.cloudfoundry; import javax.net.ssl.SSLHandshakeException; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/TokenTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/TokenTests.java similarity index 96% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/TokenTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/TokenTests.java index 37ac32ecd6..7a885e2939 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/TokenTests.java +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/TokenTests.java @@ -14,13 +14,13 @@ * limitations under the License. */ -package org.springframework.boot.actuate.cloudfoundry; +package org.springframework.boot.actuate.autoconfigure.cloudfoundry; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; -import org.springframework.boot.actuate.cloudfoundry.CloudFoundryAuthorizationException.Reason; +import org.springframework.boot.actuate.autoconfigure.cloudfoundry.CloudFoundryAuthorizationException.Reason; import org.springframework.util.Base64Utils; import static org.assertj.core.api.Assertions.assertThat; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/TokenValidatorTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/TokenValidatorTests.java similarity index 98% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/TokenValidatorTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/TokenValidatorTests.java index a3adfcc658..8891dbe2ab 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/TokenValidatorTests.java +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/TokenValidatorTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.cloudfoundry; +package org.springframework.boot.actuate.autoconfigure.cloudfoundry; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -37,7 +37,7 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; -import org.springframework.boot.actuate.cloudfoundry.CloudFoundryAuthorizationException.Reason; +import org.springframework.boot.actuate.autoconfigure.cloudfoundry.CloudFoundryAuthorizationException.Reason; import org.springframework.test.util.ReflectionTestUtils; import org.springframework.util.Base64Utils; import org.springframework.util.StreamUtils; diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/condition/AutoConfigurationReportEndpointAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/condition/AutoConfigurationReportEndpointAutoConfigurationTests.java new file mode 100644 index 0000000000..c9c70ec474 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/condition/AutoConfigurationReportEndpointAutoConfigurationTests.java @@ -0,0 +1,51 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.condition; + +import org.junit.Test; + +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link AutoConfigurationReportEndpointAutoConfiguration}. + * + * @author Phillip Webb + */ +public class AutoConfigurationReportEndpointAutoConfigurationTests { + + private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withConfiguration(AutoConfigurations + .of(AutoConfigurationReportEndpointAutoConfiguration.class)); + + @Test + public void runShouldHaveEndpointBean() { + this.contextRunner.run((context) -> assertThat(context) + .hasSingleBean(AutoConfigurationReportEndpoint.class)); + } + + @Test + public void runWhenEnabledPropertyIsFalseShouldNotHaveEndpointBean() + throws Exception { + this.contextRunner.withPropertyValues("endpoints.autoconfig.enabled:false") + .run((context) -> assertThat(context) + .doesNotHaveBean(AutoConfigurationReportEndpoint.class)); + } + +} diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/AutoConfigurationReportEndpointTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/condition/AutoConfigurationReportEndpointTests.java similarity index 94% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/AutoConfigurationReportEndpointTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/condition/AutoConfigurationReportEndpointTests.java index c9a97ba586..a236519015 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/AutoConfigurationReportEndpointTests.java +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/condition/AutoConfigurationReportEndpointTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.autoconfigure.condition; import java.util.Arrays; import java.util.Collections; @@ -23,7 +23,7 @@ import javax.annotation.PostConstruct; import org.junit.Test; -import org.springframework.boot.actuate.endpoint.AutoConfigurationReportEndpoint.Report; +import org.springframework.boot.actuate.autoconfigure.condition.AutoConfigurationReportEndpoint.Report; import org.springframework.boot.autoconfigure.condition.ConditionEvaluationReport; import org.springframework.boot.autoconfigure.condition.ConditionOutcome; import org.springframework.boot.context.properties.EnableConfigurationProperties; diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/context/ShutdownEndpointAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/context/ShutdownEndpointAutoConfigurationTests.java new file mode 100644 index 0000000000..71a7916970 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/context/ShutdownEndpointAutoConfigurationTests.java @@ -0,0 +1,51 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.context; + +import org.junit.Test; + +import org.springframework.boot.actuate.context.ShutdownEndpoint; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link ShutdownEndpointAutoConfiguration}. + * + * @author Phillip Webb + */ +public class ShutdownEndpointAutoConfigurationTests { + + private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withConfiguration( + AutoConfigurations.of(ShutdownEndpointAutoConfiguration.class)); + + @Test + public void runShouldHaveEndpointBean() { + this.contextRunner.withPropertyValues("endpoints.shutdown.enabled:true").run( + (context) -> assertThat(context).hasSingleBean(ShutdownEndpoint.class)); + } + + @Test + public void runWhenEnabledPropertyIsFalseShouldNotHaveEndpointBean() + throws Exception { + this.contextRunner.withPropertyValues("endpoints.shutdown.enabled:false").run( + (context) -> assertThat(context).doesNotHaveBean(ShutdownEndpoint.class)); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/context/properties/ConfigurationPropertiesReportEndpointAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/context/properties/ConfigurationPropertiesReportEndpointAutoConfigurationTests.java new file mode 100644 index 0000000000..48a3cf7836 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/context/properties/ConfigurationPropertiesReportEndpointAutoConfigurationTests.java @@ -0,0 +1,52 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.context.properties; + +import org.junit.Test; + +import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link ConfigurationPropertiesReportEndpointAutoConfiguration}. + * + * @author Phillip Webb + */ +public class ConfigurationPropertiesReportEndpointAutoConfigurationTests { + + private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withConfiguration(AutoConfigurations + .of(ConfigurationPropertiesReportEndpointAutoConfiguration.class)); + + @Test + public void runShouldHaveEndpointBean() { + this.contextRunner.run((context) -> assertThat(context) + .hasSingleBean(ConfigurationPropertiesReportEndpoint.class)); + } + + @Test + public void runWhenEnabledPropertyIsFalseShouldNotHaveEndpointBean() + throws Exception { + this.contextRunner.withPropertyValues("endpoints.configprops.enabled:false") + .run((context) -> assertThat(context) + .doesNotHaveBean(ConfigurationPropertiesReportEndpoint.class)); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/couchbase/CouchbaseHealthIndicatorAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/couchbase/CouchbaseHealthIndicatorAutoConfigurationTests.java new file mode 100644 index 0000000000..d5b207048b --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/couchbase/CouchbaseHealthIndicatorAutoConfigurationTests.java @@ -0,0 +1,72 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.couchbase; + +import org.junit.Test; + +import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration; +import org.springframework.boot.actuate.couchbase.CouchbaseHealthIndicator; +import org.springframework.boot.actuate.health.ApplicationHealthIndicator; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.couchbase.core.CouchbaseOperations; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; + +/** + * Tests for {@link CouchbaseHealthIndicatorAutoConfiguration}. + * + * @author Phillip Webb + */ +public class CouchbaseHealthIndicatorAutoConfigurationTests { + + private ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withConfiguration(AutoConfigurations.of(CouchbaseConfiguration.class, + CouchbaseHealthIndicatorAutoConfiguration.class, + HealthIndicatorAutoConfiguration.class)); + + @Test + public void runShouldCreateIndicator() throws Exception { + this.contextRunner.run((context) -> assertThat(context) + .hasSingleBean(CouchbaseHealthIndicator.class) + .doesNotHaveBean(ApplicationHealthIndicator.class)); + } + + @Test + public void runWhenDisabledShouldNotCreateIndicator() throws Exception { + this.contextRunner.withPropertyValues("management.health.couchbase.enabled:false") + .run((context) -> assertThat(context) + .doesNotHaveBean(CouchbaseHealthIndicator.class) + .hasSingleBean(ApplicationHealthIndicator.class)); + } + + @Configuration + @AutoConfigureBefore(CouchbaseHealthIndicatorAutoConfiguration.class) + protected static class CouchbaseConfiguration { + + @Bean + public CouchbaseOperations couchbaseOperations() { + return mock(CouchbaseOperations.class); + } + + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/elasticsearch/ElasticsearchHealthIndicatorAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/elasticsearch/ElasticsearchHealthIndicatorAutoConfigurationTests.java new file mode 100644 index 0000000000..d1b0e39594 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/elasticsearch/ElasticsearchHealthIndicatorAutoConfigurationTests.java @@ -0,0 +1,91 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.elasticsearch; + +import io.searchbox.client.JestClient; +import org.junit.Test; + +import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration; +import org.springframework.boot.actuate.elasticsearch.ElasticsearchHealthIndicator; +import org.springframework.boot.actuate.elasticsearch.ElasticsearchJestHealthIndicator; +import org.springframework.boot.actuate.health.ApplicationHealthIndicator; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration; +import org.springframework.boot.autoconfigure.elasticsearch.jest.JestAutoConfiguration; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; + +/** + * Tests for {@link ElasticsearchHealthIndicatorAutoConfiguration}. + * + * @author Phillip Webb + */ +public class ElasticsearchHealthIndicatorAutoConfigurationTests { + + private ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withConfiguration(AutoConfigurations.of(ElasticsearchAutoConfiguration.class, + ElasticsearchHealthIndicatorAutoConfiguration.class, + HealthIndicatorAutoConfiguration.class)); + + @Test + public void runShouldCreateIndicator() throws Exception { + this.contextRunner + .withPropertyValues("spring.data.elasticsearch.cluster-nodes:localhost:0") + .withSystemProperties("es.set.netty.runtime.available.processors=false") + .run((context) -> assertThat(context) + .hasSingleBean(ElasticsearchHealthIndicator.class) + .doesNotHaveBean(ElasticsearchJestHealthIndicator.class) + .doesNotHaveBean(ApplicationHealthIndicator.class)); + } + + @Test + public void runWhenUsingJestClientShouldCreateIndicator() throws Exception { + this.contextRunner.withUserConfiguration(JestClientConfiguration.class) + .withSystemProperties("es.set.netty.runtime.available.processors=false") + .run((context) -> assertThat(context) + .hasSingleBean(ElasticsearchJestHealthIndicator.class) + .doesNotHaveBean(ElasticsearchHealthIndicator.class) + .doesNotHaveBean(ApplicationHealthIndicator.class)); + } + + @Test + public void runWhenDisabledShouldNotCreateIndicator() throws Exception { + this.contextRunner + .withPropertyValues("management.health.elasticsearch.enabled:false") + .run((context) -> assertThat(context) + .doesNotHaveBean(ElasticsearchHealthIndicator.class) + .doesNotHaveBean(ElasticsearchJestHealthIndicator.class) + .hasSingleBean(ApplicationHealthIndicator.class)); + } + + @Configuration + @AutoConfigureBefore(JestAutoConfiguration.class) + protected static class JestClientConfiguration { + + @Bean + public JestClient jestClient() { + return mock(JestClient.class); + } + + } + +} diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/CachingConfigurationFactoryTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/DefaultCachingConfigurationFactoryTests.java similarity index 67% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/CachingConfigurationFactoryTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/DefaultCachingConfigurationFactoryTests.java index 9eaad931cc..fcc5018739 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/CachingConfigurationFactoryTests.java +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/DefaultCachingConfigurationFactoryTests.java @@ -14,30 +14,31 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure; +package org.springframework.boot.actuate.autoconfigure.endpoint; import org.junit.Test; -import org.springframework.boot.endpoint.CachingConfiguration; +import org.springframework.boot.actuate.endpoint.cache.CachingConfiguration; +import org.springframework.boot.actuate.endpoint.cache.CachingConfigurationFactory; import org.springframework.mock.env.MockEnvironment; import static org.assertj.core.api.Assertions.assertThat; /** - * Tests for {@link CachingConfigurationFactory}. + * Tests for {@link DefaultCachingConfigurationFactory}. * * @author Stephane Nicoll */ -public class CachingConfigurationFactoryTests { +public class DefaultCachingConfigurationFactoryTests { private final MockEnvironment environment = new MockEnvironment(); - private final CachingConfigurationFactory factory = new CachingConfigurationFactory( + private final CachingConfigurationFactory factory = new DefaultCachingConfigurationFactory( this.environment); @Test public void defaultConfiguration() { - CachingConfiguration configuration = this.factory.apply("test"); + CachingConfiguration configuration = this.factory.getCachingConfiguration("test"); assertThat(configuration).isNotNull(); assertThat(configuration.getTimeToLive()).isEqualTo(0); } @@ -45,7 +46,7 @@ public class CachingConfigurationFactoryTests { @Test public void userConfiguration() { this.environment.setProperty("endpoints.test.cache.time-to-live", "500"); - CachingConfiguration configuration = this.factory.apply("test"); + CachingConfiguration configuration = this.factory.getCachingConfiguration("test"); assertThat(configuration).isNotNull(); assertThat(configuration.getTimeToLive()).isEqualTo(500); } diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/support/EndpointEnablementProviderTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/EndpointEnablementProviderTests.java similarity index 98% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/support/EndpointEnablementProviderTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/EndpointEnablementProviderTests.java index 7d4d41d319..9848b2d76a 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/support/EndpointEnablementProviderTests.java +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/EndpointEnablementProviderTests.java @@ -14,13 +14,13 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.endpoint.support; +package org.springframework.boot.actuate.autoconfigure.endpoint; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; -import org.springframework.boot.endpoint.EndpointExposure; +import org.springframework.boot.actuate.endpoint.annotation.EndpointExposure; import org.springframework.boot.test.util.TestPropertyValues; import org.springframework.mock.env.MockEnvironment; import org.springframework.util.ObjectUtils; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/ConditionalOnEnabledEndpointTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/ConditionalOnEnabledEndpointTests.java similarity index 96% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/ConditionalOnEnabledEndpointTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/ConditionalOnEnabledEndpointTests.java index c93ce7562a..0c9f7c756e 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/ConditionalOnEnabledEndpointTests.java +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/ConditionalOnEnabledEndpointTests.java @@ -14,14 +14,14 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.endpoint; +package org.springframework.boot.actuate.autoconfigure.endpoint.condition; import org.junit.Test; -import org.springframework.boot.endpoint.Endpoint; -import org.springframework.boot.endpoint.EndpointExposure; -import org.springframework.boot.endpoint.jmx.JmxEndpointExtension; -import org.springframework.boot.endpoint.web.WebEndpointExtension; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.EndpointExposure; +import org.springframework.boot.actuate.endpoint.jmx.annotation.JmxEndpointExtension; +import org.springframework.boot.actuate.endpoint.web.annotation.WebEndpointExtension; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/DefaultEndpointObjectNameFactoryTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx/DefaultEndpointObjectNameFactoryTests.java similarity index 98% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/DefaultEndpointObjectNameFactoryTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx/DefaultEndpointObjectNameFactoryTests.java index d9664093e9..86b34f36c1 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/DefaultEndpointObjectNameFactoryTests.java +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx/DefaultEndpointObjectNameFactoryTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure; +package org.springframework.boot.actuate.autoconfigure.endpoint.jmx; import java.util.Collections; @@ -24,7 +24,7 @@ import javax.management.ObjectName; import org.junit.Test; -import org.springframework.boot.endpoint.jmx.EndpointMBean; +import org.springframework.boot.actuate.endpoint.jmx.EndpointMBean; import org.springframework.mock.env.MockEnvironment; import org.springframework.util.ObjectUtils; diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/env/EnvironmentEndpointAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/env/EnvironmentEndpointAutoConfigurationTests.java new file mode 100644 index 0000000000..156989e0ac --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/env/EnvironmentEndpointAutoConfigurationTests.java @@ -0,0 +1,52 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.env; + +import org.junit.Test; + +import org.springframework.boot.actuate.env.EnvironmentEndpoint; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link EnvironmentEndpointAutoConfiguration}. + * + * @author Phillip Webb + */ +public class EnvironmentEndpointAutoConfigurationTests { + + private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withConfiguration( + AutoConfigurations.of(EnvironmentEndpointAutoConfiguration.class)); + + @Test + public void runShouldHaveEndpointBean() { + this.contextRunner.run((context) -> assertThat(context) + .hasSingleBean(EnvironmentEndpoint.class)); + } + + @Test + public void runWhenEnabledPropertyIsFalseShouldNotHaveEndpointBean() + throws Exception { + this.contextRunner.withPropertyValues("endpoints.env.enabled:false") + .run((context) -> assertThat(context) + .doesNotHaveBean(EnvironmentEndpoint.class)); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/flyway/FlywayEndpointAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/flyway/FlywayEndpointAutoConfigurationTests.java new file mode 100644 index 0000000000..0d92ffb7c1 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/flyway/FlywayEndpointAutoConfigurationTests.java @@ -0,0 +1,66 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.flyway; + +import org.flywaydb.core.Flyway; +import org.junit.Test; + +import org.springframework.boot.actuate.flyway.FlywayEndpoint; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; + +/** + * Tests for {@link FlywayEndpointAutoConfiguration}. + * + * @author Phillip Webb + */ +public class FlywayEndpointAutoConfigurationTests { + + private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withConfiguration( + AutoConfigurations.of(FlywayEndpointAutoConfiguration.class)) + .withUserConfiguration(FlywayConfiguration.class); + + @Test + public void runShouldHaveEndpointBean() { + this.contextRunner.run( + (context) -> assertThat(context).hasSingleBean(FlywayEndpoint.class)); + } + + @Test + public void runWhenEnabledPropertyIsFalseShouldNotHaveEndpointBean() + throws Exception { + this.contextRunner.withPropertyValues("endpoints.flyway.enabled:false").run( + (context) -> assertThat(context).doesNotHaveBean(FlywayEndpoint.class)); + } + + @Configuration + static class FlywayConfiguration { + + @Bean + public Flyway flyway() { + return mock(Flyway.class); + } + + } + +} diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/EndpointAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthEndpointAutoConfigurationTests.java similarity index 81% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/EndpointAutoConfigurationTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthEndpointAutoConfigurationTests.java index 72fe5b808e..7c59675879 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/EndpointAutoConfigurationTests.java +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthEndpointAutoConfigurationTests.java @@ -14,13 +14,13 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.endpoint; +package org.springframework.boot.actuate.autoconfigure.health; import org.junit.Test; import reactor.core.publisher.Mono; -import org.springframework.boot.actuate.endpoint.HealthEndpoint; import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.HealthEndpoint; import org.springframework.boot.actuate.health.HealthIndicator; import org.springframework.boot.actuate.health.ReactiveHealthIndicator; import org.springframework.boot.actuate.health.Status; @@ -36,27 +36,29 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; /** - * Tests for {@link EndpointAutoConfiguration}. + * Tests for {@link HealthEndpointAutoConfiguration}. * * @author Stephane Nicoll + * @author Phillip Webb */ -public class EndpointAutoConfigurationTests { +public class HealthEndpointAutoConfigurationTests { private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() - .withConfiguration(AutoConfigurations.of(EndpointAutoConfiguration.class)); + .withConfiguration( + AutoConfigurations.of(HealthEndpointAutoConfiguration.class)); @Test public void healthEndpointAdaptReactiveHealthIndicator() { this.contextRunner .withUserConfiguration(ReactiveHealthIndicatorConfiguration.class) .run((context) -> { - ReactiveHealthIndicator reactiveHealthIndicator = context.getBean( + ReactiveHealthIndicator indicator = context.getBean( "reactiveHealthIndicator", ReactiveHealthIndicator.class); - verify(reactiveHealthIndicator, times(0)).health(); + verify(indicator, times(0)).health(); Health health = context.getBean(HealthEndpoint.class).health(); assertThat(health.getStatus()).isEqualTo(Status.UP); assertThat(health.getDetails()).containsOnlyKeys("reactive"); - verify(reactiveHealthIndicator, times(1)).health(); + verify(indicator, times(1)).health(); }); } @@ -64,17 +66,17 @@ public class EndpointAutoConfigurationTests { public void healthEndpointMergeRegularAndReactive() { this.contextRunner.withUserConfiguration(HealthIndicatorConfiguration.class, ReactiveHealthIndicatorConfiguration.class).run((context) -> { - HealthIndicator simpleHealthIndicator = context - .getBean("simpleHealthIndicator", HealthIndicator.class); + HealthIndicator indicator = context.getBean("simpleHealthIndicator", + HealthIndicator.class); ReactiveHealthIndicator reactiveHealthIndicator = context.getBean( "reactiveHealthIndicator", ReactiveHealthIndicator.class); - verify(simpleHealthIndicator, times(0)).health(); + verify(indicator, times(0)).health(); verify(reactiveHealthIndicator, times(0)).health(); Health health = context.getBean(HealthEndpoint.class).health(); assertThat(health.getStatus()).isEqualTo(Status.UP); assertThat(health.getDetails()).containsOnlyKeys("simple", "reactive"); - verify(simpleHealthIndicator, times(1)).health(); + verify(indicator, times(1)).health(); verify(reactiveHealthIndicator, times(1)).health(); }); } @@ -102,5 +104,4 @@ public class EndpointAutoConfigurationTests { } } - } diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorAutoConfigurationTests.java new file mode 100644 index 0000000000..623204b643 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorAutoConfigurationTests.java @@ -0,0 +1,147 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.health; + +import java.util.LinkedHashMap; +import java.util.Map; + +import org.junit.Test; + +import org.springframework.boot.actuate.health.ApplicationHealthIndicator; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.HealthAggregator; +import org.springframework.boot.actuate.health.HealthIndicator; +import org.springframework.boot.actuate.health.OrderedHealthAggregator; +import org.springframework.boot.actuate.health.Status; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link HealthIndicatorAutoConfiguration}. + * + * @author Phillip Webb + * @author Stephane Nicoll + */ +public class HealthIndicatorAutoConfigurationTests { + + private ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withConfiguration( + AutoConfigurations.of(HealthIndicatorAutoConfiguration.class)); + + @Test + public void runWhenNoOtherIndicatorsShouldCreateDefaultApplicationHealthIndicator() + throws Exception { + this.contextRunner + .run((context) -> assertThat(context).getBean(HealthIndicator.class) + .isInstanceOf(ApplicationHealthIndicator.class)); + } + + @Test + public void runWhenHasDefinedIndicatorShouldNotCreateDefaultApplicationHealthIndicator() + throws Exception { + this.contextRunner.withUserConfiguration(CustomHealthIndicatorConfiguration.class) + .run((context) -> assertThat(context).getBean(HealthIndicator.class) + .isInstanceOf(CustomHealthIndicator.class)); + } + + @Test + public void runWhenHasDefaultsDisabledAndNoSingleIndicatorEnabledShouldCreateDefaultApplicationHealthIndicator() + throws Exception { + this.contextRunner.withUserConfiguration(CustomHealthIndicatorConfiguration.class) + .withPropertyValues("management.health.defaults.enabled:false") + .run((context) -> assertThat(context).getBean(HealthIndicator.class) + .isInstanceOf(ApplicationHealthIndicator.class)); + + } + + @Test + public void runWhenHasDefaultsDisabledAndSingleIndicatorEnabledShouldCreateEnabledIndicator() + throws Exception { + this.contextRunner.withUserConfiguration(CustomHealthIndicatorConfiguration.class) + .withPropertyValues("management.health.defaults.enabled:false", + "management.health.custom.enabled:true") + .run((context) -> assertThat(context).getBean(HealthIndicator.class) + .isInstanceOf(CustomHealthIndicator.class)); + + } + + @Test + public void runShouldCreateOrderedHealthAggregator() throws Exception { + this.contextRunner + .run((context) -> assertThat(context).getBean(HealthAggregator.class) + .isInstanceOf(OrderedHealthAggregator.class)); + } + + @Test + public void runWhenHasCustomOrderPropertyShouldCreateOrderedHealthAggregator() + throws Exception { + this.contextRunner.withPropertyValues("management.health.status.order:UP,DOWN") + .run((context) -> { + OrderedHealthAggregator aggregator = context + .getBean(OrderedHealthAggregator.class); + Map healths = new LinkedHashMap<>(); + healths.put("foo", Health.up().build()); + healths.put("bar", Health.down().build()); + Health aggregate = aggregator.aggregate(healths); + assertThat(aggregate.getStatus()).isEqualTo(Status.UP); + }); + } + + @Test + public void runWhenHasCustomHealthAggregatorShouldNotCreateOrderedHealthAggregator() + throws Exception { + this.contextRunner + .withUserConfiguration(CustomHealthAggregatorConfiguration.class) + .run((context) -> assertThat(context).getBean(HealthAggregator.class) + .isNotInstanceOf(OrderedHealthAggregator.class)); + } + + @Configuration + static class CustomHealthIndicatorConfiguration { + + @Bean + @ConditionalOnEnabledHealthIndicator("custom") + public HealthIndicator customHealthIndicator() { + return new CustomHealthIndicator(); + } + + } + + static class CustomHealthIndicator implements HealthIndicator { + + @Override + public Health health() { + return Health.down().build(); + } + + } + + @Configuration + static class CustomHealthAggregatorConfiguration { + + @Bean + public HealthAggregator healthAggregator() { + return (healths) -> Health.down().build(); + } + + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthWebEndpointReactiveManagementContextConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthWebEndpointReactiveManagementContextConfigurationTests.java new file mode 100644 index 0000000000..2d4e918d43 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthWebEndpointReactiveManagementContextConfigurationTests.java @@ -0,0 +1,101 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.health; + +import java.util.Map; + +import org.junit.Test; + +import org.springframework.boot.actuate.health.HealthReactiveWebEndpointExtension; +import org.springframework.boot.actuate.health.HealthStatusHttpMapper; +import org.springframework.boot.actuate.health.StatusReactiveWebEndpointExtension; +import org.springframework.boot.test.context.runner.ReactiveWebApplicationContextRunner; +import org.springframework.test.util.ReflectionTestUtils; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link HealthWebEndpointManagementContextConfiguration} in a reactive + * environment. + * + * @author Andy Wilkinson + * @author Stephane Nicoll + * @author Phillip Webb + */ +public class HealthWebEndpointReactiveManagementContextConfigurationTests { + + private ReactiveWebApplicationContextRunner contextRunner = new ReactiveWebApplicationContextRunner() + .withUserConfiguration(HealthIndicatorAutoConfiguration.class, + HealthEndpointAutoConfiguration.class, + HealthWebEndpointManagementContextConfiguration.class); + + @Test + public void runShouldCreateExtensionBeans() throws Exception { + this.contextRunner.run((context) -> assertThat(context) + .hasSingleBean(StatusReactiveWebEndpointExtension.class) + .hasSingleBean(HealthReactiveWebEndpointExtension.class)); + } + + @Test + public void runWhenHealthEndpointIsDisabledShouldNotCreateExtensionBeans() + throws Exception { + this.contextRunner.withPropertyValues("endpoints.health.enabled:false") + .run((context) -> assertThat(context) + .doesNotHaveBean(HealthReactiveWebEndpointExtension.class)); + } + + @Test + public void runWhenStatusEndpointIsDisabledShouldNotCreateExtensionBeans() + throws Exception { + this.contextRunner.withPropertyValues("endpoints.status.enabled:false") + .run((context) -> assertThat(context) + .doesNotHaveBean(StatusReactiveWebEndpointExtension.class)); + } + + @Test + public void runWithCustomHealthMappingShouldMapStatusCode() throws Exception { + this.contextRunner + .withPropertyValues("management.health.status.http-mapping.CUSTOM=500") + .run((context) -> { + Object extension = context + .getBean(HealthReactiveWebEndpointExtension.class); + HealthStatusHttpMapper mapper = (HealthStatusHttpMapper) ReflectionTestUtils + .getField(extension, "statusHttpMapper"); + Map statusMappings = mapper.getStatusMapping(); + assertThat(statusMappings).containsEntry("DOWN", 503); + assertThat(statusMappings).containsEntry("OUT_OF_SERVICE", 503); + assertThat(statusMappings).containsEntry("CUSTOM", 500); + }); + } + + @Test + public void runWithCustomStatusMappingShouldMapStatusCode() throws Exception { + this.contextRunner + .withPropertyValues("management.health.status.http-mapping.CUSTOM=500") + .run((context) -> { + Object extension = context + .getBean(StatusReactiveWebEndpointExtension.class); + HealthStatusHttpMapper mapper = (HealthStatusHttpMapper) ReflectionTestUtils + .getField(extension, "statusHttpMapper"); + Map statusMappings = mapper.getStatusMapping(); + assertThat(statusMappings).containsEntry("DOWN", 503); + assertThat(statusMappings).containsEntry("OUT_OF_SERVICE", 503); + assertThat(statusMappings).containsEntry("CUSTOM", 500); + }); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthWebEndpointServletManagementContextConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthWebEndpointServletManagementContextConfigurationTests.java new file mode 100644 index 0000000000..1f285025af --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthWebEndpointServletManagementContextConfigurationTests.java @@ -0,0 +1,99 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.health; + +import java.util.Map; + +import org.junit.Test; + +import org.springframework.boot.actuate.health.HealthStatusHttpMapper; +import org.springframework.boot.actuate.health.HealthWebEndpointExtension; +import org.springframework.boot.actuate.health.StatusWebEndpointExtension; +import org.springframework.boot.test.context.runner.WebApplicationContextRunner; +import org.springframework.test.util.ReflectionTestUtils; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link HealthWebEndpointManagementContextConfiguration} in a servlet + * environment. + * + * @author Andy Wilkinson + * @author Stephane Nicoll + * @author Phillip Webb + */ +public class HealthWebEndpointServletManagementContextConfigurationTests { + + private WebApplicationContextRunner contextRunner = new WebApplicationContextRunner() + .withUserConfiguration(HealthIndicatorAutoConfiguration.class, + HealthEndpointAutoConfiguration.class, + HealthWebEndpointManagementContextConfiguration.class); + + @Test + public void runShouldCreateExtensionBeans() throws Exception { + this.contextRunner.run((context) -> assertThat(context) + .hasSingleBean(StatusWebEndpointExtension.class) + .hasSingleBean(HealthWebEndpointExtension.class)); + } + + @Test + public void runWhenHealthEndpointIsDisabledShouldNotCreateExtensionBeans() + throws Exception { + this.contextRunner.withPropertyValues("endpoints.health.enabled:false") + .run((context) -> assertThat(context) + .doesNotHaveBean(HealthWebEndpointExtension.class)); + } + + @Test + public void runWhenStatusEndpointIsDisabledShouldNotCreateExtensionBeans() + throws Exception { + this.contextRunner.withPropertyValues("endpoints.status.enabled:false") + .run((context) -> assertThat(context) + .doesNotHaveBean(StatusWebEndpointExtension.class)); + } + + @Test + public void runWithCustomHealthMappingShouldMapStatusCode() throws Exception { + this.contextRunner + .withPropertyValues("management.health.status.http-mapping.CUSTOM=500") + .run((context) -> { + Object extension = context.getBean(HealthWebEndpointExtension.class); + HealthStatusHttpMapper mapper = (HealthStatusHttpMapper) ReflectionTestUtils + .getField(extension, "statusHttpMapper"); + Map statusMappings = mapper.getStatusMapping(); + assertThat(statusMappings).containsEntry("DOWN", 503); + assertThat(statusMappings).containsEntry("OUT_OF_SERVICE", 503); + assertThat(statusMappings).containsEntry("CUSTOM", 500); + }); + } + + @Test + public void runWithCustomStatusMappingShouldMapStatusCode() throws Exception { + this.contextRunner + .withPropertyValues("management.health.status.http-mapping.CUSTOM=500") + .run((context) -> { + Object extension = context.getBean(StatusWebEndpointExtension.class); + HealthStatusHttpMapper mapper = (HealthStatusHttpMapper) ReflectionTestUtils + .getField(extension, "statusHttpMapper"); + Map statusMappings = mapper.getStatusMapping(); + assertThat(statusMappings).containsEntry("DOWN", 503); + assertThat(statusMappings).containsEntry("OUT_OF_SERVICE", 503); + assertThat(statusMappings).containsEntry("CUSTOM", 500); + }); + } + +} diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/info/InfoContributorAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/info/InfoContributorAutoConfigurationTests.java similarity index 100% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/info/InfoContributorAutoConfigurationTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/info/InfoContributorAutoConfigurationTests.java diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/info/InfoEndpointAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/info/InfoEndpointAutoConfigurationTests.java new file mode 100644 index 0000000000..d626a5beae --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/info/InfoEndpointAutoConfigurationTests.java @@ -0,0 +1,51 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.info; + +import org.junit.Test; + +import org.springframework.boot.actuate.info.InfoEndpoint; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link InfoEndpointAutoConfiguration}. + * + * @author Phillip Webb + */ +public class InfoEndpointAutoConfigurationTests { + + private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withConfiguration( + AutoConfigurations.of(InfoEndpointAutoConfiguration.class)); + + @Test + public void runShouldHaveEndpointBean() { + this.contextRunner.withPropertyValues("endpoints.shutdown.enabled:true") + .run((context) -> assertThat(context).hasSingleBean(InfoEndpoint.class)); + } + + @Test + public void runWhenEnabledPropertyIsFalseShouldNotHaveEndpointBean() + throws Exception { + this.contextRunner.withPropertyValues("endpoints.info.enabled:false").run( + (context) -> assertThat(context).doesNotHaveBean(InfoEndpoint.class)); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/EndpointAutoConfigurationClasses.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/EndpointAutoConfigurationClasses.java new file mode 100644 index 0000000000..621d3bea07 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/EndpointAutoConfigurationClasses.java @@ -0,0 +1,62 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.integrationtest; + +import java.util.ArrayList; +import java.util.List; + +import org.springframework.boot.actuate.autoconfigure.audit.AuditEventsEndpointAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.beans.BeansEndpointAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.condition.AutoConfigurationReportEndpointAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.context.ShutdownEndpointAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.context.properties.ConfigurationPropertiesReportEndpointAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.env.EnvironmentEndpointAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.health.HealthEndpointAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.info.InfoEndpointAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.management.ThreadDumpEndpointAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.metrics.MetricsEndpointAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.trace.TraceEndpointAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.web.servlet.RequestMappingEndpointAutoConfiguration; + +/** + * A list of all endpoint auto-configuration classes for use in tests. + */ +final class EndpointAutoConfigurationClasses { + + static final Class[] ALL; + + static { + List> all = new ArrayList<>(); + all.add(AuditEventsEndpointAutoConfiguration.class); + all.add(BeansEndpointAutoConfiguration.class); + all.add(AutoConfigurationReportEndpointAutoConfiguration.class); + all.add(ConfigurationPropertiesReportEndpointAutoConfiguration.class); + all.add(ShutdownEndpointAutoConfiguration.class); + all.add(EnvironmentEndpointAutoConfiguration.class); + all.add(HealthEndpointAutoConfiguration.class); + all.add(InfoEndpointAutoConfiguration.class); + all.add(ThreadDumpEndpointAutoConfiguration.class); + all.add(MetricsEndpointAutoConfiguration.class); + all.add(TraceEndpointAutoConfiguration.class); + all.add(RequestMappingEndpointAutoConfiguration.class); + ALL = all.toArray(new Class[] {}); + } + + private EndpointAutoConfigurationClasses() { + } + +} diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/JmxEndpointInfrastructureAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/JmxEndpointIntegrationTests.java similarity index 91% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/JmxEndpointInfrastructureAutoConfigurationTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/JmxEndpointIntegrationTests.java index 089885f71f..77c0921ccb 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/JmxEndpointInfrastructureAutoConfigurationTests.java +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/JmxEndpointIntegrationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure; +package org.springframework.boot.actuate.autoconfigure.integrationtest; import javax.management.InstanceNotFoundException; import javax.management.IntrospectionException; @@ -27,6 +27,7 @@ import javax.management.ReflectionException; import org.junit.Test; import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.endpoint.jmx.JmxEndpointAutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration; import org.springframework.boot.test.context.runner.ApplicationContextRunner; @@ -35,17 +36,18 @@ import org.springframework.util.StringUtils; import static org.assertj.core.api.Assertions.assertThat; /** - * Tests for {@link EndpointInfrastructureAutoConfiguration} with JMX. + * Integration tests for endpints over JMX. * * @author Stephane Nicoll * @author Andy Wilkinson */ -public class JmxEndpointInfrastructureAutoConfigurationTests { +public class JmxEndpointIntegrationTests { private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() .withConfiguration(AutoConfigurations.of(JmxAutoConfiguration.class, - EndpointAutoConfiguration.class, - EndpointInfrastructureAutoConfiguration.class)); + EndpointAutoConfiguration.class, JmxEndpointAutoConfiguration.class)) + .withConfiguration( + AutoConfigurations.of(EndpointAutoConfigurationClasses.ALL)); @Test public void jmxEndpointsAreExposed() { diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaManagementContextConfigurationIntegrationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/JolokiaManagementContextConfigurationIntegrationTests.java similarity index 87% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaManagementContextConfigurationIntegrationTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/JolokiaManagementContextConfigurationIntegrationTests.java index 1d4ff90374..a33d9ff43e 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaManagementContextConfigurationIntegrationTests.java +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/JolokiaManagementContextConfigurationIntegrationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.jolokia; +package org.springframework.boot.actuate.autoconfigure.integrationtest; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; @@ -26,9 +26,10 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.actuate.autoconfigure.ManagementContextAutoConfiguration; -import org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure.EndpointInfrastructureAutoConfiguration; -import org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure.ServletEndpointAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.jolokia.JolokiaManagementContextConfiguration; +import org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagementContextAutoConfiguration; import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration; import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration; @@ -101,10 +102,10 @@ public class JolokiaManagementContextConfigurationIntegrationTests { @Configuration @MinimalWebConfiguration @Import({ JacksonAutoConfiguration.class, - HttpMessageConvertersAutoConfiguration.class, - EndpointInfrastructureAutoConfiguration.class, + HttpMessageConvertersAutoConfiguration.class, EndpointAutoConfiguration.class, + ServletManagementContextAutoConfiguration.class, ManagementContextAutoConfiguration.class, - ServletEndpointAutoConfiguration.class }) + ServletManagementContextAutoConfiguration.class }) protected static class Application { } diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/WebEndpointAutoConfigurationIntegrationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebEndpointsAutoConfigurationIntegrationTests.java similarity index 89% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/WebEndpointAutoConfigurationIntegrationTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebEndpointsAutoConfigurationIntegrationTests.java index 7b5f3a2d3d..ac4da1a7c2 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/WebEndpointAutoConfigurationIntegrationTests.java +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebEndpointsAutoConfigurationIntegrationTests.java @@ -14,15 +14,15 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.endpoint.web; +package org.springframework.boot.actuate.autoconfigure.integrationtest; import org.junit.Test; import org.springframework.boot.SpringBootConfiguration; -import org.springframework.boot.actuate.endpoint.web.HealthReactiveWebEndpointExtension; -import org.springframework.boot.actuate.endpoint.web.HealthWebEndpointExtension; -import org.springframework.boot.actuate.endpoint.web.StatusReactiveWebEndpointExtension; -import org.springframework.boot.actuate.endpoint.web.StatusWebEndpointExtension; +import org.springframework.boot.actuate.health.HealthReactiveWebEndpointExtension; +import org.springframework.boot.actuate.health.HealthWebEndpointExtension; +import org.springframework.boot.actuate.health.StatusReactiveWebEndpointExtension; +import org.springframework.boot.actuate.health.StatusWebEndpointExtension; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration; import org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration; @@ -52,10 +52,12 @@ import static org.assertj.core.api.Assertions.assertThat; * * @author Andy Wilkinson */ -public class WebEndpointAutoConfigurationIntegrationTests { +public class WebEndpointsAutoConfigurationIntegrationTests { @Test public void healthEndpointWebExtensionIsAutoConfigured() { + servletWebRunner() + .run((context) -> context.getBean(WebEndpointTestApplication.class)); servletWebRunner().run((context) -> assertThat(context) .hasSingleBean(HealthWebEndpointExtension.class)); } diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/mvc/MvcEndpointCorsIntegrationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebMvcEndpointCorsIntegrationTests.java similarity index 91% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/mvc/MvcEndpointCorsIntegrationTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebMvcEndpointCorsIntegrationTests.java index a53c408d9c..dd3e6cb33f 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/mvc/MvcEndpointCorsIntegrationTests.java +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebMvcEndpointCorsIntegrationTests.java @@ -14,16 +14,17 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint.mvc; +package org.springframework.boot.actuate.autoconfigure.integrationtest; import org.junit.Before; import org.junit.Test; -import org.springframework.boot.actuate.autoconfigure.ManagementContextAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.beans.BeansEndpointAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration; -import org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure.EndpointInfrastructureAutoConfiguration; -import org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure.ServletEndpointAutoConfiguration; -import org.springframework.boot.actuate.endpoint.BeansEndpoint; +import org.springframework.boot.actuate.autoconfigure.endpoint.web.servlet.WebMvcEndpointManagementContextConfiguration; +import org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagementContextAutoConfiguration; +import org.springframework.boot.actuate.beans.BeansEndpoint; import org.springframework.boot.autoconfigure.condition.ConditionEvaluationReport; import org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration; import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration; @@ -51,8 +52,9 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. * Integration tests for the actuator endpoints' CORS support * * @author Andy Wilkinson + * @see WebMvcEndpointManagementContextConfiguration */ -public class MvcEndpointCorsIntegrationTests { +public class WebMvcEndpointCorsIntegrationTests { private AnnotationConfigWebApplicationContext context; @@ -63,9 +65,9 @@ public class MvcEndpointCorsIntegrationTests { this.context.register(JacksonAutoConfiguration.class, HttpMessageConvertersAutoConfiguration.class, WebMvcAutoConfiguration.class, DispatcherServletAutoConfiguration.class, - EndpointInfrastructureAutoConfiguration.class, EndpointAutoConfiguration.class, ManagementContextAutoConfiguration.class, - ServletEndpointAutoConfiguration.class); + ServletManagementContextAutoConfiguration.class, + BeansEndpointAutoConfiguration.class); TestPropertyValues.of("endpoints.default.web.enabled:true").applyTo(this.context); } @@ -212,6 +214,7 @@ public class MvcEndpointCorsIntegrationTests { protected void configure(HttpSecurity http) throws Exception { http.cors(); } + } } diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/WebMvcEndpointInfrastructureAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebMvcEndpointExposureIntegrationTests.java similarity index 87% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/WebMvcEndpointInfrastructureAutoConfigurationTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebMvcEndpointExposureIntegrationTests.java index a08e6abd0a..ec97f7b94c 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/WebMvcEndpointInfrastructureAutoConfigurationTests.java +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebMvcEndpointExposureIntegrationTests.java @@ -14,13 +14,13 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure; +package org.springframework.boot.actuate.autoconfigure.integrationtest; -import org.apache.http.HttpStatus; import org.junit.Test; -import org.springframework.boot.actuate.autoconfigure.ManagementContextAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagementContextAutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration; import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration; @@ -29,6 +29,7 @@ import org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactor import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration; import org.springframework.boot.test.context.runner.WebApplicationContextRunner; import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.setup.MockMvcBuilders; @@ -37,11 +38,12 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.request; /** - * Tests for {@link EndpointInfrastructureAutoConfiguration} with Web MVC. + * Integration tests for Endpoints over Spring MVC. * * @author Stephane Nicoll + * @author Phillip Webb */ -public class WebMvcEndpointInfrastructureAutoConfigurationTests { +public class WebMvcEndpointExposureIntegrationTests { private final WebApplicationContextRunner contextRunner = new WebApplicationContextRunner() .withConfiguration(AutoConfigurations.of( @@ -50,9 +52,13 @@ public class WebMvcEndpointInfrastructureAutoConfigurationTests { JacksonAutoConfiguration.class, HttpMessageConvertersAutoConfiguration.class, WebMvcAutoConfiguration.class, EndpointAutoConfiguration.class, - EndpointInfrastructureAutoConfiguration.class, + EndpointAutoConfiguration.class, ManagementContextAutoConfiguration.class, - ServletEndpointAutoConfiguration.class)); + ServletManagementContextAutoConfiguration.class, + ManagementContextAutoConfiguration.class, + ServletManagementContextAutoConfiguration.class)) + .withConfiguration( + AutoConfigurations.of(EndpointAutoConfigurationClasses.ALL)); @Test public void webEndpointsAreDisabledByDefault() { @@ -118,10 +124,10 @@ public class WebMvcEndpointInfrastructureAutoConfigurationTests { path = "/application/" + path; MvcResult mvcResult = mockMvc.perform(request(method, path)).andReturn(); int status = mvcResult.getResponse().getStatus(); - if (status == HttpStatus.SC_OK) { + if (status == HttpStatus.OK.value()) { return true; } - else if (status == HttpStatus.SC_NOT_FOUND) { + if (status == HttpStatus.NOT_FOUND.value()) { return false; } throw new IllegalStateException(String diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/mvc/MvcEndpointIntegrationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebMvcEndpointIntegrationTests.java similarity index 90% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/mvc/MvcEndpointIntegrationTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebMvcEndpointIntegrationTests.java index a1224375bb..254006b84d 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/mvc/MvcEndpointIntegrationTests.java +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebMvcEndpointIntegrationTests.java @@ -14,16 +14,16 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint.mvc; +package org.springframework.boot.actuate.autoconfigure.integrationtest; import org.junit.After; import org.junit.Test; -import org.springframework.boot.actuate.autoconfigure.ManagementContextAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.audit.AuditAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.beans.BeansEndpointAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration; -import org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure.EndpointInfrastructureAutoConfiguration; -import org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure.ServletEndpointAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagementContextAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration; @@ -54,7 +54,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. * * @author Andy Wilkinson */ -public class MvcEndpointIntegrationTests { +public class WebMvcEndpointIntegrationTests { private AnnotationConfigWebApplicationContext context; @@ -112,12 +112,12 @@ public class MvcEndpointIntegrationTests { } @ImportAutoConfiguration({ JacksonAutoConfiguration.class, - EndpointInfrastructureAutoConfiguration.class, HttpMessageConvertersAutoConfiguration.class, EndpointAutoConfiguration.class, - ServletEndpointAutoConfiguration.class, AuditAutoConfiguration.class, + ServletManagementContextAutoConfiguration.class, AuditAutoConfiguration.class, PropertyPlaceholderAutoConfiguration.class, WebMvcAutoConfiguration.class, ManagementContextAutoConfiguration.class, AuditAutoConfiguration.class, - DispatcherServletAutoConfiguration.class }) + DispatcherServletAutoConfiguration.class, + BeansEndpointAutoConfiguration.class }) static class DefaultConfiguration { } diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/jdbc/DataSourceHealthIndicatorAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/jdbc/DataSourceHealthIndicatorAutoConfigurationTests.java new file mode 100644 index 0000000000..dae1a9a252 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/jdbc/DataSourceHealthIndicatorAutoConfigurationTests.java @@ -0,0 +1,138 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.jdbc; + +import javax.sql.DataSource; + +import org.junit.Test; + +import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration; +import org.springframework.boot.actuate.health.ApplicationHealthIndicator; +import org.springframework.boot.actuate.health.CompositeHealthIndicator; +import org.springframework.boot.actuate.health.HealthIndicator; +import org.springframework.boot.actuate.jdbc.DataSourceHealthIndicator; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration; +import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvidersConfiguration; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.jdbc.DataSourceBuilder; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; + +/** + * Tests for {@link DataSourceHealthIndicatorAutoConfiguration}. + * + * @author Phillip Webb + */ +public class DataSourceHealthIndicatorAutoConfigurationTests { + + private ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class, + HealthIndicatorAutoConfiguration.class, + DataSourceHealthIndicatorAutoConfiguration.class)) + .withPropertyValues("spring.datasource.initialize=false"); + + @Test + public void runShouldCreateIndicator() { + this.contextRunner.run((context) -> { + context.getBean(DataSourceHealthIndicator.class); + assertThat(context).hasSingleBean(DataSourceHealthIndicator.class) + .doesNotHaveBean(ApplicationHealthIndicator.class); + }); + } + + @Test + public void runWhenMultipleDataSourceBeansShouldCreateCompositeIndicator() + throws Exception { + this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class, + DataSourceConfig.class).run((context) -> { + assertThat(context).hasSingleBean(HealthIndicator.class); + HealthIndicator indicator = context + .getBean(CompositeHealthIndicator.class); + assertThat(indicator.health().getDetails()) + .containsOnlyKeys("dataSource", "testDataSource"); + }); + } + + @Test + public void runShouldFilterRoutingDataSource() throws Exception { + this.contextRunner + .withUserConfiguration(EmbeddedDataSourceConfiguration.class, + RoutingDatasourceConfig.class) + .run((context) -> assertThat(context) + .hasSingleBean(DataSourceHealthIndicator.class) + .doesNotHaveBean(CompositeHealthIndicator.class)); + } + + @Test + public void runWithValidationQueryPropertyShouldUseCustomQuery() { + this.contextRunner + .withUserConfiguration(DataSourceConfig.class, + DataSourcePoolMetadataProvidersConfiguration.class) + .withPropertyValues( + "spring.datasource.test.validation-query:SELECT from FOOBAR") + .run((context) -> { + assertThat(context).hasSingleBean(HealthIndicator.class); + DataSourceHealthIndicator indicator = context + .getBean(DataSourceHealthIndicator.class); + assertThat(indicator.getQuery()).isEqualTo("SELECT from FOOBAR"); + }); + } + + @Test + public void runWhenDisabledShouldNotCreateIndicator() throws Exception { + this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class) + .withPropertyValues("management.health.db.enabled:false") + .run((context) -> assertThat(context) + .doesNotHaveBean(DataSourceHealthIndicator.class) + .doesNotHaveBean(CompositeHealthIndicator.class) + .hasSingleBean(ApplicationHealthIndicator.class)); + } + + @Configuration + @EnableConfigurationProperties + protected static class DataSourceConfig { + + @Bean + @ConfigurationProperties(prefix = "spring.datasource.test") + public DataSource testDataSource() { + return DataSourceBuilder.create() + .type(org.apache.tomcat.jdbc.pool.DataSource.class) + .driverClassName("org.hsqldb.jdbc.JDBCDriver") + .url("jdbc:hsqldb:mem:test").username("sa").build(); + } + + } + + @Configuration + protected static class RoutingDatasourceConfig { + + @Bean + AbstractRoutingDataSource routingDataSource() { + return mock(AbstractRoutingDataSource.class); + } + + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/jms/JmsHealthIndicatorAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/jms/JmsHealthIndicatorAutoConfigurationTests.java new file mode 100644 index 0000000000..b98a2cd266 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/jms/JmsHealthIndicatorAutoConfigurationTests.java @@ -0,0 +1,58 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.jms; + +import org.junit.Test; + +import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration; +import org.springframework.boot.actuate.health.ApplicationHealthIndicator; +import org.springframework.boot.actuate.jms.JmsHealthIndicator; +import org.springframework.boot.actuate.ldap.LdapHealthIndicator; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link JmsHealthIndicatorAutoConfiguration}. + * + * @author Phillip Webb + */ +public class JmsHealthIndicatorAutoConfigurationTests { + + private ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withConfiguration(AutoConfigurations.of(ActiveMQAutoConfiguration.class, + JmsHealthIndicatorAutoConfiguration.class, + HealthIndicatorAutoConfiguration.class)); + + @Test + public void runShouldCreateIndicator() throws Exception { + this.contextRunner.run( + (context) -> assertThat(context).hasSingleBean(JmsHealthIndicator.class) + .doesNotHaveBean(ApplicationHealthIndicator.class)); + } + + @Test + public void runWhenDisabledShouldNotCreateIndicator() throws Exception { + this.contextRunner.withPropertyValues("management.health.jms.enabled:false") + .run((context) -> assertThat(context) + .doesNotHaveBean(LdapHealthIndicator.class) + .hasSingleBean(ApplicationHealthIndicator.class)); + } + +} diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaManagementContextConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaManagementContextConfigurationTests.java similarity index 91% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaManagementContextConfigurationTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaManagementContextConfigurationTests.java index 567ffb47a5..0db7c5ee50 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaManagementContextConfigurationTests.java +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaManagementContextConfigurationTests.java @@ -18,7 +18,8 @@ package org.springframework.boot.actuate.autoconfigure.jolokia; import org.junit.Test; -import org.springframework.boot.actuate.autoconfigure.ManagementContextAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagementContextAutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.assertj.AssertableWebApplicationContext; import org.springframework.boot.test.context.runner.ContextConsumer; @@ -40,12 +41,14 @@ public class JolokiaManagementContextConfigurationTests { private final WebApplicationContextRunner contextRunner = new WebApplicationContextRunner() .withConfiguration( AutoConfigurations.of(ManagementContextAutoConfiguration.class, + ServletManagementContextAutoConfiguration.class, JolokiaManagementContextConfiguration.class)); @Test public void jolokiaIsEnabledByDefault() { this.contextRunner.withPropertyValues("management.jolokia.enabled=true") .run((context) -> { + context.getBean(ServletRegistrationBean.class); assertThat(context).hasSingleBean(ServletRegistrationBean.class); ServletRegistrationBean registrationBean = context .getBean(ServletRegistrationBean.class); diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/ldap/LdapHealthIndicatorAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/ldap/LdapHealthIndicatorAutoConfigurationTests.java new file mode 100644 index 0000000000..1e17410306 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/ldap/LdapHealthIndicatorAutoConfigurationTests.java @@ -0,0 +1,73 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.ldap; + +import org.junit.Test; + +import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration; +import org.springframework.boot.actuate.health.ApplicationHealthIndicator; +import org.springframework.boot.actuate.ldap.LdapHealthIndicator; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.ldap.core.LdapOperations; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; + +/** + * Tests for {@link LdapHealthIndicatorAutoConfiguration}. + * + * @author Eddú Meléndez + * @author Stephane Nicoll + */ +public class LdapHealthIndicatorAutoConfigurationTests { + + private ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withUserConfiguration(LdapConfiguration.class).withConfiguration( + AutoConfigurations.of(LdapHealthIndicatorAutoConfiguration.class, + HealthIndicatorAutoConfiguration.class)); + + @Test + public void runShouldCreateIndicator() throws Exception { + this.contextRunner.run( + (context) -> assertThat(context).hasSingleBean(LdapHealthIndicator.class) + .doesNotHaveBean(ApplicationHealthIndicator.class)); + } + + @Test + public void runWhenDisabledShouldNotCreateIndicator() throws Exception { + this.contextRunner.withPropertyValues("management.health.ldap.enabled:false") + .run((context) -> assertThat(context) + .doesNotHaveBean(LdapHealthIndicator.class) + .hasSingleBean(ApplicationHealthIndicator.class)); + } + + @Configuration + @AutoConfigureBefore(LdapHealthIndicatorAutoConfiguration.class) + protected static class LdapConfiguration { + + @Bean + public LdapOperations ldapOperations() { + return mock(LdapOperations.class); + } + + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/liquibase/LiquibaseEndpointAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/liquibase/LiquibaseEndpointAutoConfigurationTests.java new file mode 100644 index 0000000000..5d98f702e0 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/liquibase/LiquibaseEndpointAutoConfigurationTests.java @@ -0,0 +1,67 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.liquibase; + +import liquibase.integration.spring.SpringLiquibase; +import org.junit.Test; + +import org.springframework.boot.actuate.liquibase.LiquibaseEndpoint; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; + +/** + * Tests for {@link LiquibaseEndpointAutoConfiguration}. + * + * @author Phillip Webb + */ +public class LiquibaseEndpointAutoConfigurationTests { + + private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withConfiguration( + AutoConfigurations.of(LiquibaseEndpointAutoConfiguration.class)) + .withUserConfiguration(LiquibaseConfiguration.class); + + @Test + public void runShouldHaveEndpointBean() { + this.contextRunner.run( + (context) -> assertThat(context).hasSingleBean(LiquibaseEndpoint.class)); + } + + @Test + public void runWhenEnabledPropertyIsFalseShouldNotHaveEndpointBean() + throws Exception { + this.contextRunner.withPropertyValues("endpoints.liquibase.enabled:false") + .run((context) -> assertThat(context) + .doesNotHaveBean(LiquibaseEndpoint.class)); + } + + @Configuration + static class LiquibaseConfiguration { + + @Bean + public SpringLiquibase liquibase() { + return mock(SpringLiquibase.class); + } + + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/logging/LogFileWebEndpointManagementContextConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/logging/LogFileWebEndpointManagementContextConfigurationTests.java new file mode 100644 index 0000000000..ec4995b9df --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/logging/LogFileWebEndpointManagementContextConfigurationTests.java @@ -0,0 +1,68 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.logging; + +import org.junit.Test; + +import org.springframework.boot.actuate.logger.LogFileWebEndpoint; +import org.springframework.boot.test.context.runner.WebApplicationContextRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link LogFileWebEndpointManagementContextConfiguration}. + * + * @author Andy Wilkinson + * @author Stephane Nicoll + * @author Phillip Webb + */ +public class LogFileWebEndpointManagementContextConfigurationTests { + + private WebApplicationContextRunner contextRunner = new WebApplicationContextRunner() + .withUserConfiguration( + LogFileWebEndpointManagementContextConfiguration.class); + + @Test + public void logFileWebEndpointIsAutoConfiguredWhenLoggingFileIsSet() { + this.contextRunner.withPropertyValues("logging.file:test.log").run( + (context) -> assertThat(context).hasSingleBean(LogFileWebEndpoint.class)); + } + + @Test + public void logFileWebEndpointIsAutoConfiguredWhenLoggingPathIsSet() { + this.contextRunner.withPropertyValues("logging.path:test/logs").run( + (context) -> assertThat(context).hasSingleBean(LogFileWebEndpoint.class)); + } + + @Test + public void logFileWebEndpointIsAutoConfiguredWhenExternalFileIsSet() { + this.contextRunner + .withPropertyValues("endpoints.logfile.external-file:external.log") + .run((context) -> assertThat(context) + .hasSingleBean(LogFileWebEndpoint.class)); + } + + @Test + public void logFileWebEndpointCanBeDisabled() { + this.contextRunner + .withPropertyValues("logging.file:test.log", + "endpoints.logfile.enabled:false") + .run((context) -> assertThat(context) + .hasSingleBean(LogFileWebEndpoint.class)); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/logging/LoggersEndpointAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/logging/LoggersEndpointAutoConfigurationTests.java new file mode 100644 index 0000000000..f4c6420286 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/logging/LoggersEndpointAutoConfigurationTests.java @@ -0,0 +1,66 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.logging; + +import org.junit.Test; + +import org.springframework.boot.actuate.logging.LoggersEndpoint; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.logging.LoggingSystem; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; + +/** + * Tests for {@link LoggersEndpointAutoConfiguration}. + * + * @author Phillip Webb + */ +public class LoggersEndpointAutoConfigurationTests { + + private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withConfiguration( + AutoConfigurations.of(LoggersEndpointAutoConfiguration.class)) + .withUserConfiguration(LoggingConfiguration.class); + + @Test + public void runShouldHaveEndpointBean() { + this.contextRunner.run( + (context) -> assertThat(context).hasSingleBean(LoggersEndpoint.class)); + } + + @Test + public void runWhenEnabledPropertyIsFalseShouldNotHaveEndpointBean() + throws Exception { + this.contextRunner.withPropertyValues("endpoints.loggers.enabled:false").run( + (context) -> assertThat(context).doesNotHaveBean(LoggersEndpoint.class)); + } + + @Configuration + static class LoggingConfiguration { + + @Bean + public LoggingSystem loggingSystem() { + return mock(LoggingSystem.class); + } + + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/mail/MailHealthIndicatorAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/mail/MailHealthIndicatorAutoConfigurationTests.java new file mode 100644 index 0000000000..50b5842fb9 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/mail/MailHealthIndicatorAutoConfigurationTests.java @@ -0,0 +1,58 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.mail; + +import org.junit.Test; + +import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration; +import org.springframework.boot.actuate.health.ApplicationHealthIndicator; +import org.springframework.boot.actuate.mail.MailHealthIndicator; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link MailHealthIndicatorAutoConfiguration}. + * + * @author Phillip Webb + */ +public class MailHealthIndicatorAutoConfigurationTests { + + private ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withConfiguration(AutoConfigurations.of(MailSenderAutoConfiguration.class, + MailHealthIndicatorAutoConfiguration.class, + HealthIndicatorAutoConfiguration.class)) + .withPropertyValues("spring.mail.host:smtp.example.com"); + + @Test + public void runShouldCreateIndicator() throws Exception { + this.contextRunner.run( + (context) -> assertThat(context).hasSingleBean(MailHealthIndicator.class) + .doesNotHaveBean(ApplicationHealthIndicator.class)); + } + + @Test + public void runWhenDisabledShouldNotCreateIndicator() throws Exception { + this.contextRunner.withPropertyValues("management.health.mail.enabled:false") + .run((context) -> assertThat(context) + .doesNotHaveBean(MailHealthIndicator.class) + .hasSingleBean(ApplicationHealthIndicator.class)); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/management/HeapDumpWebEndpointManagementContextConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/management/HeapDumpWebEndpointManagementContextConfigurationTests.java new file mode 100644 index 0000000000..0ff4b03328 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/management/HeapDumpWebEndpointManagementContextConfigurationTests.java @@ -0,0 +1,51 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.management; + +import org.junit.Test; + +import org.springframework.boot.actuate.management.HeapDumpWebEndpoint; +import org.springframework.boot.test.context.runner.WebApplicationContextRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link HeapDumpWebEndpointManagementContextConfiguration}. + * + * @author Phillip Webb + */ +public class HeapDumpWebEndpointManagementContextConfigurationTests { + + private final WebApplicationContextRunner contextRunner = new WebApplicationContextRunner() + .withPropertyValues("endpoints.default.web.enabled:true") + .withUserConfiguration( + HeapDumpWebEndpointManagementContextConfiguration.class); + + @Test + public void runShouldCreateIndicator() throws Exception { + this.contextRunner.run((context) -> assertThat(context) + .hasSingleBean(HeapDumpWebEndpoint.class)); + } + + @Test + public void runWhenDisabledShouldNotCreateIndicator() throws Exception { + this.contextRunner.withPropertyValues("endpoints.heapdump.enabled:false") + .run((context) -> assertThat(context) + .doesNotHaveBean(HeapDumpWebEndpoint.class)); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/management/ThreadDumpEndpointAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/management/ThreadDumpEndpointAutoConfigurationTests.java new file mode 100644 index 0000000000..31e1d84dae --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/management/ThreadDumpEndpointAutoConfigurationTests.java @@ -0,0 +1,52 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.management; + +import org.junit.Test; + +import org.springframework.boot.actuate.management.ThreadDumpEndpoint; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link ThreadDumpEndpointAutoConfiguration}. + * + * @author Phillip Webb + */ +public class ThreadDumpEndpointAutoConfigurationTests { + + private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withConfiguration( + AutoConfigurations.of(ThreadDumpEndpointAutoConfiguration.class)); + + @Test + public void runShouldHaveEndpointBean() { + this.contextRunner.run( + (context) -> assertThat(context).hasSingleBean(ThreadDumpEndpoint.class)); + } + + @Test + public void runWhenEnabledPropertyIsFalseShouldNotHaveEndpointBean() + throws Exception { + this.contextRunner.withPropertyValues("endpoints.threaddump.enabled:false") + .run((context) -> assertThat(context) + .doesNotHaveBean(ThreadDumpEndpoint.class)); + } + +} diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricExportAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricExportAutoConfigurationTests.java similarity index 98% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricExportAutoConfigurationTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricExportAutoConfigurationTests.java index c15932d4bf..9d5bdb614f 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricExportAutoConfigurationTests.java +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricExportAutoConfigurationTests.java @@ -25,11 +25,11 @@ import org.junit.rules.ExpectedException; import org.mockito.Mockito; import org.springframework.beans.factory.NoSuchBeanDefinitionException; -import org.springframework.boot.actuate.endpoint.MetricsEndpointMetricReader; import org.springframework.boot.actuate.metrics.GaugeService; import org.springframework.boot.actuate.metrics.Metric; import org.springframework.boot.actuate.metrics.export.MetricCopyExporter; import org.springframework.boot.actuate.metrics.export.MetricExporters; +import org.springframework.boot.actuate.metrics.reader.MetricsEndpointMetricReader; import org.springframework.boot.actuate.metrics.statsd.StatsdMetricWriter; import org.springframework.boot.actuate.metrics.writer.GaugeWriter; import org.springframework.boot.actuate.metrics.writer.MetricWriter; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricFilterAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricFilterAutoConfigurationTests.java similarity index 100% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricFilterAutoConfigurationTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricFilterAutoConfigurationTests.java diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricRepositoryAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricRepositoryAutoConfigurationTests.java similarity index 100% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricRepositoryAutoConfigurationTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricRepositoryAutoConfigurationTests.java diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsDropwizardAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsDropwizardAutoConfigurationTests.java similarity index 100% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsDropwizardAutoConfigurationTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsDropwizardAutoConfigurationTests.java diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsEndpointAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsEndpointAutoConfigurationTests.java new file mode 100644 index 0000000000..e54a557fd1 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsEndpointAutoConfigurationTests.java @@ -0,0 +1,51 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.metrics; + +import org.junit.Test; + +import org.springframework.boot.actuate.metrics.MetricsEndpoint; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link MetricsEndpointAutoConfiguration}. + * + * @author Phillip Webb + */ +public class MetricsEndpointAutoConfigurationTests { + + private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withConfiguration( + AutoConfigurations.of(MetricsEndpointAutoConfiguration.class)); + + @Test + public void runShouldHaveEndpointBean() { + this.contextRunner.run( + (context) -> assertThat(context).hasSingleBean(MetricsEndpoint.class)); + } + + @Test + public void runWhenEnabledPropertyIsFalseShouldNotHaveEndpointBean() + throws Exception { + this.contextRunner.withPropertyValues("endpoints.metrics.enabled:false").run( + (context) -> assertThat(context).doesNotHaveBean(MetricsEndpoint.class)); + } + +} diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/PublicMetricsAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/PublicMetricsAutoConfigurationTests.java similarity index 94% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/PublicMetricsAutoConfigurationTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/PublicMetricsAutoConfigurationTests.java index ac9d1bb043..49be636155 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/PublicMetricsAutoConfigurationTests.java +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/PublicMetricsAutoConfigurationTests.java @@ -30,20 +30,20 @@ import org.junit.After; import org.junit.Test; import org.springframework.boot.actuate.autoconfigure.cache.CacheStatisticsAutoConfiguration; -import org.springframework.boot.actuate.endpoint.CachePublicMetrics; -import org.springframework.boot.actuate.endpoint.DataSourcePublicMetrics; -import org.springframework.boot.actuate.endpoint.MetricReaderPublicMetrics; -import org.springframework.boot.actuate.endpoint.PublicMetrics; -import org.springframework.boot.actuate.endpoint.RichGaugeReaderPublicMetrics; -import org.springframework.boot.actuate.endpoint.SystemPublicMetrics; -import org.springframework.boot.actuate.endpoint.TomcatPublicMetrics; +import org.springframework.boot.actuate.autoconfigure.web.servlet.MockServletWebServerFactory; +import org.springframework.boot.actuate.cache.CachePublicMetrics; +import org.springframework.boot.actuate.metrics.DataSourcePublicMetrics; import org.springframework.boot.actuate.metrics.Metric; +import org.springframework.boot.actuate.metrics.PublicMetrics; +import org.springframework.boot.actuate.metrics.SystemPublicMetrics; +import org.springframework.boot.actuate.metrics.TomcatPublicMetrics; +import org.springframework.boot.actuate.metrics.reader.MetricReaderPublicMetrics; import org.springframework.boot.actuate.metrics.rich.RichGauge; import org.springframework.boot.actuate.metrics.rich.RichGaugeReader; -import org.springframework.boot.actuate.servlet.MockServletWebServerFactory; +import org.springframework.boot.actuate.metrics.rich.RichGaugeReaderPublicMetrics; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder; import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvidersConfiguration; +import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext; import org.springframework.cache.CacheManager; diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/mongo/MongoHealthIndicatorAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/mongo/MongoHealthIndicatorAutoConfigurationTests.java new file mode 100644 index 0000000000..c97b82077e --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/mongo/MongoHealthIndicatorAutoConfigurationTests.java @@ -0,0 +1,59 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.mongo; + +import org.junit.Test; + +import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration; +import org.springframework.boot.actuate.health.ApplicationHealthIndicator; +import org.springframework.boot.actuate.mongo.MongoHealthIndicator; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration; +import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link MongoHealthIndicatorAutoConfiguration} + * + * @author Phillip Webb + */ +public class MongoHealthIndicatorAutoConfigurationTests { + + private ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class, + MongoDataAutoConfiguration.class, + MongoHealthIndicatorAutoConfiguration.class, + HealthIndicatorAutoConfiguration.class)); + + @Test + public void runShouldCreateIndicator() throws Exception { + this.contextRunner.run( + (context) -> assertThat(context).hasSingleBean(MongoHealthIndicator.class) + .doesNotHaveBean(ApplicationHealthIndicator.class)); + } + + @Test + public void runWhenDisabledShouldNotCreateIndicator() throws Exception { + this.contextRunner.withPropertyValues("management.health.mongo.enabled:false") + .run((context) -> assertThat(context) + .doesNotHaveBean(MongoHealthIndicator.class) + .hasSingleBean(ApplicationHealthIndicator.class)); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/neo4j/Neo4jHealthIndicatorAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/neo4j/Neo4jHealthIndicatorAutoConfigurationTests.java new file mode 100644 index 0000000000..4d0650d970 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/neo4j/Neo4jHealthIndicatorAutoConfigurationTests.java @@ -0,0 +1,72 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.neo4j; + +import org.junit.Test; +import org.neo4j.ogm.session.SessionFactory; + +import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration; +import org.springframework.boot.actuate.health.ApplicationHealthIndicator; +import org.springframework.boot.actuate.neo4j.Neo4jHealthIndicator; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; + +/** + * Tests for {@link Neo4jHealthIndicatorAutoConfiguration}. + * + * @author Phillp Webb + */ +public class Neo4jHealthIndicatorAutoConfigurationTests { + + private ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withConfiguration(AutoConfigurations.of(Neo4jConfiguration.class, + Neo4jHealthIndicatorAutoConfiguration.class, + HealthIndicatorAutoConfiguration.class)); + + @Test + public void runShouldCreateIndicator() throws Exception { + this.contextRunner.run( + (context) -> assertThat(context).hasSingleBean(Neo4jHealthIndicator.class) + .doesNotHaveBean(ApplicationHealthIndicator.class)); + } + + @Test + public void runWhenDisabledShouldNotCreateIndicator() throws Exception { + this.contextRunner.withPropertyValues("management.health.neo4j.enabled:false") + .run((context) -> assertThat(context) + .doesNotHaveBean(Neo4jHealthIndicator.class) + .hasSingleBean(ApplicationHealthIndicator.class)); + } + + @Configuration + @AutoConfigureBefore(Neo4jHealthIndicatorAutoConfiguration.class) + protected static class Neo4jConfiguration { + + @Bean + public SessionFactory sessionFactory() { + return mock(SessionFactory.class); + } + + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/redis/RedisHealthIndicatorAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/redis/RedisHealthIndicatorAutoConfigurationTests.java new file mode 100644 index 0000000000..d617f54891 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/redis/RedisHealthIndicatorAutoConfigurationTests.java @@ -0,0 +1,65 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.redis; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration; +import org.springframework.boot.actuate.health.ApplicationHealthIndicator; +import org.springframework.boot.actuate.redis.RedisHealthIndicator; +import org.springframework.boot.actuate.redis.RedisReactiveHealthIndicator; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import org.springframework.boot.testsupport.runner.classpath.ClassPathExclusions; +import org.springframework.boot.testsupport.runner.classpath.ModifiedClassPathRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link RedisHealthIndicatorAutoConfiguration}. + * + * @author Phillip Webb + */ +@RunWith(ModifiedClassPathRunner.class) +@ClassPathExclusions({ "reactor-core*.jar", "lettuce-core*.jar" }) +public class RedisHealthIndicatorAutoConfigurationTests { + + private ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withConfiguration(AutoConfigurations.of(RedisAutoConfiguration.class, + RedisHealthIndicatorAutoConfiguration.class, + HealthIndicatorAutoConfiguration.class)); + + @Test + public void runShouldCreateIndicator() throws Exception { + this.contextRunner.run( + (context) -> assertThat(context).hasSingleBean(RedisHealthIndicator.class) + .doesNotHaveBean(RedisReactiveHealthIndicator.class) + .doesNotHaveBean(ApplicationHealthIndicator.class)); + } + + @Test + public void runWhenDisabledShouldNotCreateIndicator() throws Exception { + this.contextRunner.withPropertyValues("management.health.redis.enabled:false") + .run((context) -> assertThat(context) + .doesNotHaveBean(RedisHealthIndicator.class) + .doesNotHaveBean(RedisReactiveHealthIndicator.class) + .hasSingleBean(ApplicationHealthIndicator.class)); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/redis/RedisReactiveHealthIndicatorConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/redis/RedisReactiveHealthIndicatorConfigurationTests.java new file mode 100644 index 0000000000..c307e24d3d --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/redis/RedisReactiveHealthIndicatorConfigurationTests.java @@ -0,0 +1,60 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.redis; + +import org.junit.Test; + +import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration; +import org.springframework.boot.actuate.health.ApplicationHealthIndicator; +import org.springframework.boot.actuate.redis.RedisHealthIndicator; +import org.springframework.boot.actuate.redis.RedisReactiveHealthIndicator; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link RedisReactiveHealthIndicatorConfiguration}. + * + * @author Phillip Webb + */ +public class RedisReactiveHealthIndicatorConfigurationTests { + + private ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withConfiguration(AutoConfigurations.of(RedisAutoConfiguration.class, + RedisHealthIndicatorAutoConfiguration.class, + HealthIndicatorAutoConfiguration.class)); + + @Test + public void runShouldCreateIndicator() throws Exception { + this.contextRunner.run((context) -> assertThat(context) + .hasSingleBean(RedisReactiveHealthIndicatorConfiguration.class) + .doesNotHaveBean(RedisHealthIndicator.class) + .doesNotHaveBean(ApplicationHealthIndicator.class)); + } + + @Test + public void runWhenDisabledShouldNotCreateIndicator() throws Exception { + this.contextRunner.withPropertyValues("management.health.redis.enabled:false") + .run((context) -> assertThat(context) + .doesNotHaveBean(RedisReactiveHealthIndicator.class) + .doesNotHaveBean(RedisHealthIndicator.class) + .hasSingleBean(ApplicationHealthIndicator.class)); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/solr/SolrHealthIndicatorAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/solr/SolrHealthIndicatorAutoConfigurationTests.java new file mode 100644 index 0000000000..8d98475e8c --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/solr/SolrHealthIndicatorAutoConfigurationTests.java @@ -0,0 +1,57 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.solr; + +import org.junit.Test; + +import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration; +import org.springframework.boot.actuate.health.ApplicationHealthIndicator; +import org.springframework.boot.actuate.solr.SolrHealthIndicator; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link SolrHealthIndicatorAutoConfiguration}. + * + * @author Phillip Webb + */ +public class SolrHealthIndicatorAutoConfigurationTests { + + private ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withConfiguration(AutoConfigurations.of(SolrAutoConfiguration.class, + SolrHealthIndicatorAutoConfiguration.class, + HealthIndicatorAutoConfiguration.class)); + + @Test + public void runShouldCreateIndicator() throws Exception { + this.contextRunner.run( + (context) -> assertThat(context).hasSingleBean(SolrHealthIndicator.class) + .doesNotHaveBean(ApplicationHealthIndicator.class)); + } + + @Test + public void runWhenDisabledShouldNotCreateIndicator() throws Exception { + this.contextRunner.withPropertyValues("management.health.solr.enabled:false") + .run((context) -> assertThat(context) + .doesNotHaveBean(SolrHealthIndicator.class) + .hasSingleBean(ApplicationHealthIndicator.class)); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/system/DiskSpaceHealthIndicatorAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/system/DiskSpaceHealthIndicatorAutoConfigurationTests.java new file mode 100644 index 0000000000..88554efc05 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/system/DiskSpaceHealthIndicatorAutoConfigurationTests.java @@ -0,0 +1,56 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.system; + +import org.junit.Test; + +import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration; +import org.springframework.boot.actuate.health.ApplicationHealthIndicator; +import org.springframework.boot.actuate.system.DiskSpaceHealthIndicator; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link DiskSpaceHealthIndicatorAutoConfiguration}. + * + * @author Phillip Webb + */ +public class DiskSpaceHealthIndicatorAutoConfigurationTests { + + private ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withConfiguration( + AutoConfigurations.of(DiskSpaceHealthIndicatorAutoConfiguration.class, + HealthIndicatorAutoConfiguration.class)); + + @Test + public void runShouldCreateIndicator() throws Exception { + this.contextRunner.run((context) -> assertThat(context) + .hasSingleBean(DiskSpaceHealthIndicator.class) + .doesNotHaveBean(ApplicationHealthIndicator.class)); + } + + @Test + public void runWhenDisabledShouldNotCreateIndicator() throws Exception { + this.contextRunner.withPropertyValues("management.health.diskspace.enabled:false") + .run((context) -> assertThat(context) + .doesNotHaveBean(DiskSpaceHealthIndicator.class) + .hasSingleBean(ApplicationHealthIndicator.class)); + } + +} diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/trace/TraceEndpointAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/trace/TraceEndpointAutoConfigurationTests.java new file mode 100644 index 0000000000..92016058f9 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/trace/TraceEndpointAutoConfigurationTests.java @@ -0,0 +1,51 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.trace; + +import org.junit.Test; + +import org.springframework.boot.actuate.trace.TraceEndpoint; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link TraceEndpointAutoConfiguration}. + * + * @author Phillip Webb + */ +public class TraceEndpointAutoConfigurationTests { + + private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withConfiguration( + AutoConfigurations.of(TraceEndpointAutoConfiguration.class)); + + @Test + public void runShouldHaveEndpointBean() { + this.contextRunner + .run((context) -> assertThat(context).hasSingleBean(TraceEndpoint.class)); + } + + @Test + public void runWhenEnabledPropertyIsFalseShouldNotHaveEndpointBean() + throws Exception { + this.contextRunner.withPropertyValues("endpoints.trace.enabled:false").run( + (context) -> assertThat(context).doesNotHaveBean(TraceEndpoint.class)); + } + +} diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/trace/TraceRepositoryAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/trace/TraceRepositoryAutoConfigurationTests.java similarity index 100% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/trace/TraceRepositoryAutoConfigurationTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/trace/TraceRepositoryAutoConfigurationTests.java diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/trace/TraceWebFilterAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/trace/TraceWebFilterAutoConfigurationTests.java similarity index 100% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/trace/TraceWebFilterAutoConfigurationTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/trace/TraceWebFilterAutoConfigurationTests.java diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/ManagementContextConfigurationImportSelectorTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementContextConfigurationImportSelectorTests.java similarity index 93% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/ManagementContextConfigurationImportSelectorTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementContextConfigurationImportSelectorTests.java index 692518df5b..25a8f90da5 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/ManagementContextConfigurationImportSelectorTests.java +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementContextConfigurationImportSelectorTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure; +package org.springframework.boot.actuate.autoconfigure.web.server; import java.util.List; import java.util.stream.Collectors; @@ -22,6 +22,8 @@ import java.util.stream.Stream; import org.junit.Test; +import org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration; +import org.springframework.boot.actuate.autoconfigure.web.ManagementContextType; import org.springframework.core.annotation.Order; import org.springframework.core.type.StandardAnnotationMetadata; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/web/ManagementServerPropertiesTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerPropertiesTests.java similarity index 97% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/web/ManagementServerPropertiesTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerPropertiesTests.java index 88f326cecb..a38a3f2ed1 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/web/ManagementServerPropertiesTests.java +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerPropertiesTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.web; +package org.springframework.boot.actuate.autoconfigure.web.server; import org.junit.After; import org.junit.Test; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/servlet/MockServletWebServerFactory.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/servlet/MockServletWebServerFactory.java similarity index 97% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/servlet/MockServletWebServerFactory.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/servlet/MockServletWebServerFactory.java index f1c30b728c..6eb8056358 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/servlet/MockServletWebServerFactory.java +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/servlet/MockServletWebServerFactory.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.servlet; +package org.springframework.boot.actuate.autoconfigure.web.servlet; import java.util.Arrays; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/RequestMappingEndpointTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/servlet/RequestMappingEndpointTests.java similarity index 89% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/RequestMappingEndpointTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/servlet/RequestMappingEndpointTests.java index f38479eaef..79894b1166 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/RequestMappingEndpointTests.java +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/servlet/RequestMappingEndpointTests.java @@ -14,20 +14,20 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.autoconfigure.web.servlet; import java.util.Collections; import java.util.Map; import org.junit.Test; -import org.springframework.boot.endpoint.EndpointInfo; -import org.springframework.boot.endpoint.OperationType; +import org.springframework.boot.actuate.endpoint.EndpointInfo; +import org.springframework.boot.actuate.endpoint.OperationType; +import org.springframework.boot.actuate.endpoint.web.OperationRequestPredicate; +import org.springframework.boot.actuate.endpoint.web.WebEndpointHttpMethod; +import org.springframework.boot.actuate.endpoint.web.WebEndpointOperation; +import org.springframework.boot.actuate.endpoint.web.servlet.WebMvcEndpointHandlerMapping; import org.springframework.boot.endpoint.web.EndpointMapping; -import org.springframework.boot.endpoint.web.OperationRequestPredicate; -import org.springframework.boot.endpoint.web.WebEndpointHttpMethod; -import org.springframework.boot.endpoint.web.WebEndpointOperation; -import org.springframework.boot.endpoint.web.mvc.WebEndpointServletHandlerMapping; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -116,7 +116,7 @@ public class RequestMappingEndpointTests { @SuppressWarnings("unchecked") @Test public void concreteMethodMappings() { - WebEndpointServletHandlerMapping mapping = createHandlerMapping(); + WebMvcEndpointHandlerMapping mapping = createHandlerMapping(); this.endpoint.setMethodMappings( Collections.>singletonList(mapping)); Map result = this.endpoint.mappings(); @@ -132,13 +132,13 @@ public class RequestMappingEndpointTests { .containsOnlyKeys("method")); } - private WebEndpointServletHandlerMapping createHandlerMapping() { + private WebMvcEndpointHandlerMapping createHandlerMapping() { OperationRequestPredicate requestPredicate = new OperationRequestPredicate("test", WebEndpointHttpMethod.GET, Collections.singletonList("application/json"), Collections.singletonList("application/json")); WebEndpointOperation operation = new WebEndpointOperation(OperationType.READ, (arguments) -> "Invoked", true, requestPredicate, "test"); - WebEndpointServletHandlerMapping mapping = new WebEndpointServletHandlerMapping( + WebMvcEndpointHandlerMapping mapping = new WebMvcEndpointHandlerMapping( new EndpointMapping("application"), Collections.singleton(new EndpointInfo<>("test", true, Collections.singleton(operation)))); diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReaderNoJmxTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReaderNoJmxTests.java similarity index 96% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReaderNoJmxTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReaderNoJmxTests.java index 0d03bf6d81..3b0400796e 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReaderNoJmxTests.java +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReaderNoJmxTests.java @@ -22,7 +22,7 @@ import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.actuate.autoconfigure.metrics.PublicMetricsAutoConfiguration; -import org.springframework.boot.actuate.endpoint.MetricReaderPublicMetrics; +import org.springframework.boot.actuate.metrics.reader.MetricReaderPublicMetrics; import org.springframework.boot.autoconfigure.integration.IntegrationAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.annotation.Configuration; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReaderTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReaderTests.java similarity index 97% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReaderTests.java rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReaderTests.java index f8a01b0903..46e443dfdd 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReaderTests.java +++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReaderTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2016 the original author or authors. + * Copyright 2012-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-boot-actuator-autoconfigure/src/test/resources/actuator-docs-index.html b/spring-boot-actuator-autoconfigure/src/test/resources/actuator-docs-index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/spring-boot-actuator-autoconfigure/src/test/resources/cache/test-ehcache.xml b/spring-boot-actuator-autoconfigure/src/test/resources/cache/test-ehcache.xml new file mode 100644 index 0000000000..cdee1d0503 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/resources/cache/test-ehcache.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/spring-boot-actuator-autoconfigure/src/test/resources/cache/test-hazelcast.xml b/spring-boot-actuator-autoconfigure/src/test/resources/cache/test-hazelcast.xml new file mode 100644 index 0000000000..fe46b433f3 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/resources/cache/test-hazelcast.xml @@ -0,0 +1,12 @@ + + + + + + + + + + diff --git a/spring-boot-actuator-autoconfigure/src/test/resources/cache/test-infinispan.xml b/spring-boot-actuator-autoconfigure/src/test/resources/cache/test-infinispan.xml new file mode 100644 index 0000000000..741fb6292b --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/resources/cache/test-infinispan.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/spring-boot-actuator-autoconfigure/src/test/resources/db/changelog/db.changelog-master.yaml b/spring-boot-actuator-autoconfigure/src/test/resources/db/changelog/db.changelog-master.yaml new file mode 100644 index 0000000000..134b17b543 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/resources/db/changelog/db.changelog-master.yaml @@ -0,0 +1,20 @@ +databaseChangeLog: + - changeSet: + id: 1 + author: marceloverdijk + changes: + - createTable: + tableName: customer + columns: + - column: + name: id + type: int + autoIncrement: true + constraints: + primaryKey: true + nullable: false + - column: + name: name + type: varchar(50) + constraints: + nullable: false diff --git a/spring-boot-actuator-autoconfigure/src/test/resources/db/create-custom-schema.sql b/spring-boot-actuator-autoconfigure/src/test/resources/db/create-custom-schema.sql new file mode 100644 index 0000000000..469b79ad89 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/resources/db/create-custom-schema.sql @@ -0,0 +1 @@ +CREATE SCHEMA CUSTOMSCHEMA; diff --git a/spring-boot-actuator-autoconfigure/src/test/resources/db/migration/V1__init.sql b/spring-boot-actuator-autoconfigure/src/test/resources/db/migration/V1__init.sql new file mode 100644 index 0000000000..e69de29bb2 diff --git a/spring-boot-actuator-autoconfigure/src/test/resources/git.properties b/spring-boot-actuator-autoconfigure/src/test/resources/git.properties new file mode 100644 index 0000000000..d88056068a --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/resources/git.properties @@ -0,0 +1,13 @@ +#Generated by Git-Commit-Id-Plugin +#Thu May 23 09:26:42 BST 2013 +git.commit.id.abbrev=e02a4f3 +git.commit.user.email=dsyer@vmware.com +git.commit.message.full=Update Spring +git.commit.id=e02a4f3b6f452cdbf6dd311f1362679eb4c31ced +git.commit.message.short=Update Spring +git.commit.user.name=Dave Syer +git.build.user.name=Dave Syer +git.build.user.email=dsyer@vmware.com +git.branch=develop +git.commit.time=2013-04-24T08\:42\:13+0100 +git.build.time=2013-05-23T09\:26\:42+0100 diff --git a/spring-boot-actuator-autoconfigure/src/test/resources/hazelcast.xml b/spring-boot-actuator-autoconfigure/src/test/resources/hazelcast.xml new file mode 100644 index 0000000000..b45ed52520 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/resources/hazelcast.xml @@ -0,0 +1,12 @@ + + + + + + + + + diff --git a/spring-boot-actuator-autoconfigure/src/test/resources/log4j2-test.xml b/spring-boot-actuator-autoconfigure/src/test/resources/log4j2-test.xml new file mode 100644 index 0000000000..8c0f7f4652 --- /dev/null +++ b/spring-boot-actuator-autoconfigure/src/test/resources/log4j2-test.xml @@ -0,0 +1,17 @@ + + + + %xwEx + %5p + + + + + + + + + + + + diff --git a/spring-boot-actuator-autoconfigure/src/test/resources/test.jks b/spring-boot-actuator-autoconfigure/src/test/resources/test.jks new file mode 100644 index 0000000000000000000000000000000000000000..cc0d7081c2e213f41f30aaba7611d55982968852 GIT binary patch literal 2248 zcmchYS5VW57RK{WLTDzS1OtM!fJje5i@P8OX(5zQrHm^`l@=+ANKFJp0!S55xHJVM zh$tYvhy)1&QbdY01@Y306saz|bLZZj@%=uWhwt}r=FE4_eCKfKa0vtgfsYFKyI=tn zZzsoqBdPB$5Mc`fv4Jr(=phCH(UBS-b&KO*g?YmrtDdmZgSRTcx1A)RGvl3lTH65Xe2 zgrJucgcQzX<{6~tFnpKwj4NKz-#(p~FTYCeSqjx?fh0H3oB~aEk zRDvPL7jeia9$YN^ClELgem{09cl@g!-Xl_kkGNL|%M>0i@1IWe@i(-&ctiO#hea^^ z@_jfH{A_x|YlrKw@4fKwu{00(=E{#4#O5{bCC_pJSTd0r0O?WI>+Zdq<-6}cKb=l- zlP=&z;tysY(kC}Yo{^Ah$?CS49M={Z2d@;=&o|k}b`rTv%iy0#o(HRWK(FvvZ;DU@ z7qdE%M4Rd(9(SoL-^*z0!4xq;bLh+v4Uq`4i!*E5JS#z>zEn!@MYgfL>DATUXHflg z4y;tK2!>IR>5d=$eyW4qRNEHQX1H=>__4heXMjW;ENH3@=wVEnv`eJTK*Sue9lKhKYBe?$kDi!ktg_WNsR|U53-M<>wXD<&>3tJ@*RKbjkEb*g{p)0N8LO zV*dWh#+Dy3`yB(h6UQ}vN%CfFL z%v>)mz93LK|6-C@fyyHdou)@(&pCG2>3PWYLAj5E!s?SuQqG~brC6d!Sy$oO&g}0t z8rqRBO9;+v^6vP0Rh5c1zY~&vNxpT^+kp*D)do*TUb|cx+lc823H1gHbG4cYp-xKr z)LmoFEs@twECT^QyXzvwLQ-Y#Ef=n}t;MWYu&RB+>UDCi*zwDz*v3^3uAi-^?%dex z%Pm?h1tJ(3m{B?+EUJUdVn zoSPFr1QhI%)6L5+^+zbVESB+p+%wGQaQH5Q<3|*J+&-l~Fw2$Dr20H~#j;i_P94UK zwVPL*2&n2Ja8L+KnjWFd<)KaE)Ct<-cmo-)GVwT>gRyg)#O70Nun>!>?!g_r)Z?y~ zyMyh&Um|VcgI*>FAQ>*DZYBoM!cdRxng{JM3$$LjB%!m)S)vH!n<2>LU`F&;npWNR z`pXH*>+7Y%k_|;#;X*YXB!h57!&60a#pC?i67a&c#t(#MjjfOgFGIdFnH_~otomjY zM3-md`gy;1701$d;-d}yoSaP%R?jv|k#_p=8czgIw4abA_iJm7W;qD%R!~NZm&Y4Q zv*#ZH2qGd~Oe$@)$4EF4M;t8LkfhmX8D#vOjBGZFs+e;i z5F{K!g9Kw}V5eLN7yyHzHu3rO7&wemHrgP18x8>6Y#@vemiH(!Ay!ZrAG?*0rw=9Y zzl7r#!u|{4`h{@+kDS2p{?!@6$LU3Ja`bYi_y=G_P;jgYMjfYu#bWWQs&;=#ECz@B zkNm&SLjxrKY01&YfY1OQ5QYYDfoT8$O4&k(o7PRcvfhTS+{E4Xc*I}FyR~vEtx`X| zSGbtbi}{8H-Vdd9qpBy=qkg+}cT_WVPK};*f{zf62$8UVVu`L2L|;Mee~#FT0;n*f z4Fem7v4cy4cR`SVCyWk1ApTo#)tDqfC5sR(MwegDu_Z&eMZRO>yrktDK5NA^KhQgS zVU3RFi$%m#2(D^qvby$;g=i<-KELg#=}O?;36clu=6px0)&o?5|dNrv5JHvcs0J5~Y6>;;$lIC(o!b+$u3PV8!L zr!Pnn76JX^0_y84e0*Snt@B;ob}Morg.springframework.boot spring-boot - - org.springframework.boot - spring-boot-autoconfigure - + com.fasterxml.jackson.core jackson-databind - - - org.springframework - spring-core - - - org.springframework - spring-context - - - - com.fasterxml.jackson.dataformat - jackson-dataformat-xml true @@ -72,16 +56,6 @@ java-statsd-client true - - com.zaxxer - HikariCP - true - - - io.dropwizard.metrics - metrics-core - true - io.lettuce lettuce-core @@ -92,57 +66,21 @@ jest true - - javax.cache - cache-api - true - javax.jms javax.jms-api true - - javax.servlet - javax.servlet-api - true - net.sf.ehcache ehcache true - - org.apache.activemq - activemq-broker - true - - - geronimo-jms_1.1_spec - org.apache.geronimo.specs - - - - - org.apache.commons - commons-dbcp2 - true - org.apache.tomcat.embed tomcat-embed-core true - - org.apache.tomcat.embed - tomcat-embed-el - true - - - org.apache.tomcat - tomcat-jdbc - true - org.elasticsearch elasticsearch @@ -168,11 +106,6 @@ hibernate-validator true - - org.jolokia - jolokia-core - true - org.infinispan infinispan-spring4-embedded @@ -198,6 +131,11 @@ spring-webflux true + + org.springframework + spring-web + true + org.springframework spring-webmvc @@ -258,7 +196,7 @@ org.springframework.security - spring-security-config + spring-security-core true @@ -267,11 +205,6 @@ true - - org.springframework.boot - spring-boot-autoconfigure-processor - true - org.springframework.boot spring-boot-configuration-processor @@ -289,8 +222,28 @@ test - ch.qos.logback - logback-classic + org.springframework.boot + spring-boot-autoconfigure + test + + + org.apache.logging.log4j + log4j-slf4j-impl + test + + + org.apache.logging.log4j + log4j-api + test + + + org.apache.logging.log4j + log4j-core + test + + + org.glassfish.jersey.media + jersey-media-json-jackson test @@ -299,13 +252,13 @@ test - io.projectreactor.ipc - reactor-netty + io.projectreactor + reactor-test test - io.projectreactor - reactor-test + io.projectreactor.ipc + reactor-netty test @@ -324,21 +277,11 @@ - - org.aspectj - aspectjrt - test - org.hsqldb hsqldb test - - org.glassfish.jersey.media - jersey-media-json-jackson - test - org.glassfish.jersey.ext jersey-spring4 @@ -349,35 +292,5 @@ jsonassert test - - org.springframework.data - spring-data-elasticsearch - test - - - org.springframework.data - spring-data-rest-webmvc - test - - - org.springframework.integration - spring-integration-jmx - test - - - org.springframework.security - spring-security-test - test - - - org.yaml - snakeyaml - test - - - redis.clients - jedis - true - diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/RabbitHealthIndicator.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/amqp/RabbitHealthIndicator.java similarity index 86% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/RabbitHealthIndicator.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/amqp/RabbitHealthIndicator.java index 93e4fffbd8..9deb3f2c14 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/RabbitHealthIndicator.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/amqp/RabbitHealthIndicator.java @@ -14,9 +14,12 @@ * limitations under the License. */ -package org.springframework.boot.actuate.health; +package org.springframework.boot.actuate.amqp; import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.boot.actuate.health.AbstractHealthIndicator; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.HealthIndicator; import org.springframework.util.Assert; /** @@ -31,7 +34,7 @@ public class RabbitHealthIndicator extends AbstractHealthIndicator { private final RabbitTemplate rabbitTemplate; public RabbitHealthIndicator(RabbitTemplate rabbitTemplate) { - Assert.notNull(rabbitTemplate, "RabbitTemplate must not be null."); + Assert.notNull(rabbitTemplate, "RabbitTemplate must not be null"); this.rabbitTemplate = rabbitTemplate; } diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/AuditEventsEndpoint.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/audit/AuditEventsEndpoint.java similarity index 86% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/AuditEventsEndpoint.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/audit/AuditEventsEndpoint.java index e896aeeaee..ba9eaafa0e 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/AuditEventsEndpoint.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/audit/AuditEventsEndpoint.java @@ -14,15 +14,13 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.audit; import java.util.Date; import java.util.List; -import org.springframework.boot.actuate.audit.AuditEvent; -import org.springframework.boot.actuate.audit.AuditEventRepository; -import org.springframework.boot.endpoint.Endpoint; -import org.springframework.boot.endpoint.ReadOperation; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; import org.springframework.util.Assert; /** diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/AuditEventsJmxEndpointExtension.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/audit/AuditEventsJmxEndpointExtension.java similarity index 80% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/AuditEventsJmxEndpointExtension.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/audit/AuditEventsJmxEndpointExtension.java index 2fa41c67a6..d6db27d368 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/AuditEventsJmxEndpointExtension.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/audit/AuditEventsJmxEndpointExtension.java @@ -14,14 +14,13 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint.jmx; +package org.springframework.boot.actuate.audit; import java.util.Date; -import org.springframework.boot.actuate.endpoint.AuditEventsEndpoint; -import org.springframework.boot.actuate.endpoint.AuditEventsEndpoint.AuditEventsDescriptor; -import org.springframework.boot.endpoint.ReadOperation; -import org.springframework.boot.endpoint.jmx.JmxEndpointExtension; +import org.springframework.boot.actuate.audit.AuditEventsEndpoint.AuditEventsDescriptor; +import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; +import org.springframework.boot.actuate.endpoint.jmx.annotation.JmxEndpointExtension; /** * JMX-specific extension of the {@link AuditEventsEndpoint}. diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/EndpointAutoConfiguration.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/EndpointAutoConfiguration.java deleted file mode 100644 index 40b3a0f3fc..0000000000 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/EndpointAutoConfiguration.java +++ /dev/null @@ -1,305 +0,0 @@ -/* - * Copyright 2012-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.actuate.autoconfigure.endpoint; - -import java.util.Collections; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.function.Supplier; - -import liquibase.integration.spring.SpringLiquibase; -import org.flywaydb.core.Flyway; - -import org.springframework.beans.factory.ObjectProvider; -import org.springframework.boot.actuate.audit.AuditEventRepository; -import org.springframework.boot.actuate.endpoint.AuditEventsEndpoint; -import org.springframework.boot.actuate.endpoint.AutoConfigurationReportEndpoint; -import org.springframework.boot.actuate.endpoint.BeansEndpoint; -import org.springframework.boot.actuate.endpoint.ConfigurationPropertiesReportEndpoint; -import org.springframework.boot.actuate.endpoint.EnvironmentEndpoint; -import org.springframework.boot.actuate.endpoint.FlywayEndpoint; -import org.springframework.boot.actuate.endpoint.HealthEndpoint; -import org.springframework.boot.actuate.endpoint.InfoEndpoint; -import org.springframework.boot.actuate.endpoint.LiquibaseEndpoint; -import org.springframework.boot.actuate.endpoint.LoggersEndpoint; -import org.springframework.boot.actuate.endpoint.MetricsEndpoint; -import org.springframework.boot.actuate.endpoint.PublicMetrics; -import org.springframework.boot.actuate.endpoint.RequestMappingEndpoint; -import org.springframework.boot.actuate.endpoint.ShutdownEndpoint; -import org.springframework.boot.actuate.endpoint.StatusEndpoint; -import org.springframework.boot.actuate.endpoint.ThreadDumpEndpoint; -import org.springframework.boot.actuate.endpoint.TraceEndpoint; -import org.springframework.boot.actuate.health.CompositeHealthIndicatorFactory; -import org.springframework.boot.actuate.health.HealthAggregator; -import org.springframework.boot.actuate.health.HealthIndicator; -import org.springframework.boot.actuate.health.OrderedHealthAggregator; -import org.springframework.boot.actuate.health.ReactiveHealthIndicator; -import org.springframework.boot.actuate.info.InfoContributor; -import org.springframework.boot.actuate.trace.InMemoryTraceRepository; -import org.springframework.boot.actuate.trace.TraceRepository; -import org.springframework.boot.autoconfigure.AutoConfigureAfter; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.autoconfigure.condition.ConditionEvaluationReport; -import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; -import org.springframework.boot.autoconfigure.condition.SearchStrategy; -import org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration; -import org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration; -import org.springframework.boot.endpoint.Endpoint; -import org.springframework.boot.logging.LoggingSystem; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; -import org.springframework.core.annotation.AnnotationAwareOrderComparator; -import org.springframework.core.env.Environment; -import org.springframework.util.ObjectUtils; -import org.springframework.web.servlet.handler.AbstractHandlerMethodMapping; - -/** - * {@link EnableAutoConfiguration Auto-configuration} for common management - * {@link Endpoint}s. - * - * @author Dave Syer - * @author Phillip Webb - * @author Greg Turnquist - * @author Christian Dupuis - * @author Stephane Nicoll - * @author Eddú Meléndez - * @author Meang Akira Tanaka - * @author Ben Hale - * @author Andy Wilkinson - * @since 2.0.0 - */ -@Configuration -@AutoConfigureAfter({ FlywayAutoConfiguration.class, LiquibaseAutoConfiguration.class }) -public class EndpointAutoConfiguration { - - @Bean - @ConditionalOnMissingBean - @ConditionalOnEnabledEndpoint - public EnvironmentEndpoint environmentEndpoint(Environment environment) { - return new EnvironmentEndpoint(environment); - } - - @Bean - @ConditionalOnMissingBean - @ConditionalOnEnabledEndpoint - public BeansEndpoint beansEndpoint( - ConfigurableApplicationContext applicationContext) { - return new BeansEndpoint(applicationContext); - } - - @Bean - @ConditionalOnMissingBean - @ConditionalOnEnabledEndpoint - public InfoEndpoint infoEndpoint( - ObjectProvider> infoContributors) { - return new InfoEndpoint(infoContributors.getIfAvailable(Collections::emptyList)); - } - - @Bean - @ConditionalOnBean(LoggingSystem.class) - @ConditionalOnMissingBean - @ConditionalOnEnabledEndpoint - public LoggersEndpoint loggersEndpoint(LoggingSystem loggingSystem) { - return new LoggersEndpoint(loggingSystem); - } - - @Bean - @ConditionalOnMissingBean - @ConditionalOnEnabledEndpoint - public MetricsEndpoint metricsEndpoint( - ObjectProvider> publicMetrics) { - List sortedPublicMetrics = publicMetrics - .getIfAvailable(Collections::emptyList); - Collections.sort(sortedPublicMetrics, AnnotationAwareOrderComparator.INSTANCE); - return new MetricsEndpoint(sortedPublicMetrics); - } - - @Bean - @ConditionalOnMissingBean - @ConditionalOnEnabledEndpoint - public TraceEndpoint traceEndpoint(ObjectProvider traceRepository) { - return new TraceEndpoint( - traceRepository.getIfAvailable(() -> new InMemoryTraceRepository())); - } - - @Bean - @ConditionalOnMissingBean - @ConditionalOnEnabledEndpoint - public ThreadDumpEndpoint dumpEndpoint() { - return new ThreadDumpEndpoint(); - } - - @Bean - @ConditionalOnBean(ConditionEvaluationReport.class) - @ConditionalOnMissingBean(search = SearchStrategy.CURRENT) - @ConditionalOnEnabledEndpoint - public AutoConfigurationReportEndpoint autoConfigurationReportEndpoint( - ConditionEvaluationReport conditionEvaluationReport) { - return new AutoConfigurationReportEndpoint(conditionEvaluationReport); - } - - @Bean - @ConditionalOnMissingBean - @ConditionalOnEnabledEndpoint - public ShutdownEndpoint shutdownEndpoint() { - return new ShutdownEndpoint(); - } - - @Bean - @ConditionalOnMissingBean - @ConditionalOnEnabledEndpoint - public ConfigurationPropertiesReportEndpoint configurationPropertiesReportEndpoint() { - return new ConfigurationPropertiesReportEndpoint(); - } - - @Bean - @ConditionalOnMissingBean - @ConditionalOnBean(AuditEventRepository.class) - @ConditionalOnEnabledEndpoint - public AuditEventsEndpoint auditEventsEndpoint( - AuditEventRepository auditEventRepository) { - return new AuditEventsEndpoint(auditEventRepository); - } - - @Configuration - @Import(HealthIndicatorsSupplierConfiguration.class) - static class HealthEndpointConfiguration { - - private final HealthIndicator healthIndicator; - - HealthEndpointConfiguration(ObjectProvider healthAggregator, - Supplier> healthIndicatorsSupplier) { - this.healthIndicator = new CompositeHealthIndicatorFactory() - .createHealthIndicator( - healthAggregator.getIfAvailable(OrderedHealthAggregator::new), - healthIndicatorsSupplier.get()); - } - - @Bean - @ConditionalOnMissingBean - @ConditionalOnEnabledEndpoint - public HealthEndpoint healthEndpoint() { - return new HealthEndpoint(this.healthIndicator); - } - - @Bean - @ConditionalOnMissingBean - @ConditionalOnEnabledEndpoint - public StatusEndpoint statusEndpoint() { - return new StatusEndpoint(this.healthIndicator); - } - - } - - @Configuration - static class HealthIndicatorsSupplierConfiguration { - - @Configuration - @ConditionalOnMissingClass("reactor.core.publisher.Flux") - static class SimpleHealthIndicatorsSupplierConfiguration { - - @Bean - public Supplier> allHealthIndicators( - ObjectProvider> healthIndicators) { - return () -> healthIndicators.getIfAvailable(Collections::emptyMap); - } - - } - - @Configuration - @ConditionalOnClass(name = "reactor.core.publisher.Flux") - static class ReactiveHealthIndicatorsSupplierConfiguration { - - @Bean - public Supplier> allHealthIndicators( - ObjectProvider> healthIndicators, - ObjectProvider> reactiveHealthIndicators) { - return () -> merge(healthIndicators.getIfAvailable(Collections::emptyMap), - reactiveHealthIndicators.getIfAvailable(Collections::emptyMap)); - } - - private Map merge( - Map healthIndicators, - Map reactiveHealthIndicators) { - if (ObjectUtils.isEmpty(reactiveHealthIndicators)) { - return healthIndicators; - } - Map allIndicators = new LinkedHashMap<>( - healthIndicators); - reactiveHealthIndicators.forEach((beanName, indicator) -> allIndicators - .computeIfAbsent(beanName, n -> adapt(indicator))); - return allIndicators; - } - - private HealthIndicator adapt(ReactiveHealthIndicator healthIndicator) { - return () -> healthIndicator.health().block(); - } - - } - - } - - @Configuration - @ConditionalOnBean(Flyway.class) - @ConditionalOnClass(Flyway.class) - static class FlywayEndpointConfiguration { - - @Bean - @ConditionalOnMissingBean - @ConditionalOnEnabledEndpoint - public FlywayEndpoint flywayEndpoint(Map flyways) { - return new FlywayEndpoint(flyways); - } - - } - - @Configuration - @ConditionalOnBean(SpringLiquibase.class) - @ConditionalOnClass(SpringLiquibase.class) - static class LiquibaseEndpointConfiguration { - - @Bean - @ConditionalOnMissingBean - @ConditionalOnEnabledEndpoint - public LiquibaseEndpoint liquibaseEndpoint( - Map liquibases) { - return new LiquibaseEndpoint(liquibases); - } - - } - - @Configuration - @ConditionalOnClass(AbstractHandlerMethodMapping.class) - protected static class RequestMappingEndpointConfiguration { - - @Bean - @ConditionalOnMissingBean - @ConditionalOnEnabledEndpoint - public RequestMappingEndpoint requestMappingEndpoint() { - RequestMappingEndpoint endpoint = new RequestMappingEndpoint(); - return endpoint; - } - - } - -} diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/ManagementContextResolver.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/ManagementContextResolver.java deleted file mode 100644 index 9318eb69b0..0000000000 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/ManagementContextResolver.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2012-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.actuate.autoconfigure.endpoint; - -import org.springframework.context.ApplicationContext; - -/** - * Provides access to the {@link ApplicationContext} being used to manage actuator - * endpoints. - * - * @author Dave Syer - * @since 2.0.0 - */ -public class ManagementContextResolver { - - private ApplicationContext applicationContext; - - public ManagementContextResolver(ApplicationContext applicationContext) { - this.applicationContext = applicationContext; - } - - /** - * Return the management {@link ApplicationContext}. - * @return the management {@link ApplicationContext} - */ - public ApplicationContext getApplicationContext() { - return this.applicationContext; - } - -} diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/ManagementEndpointPathResolver.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/ManagementEndpointPathResolver.java deleted file mode 100644 index c14c6655b8..0000000000 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/ManagementEndpointPathResolver.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2012-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.actuate.autoconfigure.endpoint; - -import org.springframework.boot.actuate.autoconfigure.web.ManagementServerProperties; -import org.springframework.boot.endpoint.EndpointPathResolver; - -/** - * {@link EndpointPathResolver} implementation for resolving actuator endpoint paths based - * on the endpoint id and management.context-path. - * - * @author Madhura Bhave - * @since 2.0.0 - */ -public class ManagementEndpointPathResolver implements EndpointPathResolver { - - private final String contextPath; - - public ManagementEndpointPathResolver(ManagementServerProperties properties) { - this.contextPath = properties.getContextPath(); - } - - @Override - public String resolvePath(String endpointId) { - return this.contextPath + "/" + endpointId; - } - -} diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/EndpointInfrastructureAutoConfiguration.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/EndpointInfrastructureAutoConfiguration.java deleted file mode 100644 index 314e0cd8bf..0000000000 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/EndpointInfrastructureAutoConfiguration.java +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright 2012-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure; - -import java.time.OffsetDateTime; -import java.time.format.DateTimeFormatter; -import java.util.Arrays; -import java.util.Date; -import java.util.List; - -import javax.management.MBeanServer; - -import com.fasterxml.jackson.databind.ObjectMapper; - -import org.springframework.beans.factory.ObjectProvider; -import org.springframework.boot.autoconfigure.AutoConfigureAfter; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.autoconfigure.condition.ConditionalOnSingleCandidate; -import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; -import org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.boot.endpoint.ConversionServiceOperationParameterMapper; -import org.springframework.boot.endpoint.EndpointExposure; -import org.springframework.boot.endpoint.OperationParameterMapper; -import org.springframework.boot.endpoint.jmx.EndpointMBeanRegistrar; -import org.springframework.boot.endpoint.jmx.JmxAnnotationEndpointDiscoverer; -import org.springframework.boot.endpoint.jmx.JmxEndpointOperation; -import org.springframework.boot.endpoint.web.WebAnnotationEndpointDiscoverer; -import org.springframework.boot.endpoint.web.WebEndpointOperation; -import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.convert.support.DefaultConversionService; -import org.springframework.util.ObjectUtils; -import org.springframework.util.StringUtils; - -/** - * {@link EnableAutoConfiguration Auto-configuration} for the endpoint infrastructure used - * by the Actuator. - * - * @author Andy Wilkinson - * @author Stephane Nicoll - * @since 2.0.0 - */ -@Configuration -@AutoConfigureAfter(JmxAutoConfiguration.class) -@EnableConfigurationProperties(JmxEndpointExporterProperties.class) -public class EndpointInfrastructureAutoConfiguration { - - private final ApplicationContext applicationContext; - - public EndpointInfrastructureAutoConfiguration( - ApplicationContext applicationContext) { - this.applicationContext = applicationContext; - } - - @Bean - public OperationParameterMapper operationParameterMapper() { - DefaultConversionService conversionService = new DefaultConversionService(); - conversionService.addConverter(String.class, Date.class, this::convertToDate); - return new ConversionServiceOperationParameterMapper(conversionService); - } - - private Date convertToDate(String value) { - if (StringUtils.hasLength(value)) { - OffsetDateTime offsetDateTime = OffsetDateTime.parse(value, - DateTimeFormatter.ISO_OFFSET_DATE_TIME); - return new Date(offsetDateTime.toEpochSecond() * 1000); - } - return null; - - } - - @Bean - public CachingConfigurationFactory cacheConfigurationFactory() { - return new CachingConfigurationFactory(this.applicationContext.getEnvironment()); - } - - @Bean - public JmxAnnotationEndpointDiscoverer jmxEndpointDiscoverer( - OperationParameterMapper operationParameterMapper, - CachingConfigurationFactory cachingConfigurationFactory) { - return new JmxAnnotationEndpointDiscoverer(this.applicationContext, - operationParameterMapper, cachingConfigurationFactory); - } - - @ConditionalOnSingleCandidate(MBeanServer.class) - @Bean - public JmxEndpointExporter jmxMBeanExporter(JmxEndpointExporterProperties properties, - MBeanServer mBeanServer, JmxAnnotationEndpointDiscoverer endpointDiscoverer, - ObjectProvider objectMapper) { - EndpointProvider endpointProvider = new EndpointProvider<>( - this.applicationContext.getEnvironment(), endpointDiscoverer, - EndpointExposure.JMX); - EndpointMBeanRegistrar endpointMBeanRegistrar = new EndpointMBeanRegistrar( - mBeanServer, new DefaultEndpointObjectNameFactory(properties, mBeanServer, - ObjectUtils.getIdentityHexString(this.applicationContext))); - return new JmxEndpointExporter(endpointProvider, endpointMBeanRegistrar, - objectMapper.getIfAvailable(ObjectMapper::new)); - } - - @Configuration - @ConditionalOnWebApplication - static class WebInfrastructureConfiguration { - - private final ApplicationContext applicationContext; - - WebInfrastructureConfiguration(ApplicationContext applicationContext) { - this.applicationContext = applicationContext; - } - - @Bean - public EndpointProvider webEndpointProvider( - OperationParameterMapper operationParameterMapper, - CachingConfigurationFactory cachingConfigurationFactory) { - return new EndpointProvider<>(this.applicationContext.getEnvironment(), - webEndpointDiscoverer(operationParameterMapper, - cachingConfigurationFactory), - EndpointExposure.WEB); - } - - private WebAnnotationEndpointDiscoverer webEndpointDiscoverer( - OperationParameterMapper operationParameterMapper, - CachingConfigurationFactory cachingConfigurationFactory) { - List mediaTypes = Arrays.asList( - ActuatorMediaTypes.APPLICATION_ACTUATOR_V2_JSON_VALUE, - "application/json"); - return new WebAnnotationEndpointDiscoverer(this.applicationContext, - operationParameterMapper, cachingConfigurationFactory, mediaTypes, - mediaTypes); - } - - } - -} diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/ServletEndpointChildManagementContextConfiguration.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/ServletEndpointChildManagementContextConfiguration.java deleted file mode 100644 index d580f8de2c..0000000000 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/ServletEndpointChildManagementContextConfiguration.java +++ /dev/null @@ -1,374 +0,0 @@ -/* - * Copyright 2012-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure; - -import java.util.ArrayList; -import java.util.List; - -import javax.servlet.Filter; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.catalina.Valve; -import org.apache.catalina.valves.AccessLogValve; -import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.servlet.ServletContainer; - -import org.springframework.beans.factory.BeanFactory; -import org.springframework.beans.factory.HierarchicalBeanFactory; -import org.springframework.beans.factory.ListableBeanFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.actuate.autoconfigure.ManagementContextConfiguration; -import org.springframework.boot.actuate.autoconfigure.ManagementContextType; -import org.springframework.boot.actuate.autoconfigure.web.ManagementServerProperties; -import org.springframework.boot.actuate.endpoint.mvc.ManagementErrorEndpoint; -import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; -import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; -import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type; -import org.springframework.boot.autoconfigure.condition.SearchStrategy; -import org.springframework.boot.autoconfigure.jersey.ResourceConfigCustomizer; -import org.springframework.boot.autoconfigure.web.ServerProperties; -import org.springframework.boot.autoconfigure.web.servlet.DefaultServletWebServerFactoryCustomizer; -import org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration; -import org.springframework.boot.autoconfigure.web.servlet.error.ErrorAttributes; -import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; -import org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory; -import org.springframework.boot.web.server.WebServerFactoryCustomizer; -import org.springframework.boot.web.servlet.ServletRegistrationBean; -import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.Ordered; -import org.springframework.core.annotation.AnnotationAwareOrderComparator; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.web.servlet.DispatcherServlet; -import org.springframework.web.servlet.HandlerAdapter; -import org.springframework.web.servlet.HandlerExceptionResolver; -import org.springframework.web.servlet.HandlerExecutionChain; -import org.springframework.web.servlet.HandlerMapping; -import org.springframework.web.servlet.ModelAndView; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; - -/** - * Configuration for Servlet web endpoint infrastructure when a separate management - * context with a web server running on a different port is required. - * - * @author Dave Syer - * @author Stephane Nicoll - * @author Andy Wilkinson - * @author Eddú Meléndez - */ -@Configuration -@ManagementContextConfiguration(ManagementContextType.CHILD) -@ConditionalOnWebApplication(type = Type.SERVLET) -class ServletEndpointChildManagementContextConfiguration { - - @Bean - public ManagementServletWebServerFactoryCustomization serverCustomization( - ListableBeanFactory beanFactory) { - return new ManagementServletWebServerFactoryCustomization(beanFactory); - } - - @Bean - public UndertowAccessLogCustomizer undertowAccessLogCustomizer() { - return new UndertowAccessLogCustomizer(); - } - - @Bean - @ConditionalOnClass(name = "org.apache.catalina.valves.AccessLogValve") - public TomcatAccessLogCustomizer tomcatAccessLogCustomizer() { - return new TomcatAccessLogCustomizer(); - } - - @EnableWebMvc - @ConditionalOnClass(DispatcherServlet.class) - static class MvcEndpointChildContextConfiguration { - - /* - * The error controller is present but not mapped as an endpoint in this context - * because of the DispatcherServlet having had its HandlerMapping explicitly - * disabled. So we expose the same feature but only for machine endpoints. - */ - @Bean - @ConditionalOnBean(ErrorAttributes.class) - public ManagementErrorEndpoint errorEndpoint(ErrorAttributes errorAttributes) { - return new ManagementErrorEndpoint(errorAttributes); - } - - @Bean(name = DispatcherServletAutoConfiguration.DEFAULT_DISPATCHER_SERVLET_BEAN_NAME) - public DispatcherServlet dispatcherServlet() { - DispatcherServlet dispatcherServlet = new DispatcherServlet(); - // Ensure the parent configuration does not leak down to us - dispatcherServlet.setDetectAllHandlerAdapters(false); - dispatcherServlet.setDetectAllHandlerExceptionResolvers(false); - dispatcherServlet.setDetectAllHandlerMappings(false); - dispatcherServlet.setDetectAllViewResolvers(false); - return dispatcherServlet; - } - - @Bean(name = DispatcherServlet.HANDLER_MAPPING_BEAN_NAME) - public CompositeHandlerMapping compositeHandlerMapping() { - return new CompositeHandlerMapping(); - } - - @Bean(name = DispatcherServlet.HANDLER_ADAPTER_BEAN_NAME) - public CompositeHandlerAdapter compositeHandlerAdapter() { - return new CompositeHandlerAdapter(); - } - - @Bean(name = DispatcherServlet.HANDLER_EXCEPTION_RESOLVER_BEAN_NAME) - public CompositeHandlerExceptionResolver compositeHandlerExceptionResolver() { - return new CompositeHandlerExceptionResolver(); - } - - } - - @Configuration - @ConditionalOnClass(ResourceConfig.class) - @ConditionalOnMissingClass("org.springframework.web.servlet.DispatcherServlet") - static class JerseyEndpointChildContextConfiguration { - - private final List resourceConfigCustomizers; - - JerseyEndpointChildContextConfiguration( - List resourceConfigCustomizers) { - this.resourceConfigCustomizers = resourceConfigCustomizers; - } - - @Bean - public ServletRegistrationBean jerseyServletRegistration() { - ServletRegistrationBean registration = new ServletRegistrationBean<>( - new ServletContainer(endpointResourceConfig()), "/*"); - return registration; - } - - @Bean - public ResourceConfig endpointResourceConfig() { - ResourceConfig resourceConfig = new ResourceConfig(); - for (ResourceConfigCustomizer customizer : this.resourceConfigCustomizers) { - customizer.customize(resourceConfig); - } - return resourceConfig; - } - - } - - @Configuration - @ConditionalOnClass({ EnableWebSecurity.class, Filter.class }) - @ConditionalOnBean(name = "springSecurityFilterChain", search = SearchStrategy.ANCESTORS) - static class EndpointWebMvcChildContextSecurityConfiguration { - - @Bean - public Filter springSecurityFilterChain(HierarchicalBeanFactory beanFactory) { - BeanFactory parent = beanFactory.getParentBeanFactory(); - return parent.getBean("springSecurityFilterChain", Filter.class); - } - - } - - static class ManagementServletWebServerFactoryCustomization extends - ManagementWebServerFactoryCustomizer { - - ManagementServletWebServerFactoryCustomization(ListableBeanFactory beanFactory) { - super(beanFactory, DefaultServletWebServerFactoryCustomizer.class); - } - - @Override - protected void customize(ConfigurableServletWebServerFactory webServerFactory, - ManagementServerProperties managementServerProperties, - ServerProperties serverProperties) { - super.customize(webServerFactory, managementServerProperties, - serverProperties); - webServerFactory.setContextPath(""); - } - - } - - static class CompositeHandlerMapping implements HandlerMapping { - - @Autowired - private ListableBeanFactory beanFactory; - - private List mappings; - - @Override - public HandlerExecutionChain getHandler(HttpServletRequest request) - throws Exception { - if (this.mappings == null) { - this.mappings = extractMappings(); - } - for (HandlerMapping mapping : this.mappings) { - HandlerExecutionChain handler = mapping.getHandler(request); - if (handler != null) { - return handler; - } - } - return null; - } - - private List extractMappings() { - List list = new ArrayList<>(); - list.addAll(this.beanFactory.getBeansOfType(HandlerMapping.class).values()); - list.remove(this); - AnnotationAwareOrderComparator.sort(list); - return list; - } - - } - - static class CompositeHandlerAdapter implements HandlerAdapter { - - @Autowired - private ListableBeanFactory beanFactory; - - private List adapters; - - private List extractAdapters() { - List list = new ArrayList<>(); - list.addAll(this.beanFactory.getBeansOfType(HandlerAdapter.class).values()); - list.remove(this); - AnnotationAwareOrderComparator.sort(list); - return list; - } - - @Override - public boolean supports(Object handler) { - if (this.adapters == null) { - this.adapters = extractAdapters(); - } - for (HandlerAdapter mapping : this.adapters) { - if (mapping.supports(handler)) { - return true; - } - } - return false; - } - - @Override - public ModelAndView handle(HttpServletRequest request, - HttpServletResponse response, Object handler) throws Exception { - if (this.adapters == null) { - this.adapters = extractAdapters(); - } - for (HandlerAdapter mapping : this.adapters) { - if (mapping.supports(handler)) { - return mapping.handle(request, response, handler); - } - } - return null; - } - - @Override - public long getLastModified(HttpServletRequest request, Object handler) { - if (this.adapters == null) { - this.adapters = extractAdapters(); - } - for (HandlerAdapter mapping : this.adapters) { - if (mapping.supports(handler)) { - return mapping.getLastModified(request, handler); - } - } - return 0; - } - - } - - static class CompositeHandlerExceptionResolver implements HandlerExceptionResolver { - - @Autowired - private ListableBeanFactory beanFactory; - - private List resolvers; - - private List extractResolvers() { - List list = new ArrayList<>(); - list.addAll(this.beanFactory.getBeansOfType(HandlerExceptionResolver.class) - .values()); - list.remove(this); - AnnotationAwareOrderComparator.sort(list); - return list; - } - - @Override - public ModelAndView resolveException(HttpServletRequest request, - HttpServletResponse response, Object handler, Exception ex) { - if (this.resolvers == null) { - this.resolvers = extractResolvers(); - } - for (HandlerExceptionResolver mapping : this.resolvers) { - ModelAndView mav = mapping.resolveException(request, response, handler, - ex); - if (mav != null) { - return mav; - } - } - return null; - } - - } - - static abstract class AccessLogCustomizer implements Ordered { - - protected String customizePrefix(String prefix) { - return "management_" + prefix; - } - - @Override - public int getOrder() { - return 1; - } - - } - - static class TomcatAccessLogCustomizer extends AccessLogCustomizer - implements WebServerFactoryCustomizer { - - @Override - public void customize(TomcatServletWebServerFactory serverFactory) { - AccessLogValve accessLogValve = findAccessLogValve(serverFactory); - if (accessLogValve == null) { - return; - } - accessLogValve.setPrefix(customizePrefix(accessLogValve.getPrefix())); - } - - private AccessLogValve findAccessLogValve( - TomcatServletWebServerFactory serverFactory) { - for (Valve engineValve : serverFactory.getEngineValves()) { - if (engineValve instanceof AccessLogValve) { - return (AccessLogValve) engineValve; - } - } - return null; - } - - } - - static class UndertowAccessLogCustomizer extends AccessLogCustomizer - implements WebServerFactoryCustomizer { - - @Override - public void customize(UndertowServletWebServerFactory serverFactory) { - serverFactory.setAccessLogPrefix( - customizePrefix(serverFactory.getAccessLogPrefix())); - } - - } - -} diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/WebEndpointHandlerMappingCustomizer.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/WebEndpointHandlerMappingCustomizer.java deleted file mode 100644 index 18dd8b9341..0000000000 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/WebEndpointHandlerMappingCustomizer.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2012-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure; - -import org.springframework.boot.endpoint.web.mvc.WebEndpointServletHandlerMapping; - -/** - * Callback for customizing the {@link WebEndpointServletHandlerMapping} at configuration - * time. - * - * @author Andy Wilkinson - * @since 2.0.0 - */ -@FunctionalInterface -public interface WebEndpointHandlerMappingCustomizer { - - /** - * Customize the given {@code mapping}. - * @param mapping the mapping to customize - */ - void customize(WebEndpointServletHandlerMapping mapping); - -} diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/WebEndpointInfrastructureManagementContextConfiguration.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/WebEndpointInfrastructureManagementContextConfiguration.java deleted file mode 100644 index 34acfe2b1d..0000000000 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/WebEndpointInfrastructureManagementContextConfiguration.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright 2012-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure; - -import java.util.Collections; -import java.util.HashSet; -import java.util.List; - -import org.glassfish.jersey.server.ResourceConfig; - -import org.springframework.beans.factory.ObjectProvider; -import org.springframework.boot.actuate.autoconfigure.ManagementContextConfiguration; -import org.springframework.boot.actuate.autoconfigure.web.ManagementServerProperties; -import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; -import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type; -import org.springframework.boot.autoconfigure.jersey.ResourceConfigCustomizer; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.boot.endpoint.web.EndpointMapping; -import org.springframework.boot.endpoint.web.WebEndpointOperation; -import org.springframework.boot.endpoint.web.jersey.JerseyEndpointResourceFactory; -import org.springframework.boot.endpoint.web.mvc.WebEndpointServletHandlerMapping; -import org.springframework.boot.endpoint.web.reactive.WebEndpointReactiveHandlerMapping; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.util.CollectionUtils; -import org.springframework.web.cors.CorsConfiguration; -import org.springframework.web.servlet.DispatcherServlet; - -/** - * Management context configuration for the infrastructure for web endpoints. - * - * @author Andy Wilkinson - */ -@ConditionalOnWebApplication -@ManagementContextConfiguration -@EnableConfigurationProperties({ CorsEndpointProperties.class, - ManagementServerProperties.class }) -class WebEndpointInfrastructureManagementContextConfiguration { - - @Configuration - @ConditionalOnWebApplication(type = Type.SERVLET) - @ConditionalOnClass(ResourceConfig.class) - @ConditionalOnBean(ResourceConfig.class) - @ConditionalOnMissingBean(type = "org.springframework.web.servlet.DispatcherServlet") - static class JerseyWebEndpointConfiguration { - - @Bean - public ResourceConfigCustomizer webEndpointRegistrar( - EndpointProvider provider, - ManagementServerProperties managementServerProperties) { - return (resourceConfig) -> resourceConfig.registerResources(new HashSet<>( - new JerseyEndpointResourceFactory().createEndpointResources( - new EndpointMapping( - managementServerProperties.getContextPath()), - provider.getEndpoints()))); - } - - } - - @Configuration - @ConditionalOnWebApplication(type = Type.SERVLET) - @ConditionalOnClass(DispatcherServlet.class) - @ConditionalOnBean(DispatcherServlet.class) - static class MvcWebEndpointConfiguration { - - private final List mappingCustomizers; - - MvcWebEndpointConfiguration( - ObjectProvider> mappingCustomizers) { - this.mappingCustomizers = mappingCustomizers - .getIfUnique(Collections::emptyList); - } - - @Bean - @ConditionalOnMissingBean - public WebEndpointServletHandlerMapping webEndpointServletHandlerMapping( - EndpointProvider provider, - CorsEndpointProperties corsProperties, - ManagementServerProperties managementServerProperties) { - WebEndpointServletHandlerMapping handlerMapping = new WebEndpointServletHandlerMapping( - new EndpointMapping(managementServerProperties.getContextPath()), - provider.getEndpoints(), getCorsConfiguration(corsProperties)); - for (WebEndpointHandlerMappingCustomizer customizer : this.mappingCustomizers) { - customizer.customize(handlerMapping); - } - return handlerMapping; - } - - private CorsConfiguration getCorsConfiguration( - CorsEndpointProperties properties) { - if (CollectionUtils.isEmpty(properties.getAllowedOrigins())) { - return null; - } - CorsConfiguration configuration = new CorsConfiguration(); - configuration.setAllowedOrigins(properties.getAllowedOrigins()); - if (!CollectionUtils.isEmpty(properties.getAllowedHeaders())) { - configuration.setAllowedHeaders(properties.getAllowedHeaders()); - } - if (!CollectionUtils.isEmpty(properties.getAllowedMethods())) { - configuration.setAllowedMethods(properties.getAllowedMethods()); - } - if (!CollectionUtils.isEmpty(properties.getExposedHeaders())) { - configuration.setExposedHeaders(properties.getExposedHeaders()); - } - if (properties.getMaxAge() != null) { - configuration.setMaxAge(properties.getMaxAge()); - } - if (properties.getAllowCredentials() != null) { - configuration.setAllowCredentials(properties.getAllowCredentials()); - } - return configuration; - } - - } - - @ConditionalOnWebApplication(type = Type.REACTIVE) - static class ReactiveWebEndpointConfiguration { - - @Bean - @ConditionalOnMissingBean - public WebEndpointReactiveHandlerMapping webEndpointReactiveHandlerMapping( - EndpointProvider provider, - ManagementServerProperties managementServerProperties) { - return new WebEndpointReactiveHandlerMapping( - new EndpointMapping(managementServerProperties.getContextPath()), - provider.getEndpoints()); - } - - } - -} diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/package-info.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/package-info.java deleted file mode 100644 index 86b70679ca..0000000000 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 2012-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * {@link org.springframework.boot.autoconfigure.EnableAutoConfiguration - * Auto-configuration} for the Actuator's endpoint infrastructure. - */ -package org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/package-info.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/package-info.java deleted file mode 100644 index 5038da2660..0000000000 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 2012-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * {@link org.springframework.boot.autoconfigure.EnableAutoConfiguration - * Auto-configuration} for the Actuator's web endpoints. - */ -package org.springframework.boot.actuate.autoconfigure.endpoint.web; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorAutoConfiguration.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorAutoConfiguration.java deleted file mode 100644 index 89aa71f638..0000000000 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorAutoConfiguration.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright 2012-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.actuate.autoconfigure.health; - -import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration; -import org.springframework.boot.actuate.health.HealthAggregator; -import org.springframework.boot.actuate.health.HealthIndicator; -import org.springframework.boot.actuate.health.OrderedHealthAggregator; -import org.springframework.boot.autoconfigure.AutoConfigureAfter; -import org.springframework.boot.autoconfigure.AutoConfigureBefore; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration; -import org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration; -import org.springframework.boot.autoconfigure.data.couchbase.CouchbaseDataAutoConfiguration; -import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration; -import org.springframework.boot.autoconfigure.data.ldap.LdapDataAutoConfiguration; -import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration; -import org.springframework.boot.autoconfigure.data.neo4j.Neo4jDataAutoConfiguration; -import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; -import org.springframework.boot.autoconfigure.elasticsearch.jest.JestAutoConfiguration; -import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -import org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration; -import org.springframework.boot.autoconfigure.jms.artemis.ArtemisAutoConfiguration; -import org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration; -import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration; -import org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; - -/** - * {@link EnableAutoConfiguration Auto-configuration} for {@link HealthIndicator}s. - * - * @author Christian Dupuis - * @author Andy Wilkinson - * @author Stephane Nicoll - * @author Phillip Webb - * @author Tommy Ludwig - * @author Eddú Meléndez - * @author Eric Spiegelberg - * @since 2.0.0 - */ -@Configuration -@AutoConfigureBefore({ EndpointAutoConfiguration.class }) -@AutoConfigureAfter({ ActiveMQAutoConfiguration.class, ArtemisAutoConfiguration.class, - CassandraAutoConfiguration.class, CassandraDataAutoConfiguration.class, - CouchbaseDataAutoConfiguration.class, DataSourceAutoConfiguration.class, - ElasticsearchAutoConfiguration.class, JestAutoConfiguration.class, - LdapDataAutoConfiguration.class, MailSenderAutoConfiguration.class, - MongoAutoConfiguration.class, MongoDataAutoConfiguration.class, - Neo4jDataAutoConfiguration.class, RabbitAutoConfiguration.class, - RedisAutoConfiguration.class, SolrAutoConfiguration.class }) -@EnableConfigurationProperties({ HealthIndicatorProperties.class }) -@Import({ ReactiveHealthIndicatorsConfiguration.class, - HealthIndicatorsConfiguration.class }) -public class HealthIndicatorAutoConfiguration { - - private final HealthIndicatorProperties properties; - - public HealthIndicatorAutoConfiguration(HealthIndicatorProperties properties) { - this.properties = properties; - } - - @Bean - @ConditionalOnMissingBean(HealthAggregator.class) - public OrderedHealthAggregator healthAggregator() { - OrderedHealthAggregator healthAggregator = new OrderedHealthAggregator(); - if (this.properties.getOrder() != null) { - healthAggregator.setStatusOrder(this.properties.getOrder()); - } - return healthAggregator; - } - -} diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorsConfiguration.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorsConfiguration.java deleted file mode 100644 index 63fbd51c11..0000000000 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorsConfiguration.java +++ /dev/null @@ -1,381 +0,0 @@ -/* - * Copyright 2012-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.actuate.autoconfigure.health; - -import java.util.Collection; -import java.util.LinkedHashMap; -import java.util.Map; - -import javax.jms.ConnectionFactory; -import javax.sql.DataSource; - -import com.couchbase.client.java.Bucket; -import com.datastax.driver.core.Cluster; -import org.apache.solr.client.solrj.SolrClient; -import org.neo4j.ogm.session.SessionFactory; - -import org.springframework.amqp.rabbit.core.RabbitTemplate; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.beans.factory.ObjectProvider; -import org.springframework.boot.actuate.health.ApplicationHealthIndicator; -import org.springframework.boot.actuate.health.CassandraHealthIndicator; -import org.springframework.boot.actuate.health.CouchbaseHealthIndicator; -import org.springframework.boot.actuate.health.DataSourceHealthIndicator; -import org.springframework.boot.actuate.health.DiskSpaceHealthIndicator; -import org.springframework.boot.actuate.health.DiskSpaceHealthIndicatorProperties; -import org.springframework.boot.actuate.health.HealthIndicator; -import org.springframework.boot.actuate.health.JmsHealthIndicator; -import org.springframework.boot.actuate.health.LdapHealthIndicator; -import org.springframework.boot.actuate.health.MailHealthIndicator; -import org.springframework.boot.actuate.health.MongoHealthIndicator; -import org.springframework.boot.actuate.health.Neo4jHealthIndicator; -import org.springframework.boot.actuate.health.RabbitHealthIndicator; -import org.springframework.boot.actuate.health.RedisHealthIndicator; -import org.springframework.boot.actuate.health.SolrHealthIndicator; -import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadata; -import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvider; -import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProviders; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; -import org.springframework.data.cassandra.core.CassandraOperations; -import org.springframework.data.couchbase.core.CouchbaseOperations; -import org.springframework.data.mongodb.core.MongoTemplate; -import org.springframework.data.redis.connection.RedisConnectionFactory; -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; -import org.springframework.ldap.core.LdapOperations; -import org.springframework.mail.javamail.JavaMailSenderImpl; - -/** - * Configuration for available {@link HealthIndicator health indicators}. - * - * @author Stephane Nicoll - * @since 2.0.0 - */ -@Configuration -@Import({ - ElasticsearchHealthIndicatorConfiguration.ElasticsearchClientHealthIndicatorConfiguration.class, - ElasticsearchHealthIndicatorConfiguration.ElasticsearchJestHealthIndicatorConfiguration.class }) -public class HealthIndicatorsConfiguration { - - @Bean - @ConditionalOnMissingBean(HealthIndicator.class) - public ApplicationHealthIndicator applicationHealthIndicator() { - return new ApplicationHealthIndicator(); - } - - @Configuration - @ConditionalOnClass({ CassandraOperations.class, Cluster.class }) - @ConditionalOnBean(CassandraOperations.class) - @ConditionalOnEnabledHealthIndicator("cassandra") - public static class CassandraHealthIndicatorConfiguration extends - CompositeHealthIndicatorConfiguration { - - private final Map cassandraOperations; - - public CassandraHealthIndicatorConfiguration( - Map cassandraOperations) { - this.cassandraOperations = cassandraOperations; - } - - @Bean - @ConditionalOnMissingBean(name = "cassandraHealthIndicator") - public HealthIndicator cassandraHealthIndicator() { - return createHealthIndicator(this.cassandraOperations); - } - - } - - @Configuration - @ConditionalOnClass({ CouchbaseOperations.class, Bucket.class }) - @ConditionalOnBean(CouchbaseOperations.class) - @ConditionalOnEnabledHealthIndicator("couchbase") - public static class CouchbaseHealthIndicatorConfiguration extends - CompositeHealthIndicatorConfiguration { - - private final Map couchbaseOperations; - - public CouchbaseHealthIndicatorConfiguration( - Map couchbaseOperations) { - this.couchbaseOperations = couchbaseOperations; - } - - @Bean - @ConditionalOnMissingBean(name = "couchbaseHealthIndicator") - public HealthIndicator couchbaseHealthIndicator() { - return createHealthIndicator(this.couchbaseOperations); - } - - } - - @Configuration - @ConditionalOnClass({ JdbcTemplate.class, AbstractRoutingDataSource.class }) - @ConditionalOnBean(DataSource.class) - @ConditionalOnEnabledHealthIndicator("db") - public static class DataSourcesHealthIndicatorConfiguration extends - CompositeHealthIndicatorConfiguration - implements InitializingBean { - - private final Map dataSources; - - private final Collection metadataProviders; - - private DataSourcePoolMetadataProvider poolMetadataProvider; - - public DataSourcesHealthIndicatorConfiguration( - ObjectProvider> dataSources, - ObjectProvider> metadataProviders) { - this.dataSources = filterDataSources(dataSources.getIfAvailable()); - this.metadataProviders = metadataProviders.getIfAvailable(); - } - - private Map filterDataSources( - Map candidates) { - if (candidates == null) { - return null; - } - Map dataSources = new LinkedHashMap<>(); - for (Map.Entry entry : candidates.entrySet()) { - if (!(entry.getValue() instanceof AbstractRoutingDataSource)) { - dataSources.put(entry.getKey(), entry.getValue()); - } - } - return dataSources; - } - - @Override - public void afterPropertiesSet() throws Exception { - this.poolMetadataProvider = new DataSourcePoolMetadataProviders( - this.metadataProviders); - } - - @Bean - @ConditionalOnMissingBean(name = "dbHealthIndicator") - public HealthIndicator dbHealthIndicator() { - return createHealthIndicator(this.dataSources); - } - - @Override - protected DataSourceHealthIndicator createHealthIndicator(DataSource source) { - return new DataSourceHealthIndicator(source, getValidationQuery(source)); - } - - private String getValidationQuery(DataSource source) { - DataSourcePoolMetadata poolMetadata = this.poolMetadataProvider - .getDataSourcePoolMetadata(source); - return (poolMetadata == null ? null : poolMetadata.getValidationQuery()); - } - - } - - @Configuration - @ConditionalOnClass(LdapOperations.class) - @ConditionalOnBean(LdapOperations.class) - @ConditionalOnEnabledHealthIndicator("ldap") - public static class LdapHealthIndicatorConfiguration extends - CompositeHealthIndicatorConfiguration { - - private final Map ldapOperations; - - public LdapHealthIndicatorConfiguration( - Map ldapOperations) { - this.ldapOperations = ldapOperations; - } - - @Bean - @ConditionalOnMissingBean(name = "ldapHealthIndicator") - public HealthIndicator ldapHealthIndicator() { - return createHealthIndicator(this.ldapOperations); - } - - } - - @Configuration - @ConditionalOnClass(MongoTemplate.class) - @ConditionalOnBean(MongoTemplate.class) - @ConditionalOnEnabledHealthIndicator("mongo") - public static class MongoHealthIndicatorConfiguration extends - CompositeHealthIndicatorConfiguration { - - private final Map mongoTemplates; - - public MongoHealthIndicatorConfiguration( - Map mongoTemplates) { - this.mongoTemplates = mongoTemplates; - } - - @Bean - @ConditionalOnMissingBean(name = "mongoHealthIndicator") - public HealthIndicator mongoHealthIndicator() { - return createHealthIndicator(this.mongoTemplates); - } - - } - - @Configuration - @ConditionalOnClass(SessionFactory.class) - @ConditionalOnBean(SessionFactory.class) - @ConditionalOnEnabledHealthIndicator("neo4j") - public static class Neo4jHealthIndicatorConfiguration extends - CompositeHealthIndicatorConfiguration { - - private final Map sessionFactories; - - public Neo4jHealthIndicatorConfiguration( - Map sessionFactories) { - this.sessionFactories = sessionFactories; - } - - @Bean - @ConditionalOnMissingBean(name = "neo4jHealthIndicator") - public HealthIndicator neo4jHealthIndicator() { - return createHealthIndicator(this.sessionFactories); - } - - } - - @Configuration - @ConditionalOnClass(RedisConnectionFactory.class) - @ConditionalOnBean(RedisConnectionFactory.class) - @ConditionalOnEnabledHealthIndicator("redis") - public static class RedisHealthIndicatorConfiguration extends - CompositeHealthIndicatorConfiguration { - - private final Map redisConnectionFactories; - - public RedisHealthIndicatorConfiguration( - Map redisConnectionFactories) { - this.redisConnectionFactories = redisConnectionFactories; - } - - @Bean - @ConditionalOnMissingBean(name = "redisHealthIndicator") - public HealthIndicator redisHealthIndicator() { - return createHealthIndicator(this.redisConnectionFactories); - } - - } - - @Configuration - @ConditionalOnClass(RabbitTemplate.class) - @ConditionalOnBean(RabbitTemplate.class) - @ConditionalOnEnabledHealthIndicator("rabbit") - public static class RabbitHealthIndicatorConfiguration extends - CompositeHealthIndicatorConfiguration { - - private final Map rabbitTemplates; - - public RabbitHealthIndicatorConfiguration( - Map rabbitTemplates) { - this.rabbitTemplates = rabbitTemplates; - } - - @Bean - @ConditionalOnMissingBean(name = "rabbitHealthIndicator") - public HealthIndicator rabbitHealthIndicator() { - return createHealthIndicator(this.rabbitTemplates); - } - - } - - @Configuration - @ConditionalOnClass(SolrClient.class) - @ConditionalOnBean(SolrClient.class) - @ConditionalOnEnabledHealthIndicator("solr") - public static class SolrHealthIndicatorConfiguration extends - CompositeHealthIndicatorConfiguration { - - private final Map solrClients; - - public SolrHealthIndicatorConfiguration(Map solrClients) { - this.solrClients = solrClients; - } - - @Bean - @ConditionalOnMissingBean(name = "solrHealthIndicator") - public HealthIndicator solrHealthIndicator() { - return createHealthIndicator(this.solrClients); - } - - } - - @Configuration - @ConditionalOnEnabledHealthIndicator("diskspace") - public static class DiskSpaceHealthIndicatorConfiguration { - - @Bean - @ConditionalOnMissingBean(name = "diskSpaceHealthIndicator") - public DiskSpaceHealthIndicator diskSpaceHealthIndicator( - DiskSpaceHealthIndicatorProperties properties) { - return new DiskSpaceHealthIndicator(properties); - } - - @Bean - public DiskSpaceHealthIndicatorProperties diskSpaceHealthIndicatorProperties() { - return new DiskSpaceHealthIndicatorProperties(); - } - - } - - @Configuration - @ConditionalOnClass(JavaMailSenderImpl.class) - @ConditionalOnBean(JavaMailSenderImpl.class) - @ConditionalOnEnabledHealthIndicator("mail") - public static class MailHealthIndicatorConfiguration extends - CompositeHealthIndicatorConfiguration { - - private final Map mailSenders; - - public MailHealthIndicatorConfiguration( - ObjectProvider> mailSenders) { - this.mailSenders = mailSenders.getIfAvailable(); - } - - @Bean - @ConditionalOnMissingBean(name = "mailHealthIndicator") - public HealthIndicator mailHealthIndicator() { - return createHealthIndicator(this.mailSenders); - } - - } - - @Configuration - @ConditionalOnClass(ConnectionFactory.class) - @ConditionalOnBean(ConnectionFactory.class) - @ConditionalOnEnabledHealthIndicator("jms") - public static class JmsHealthIndicatorConfiguration extends - CompositeHealthIndicatorConfiguration { - - private final Map connectionFactories; - - public JmsHealthIndicatorConfiguration( - ObjectProvider> connectionFactories) { - this.connectionFactories = connectionFactories.getIfAvailable(); - } - - @Bean - @ConditionalOnMissingBean(name = "jmsHealthIndicator") - public HealthIndicator jmsHealthIndicator() { - return createHealthIndicator(this.connectionFactories); - } - - } -} diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/security/ManagementWebSecurityAutoConfiguration.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/security/ManagementWebSecurityAutoConfiguration.java deleted file mode 100644 index d879cd92b4..0000000000 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/security/ManagementWebSecurityAutoConfiguration.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2012-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.actuate.autoconfigure.security; - -import org.springframework.boot.actuate.autoconfigure.endpoint.ManagementEndpointPathResolver; -import org.springframework.boot.actuate.autoconfigure.web.ManagementServerProperties; -import org.springframework.boot.autoconfigure.AutoConfigureBefore; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; -import org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration; -import org.springframework.boot.endpoint.EndpointPathResolver; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; - -/** - * Security configuration for management endpoints. - * - * @author Madhura Bhave - * @since 2.0.0 - */ -@Configuration -@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET) -@ConditionalOnClass({ EnableWebSecurity.class }) -@AutoConfigureBefore(SecurityAutoConfiguration.class) -public class ManagementWebSecurityAutoConfiguration { - - @Bean - public EndpointPathResolver managementEndpointPathResolver( - ManagementServerProperties properties) { - return new ManagementEndpointPathResolver(properties); - } - -} diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/web/package-info.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/web/package-info.java deleted file mode 100644 index 72866621fc..0000000000 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/web/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2012-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Auto-configuration for Actuator's web concerns. - */ -package org.springframework.boot.actuate.autoconfigure.web; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/BeansEndpoint.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/beans/BeansEndpoint.java similarity index 96% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/BeansEndpoint.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/beans/BeansEndpoint.java index 9f52cc7df3..24df8fe5ba 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/BeansEndpoint.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/beans/BeansEndpoint.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.beans; import java.util.HashMap; import java.util.List; @@ -23,8 +23,8 @@ import java.util.Map; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; -import org.springframework.boot.endpoint.Endpoint; -import org.springframework.boot.endpoint.ReadOperation; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.util.StringUtils; @@ -35,6 +35,7 @@ import org.springframework.util.StringUtils; * * @author Dave Syer * @author Andy Wilkinson + * @since 2.0.0 */ @Endpoint(id = "beans") public class BeansEndpoint { diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/package-info.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/beans/package-info.java similarity index 87% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/package-info.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/beans/package-info.java index ae47aa6e4e..12f17ee1a5 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/package-info.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/beans/package-info.java @@ -15,6 +15,6 @@ */ /** - * Endpoint support. + * Actuator support relating to Spring Beans. */ -package org.springframework.boot.endpoint; +package org.springframework.boot.actuate.beans; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/CachePublicMetrics.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cache/CachePublicMetrics.java similarity index 96% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/CachePublicMetrics.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cache/CachePublicMetrics.java index 94193f2c31..4b7fd074d4 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/CachePublicMetrics.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cache/CachePublicMetrics.java @@ -14,16 +14,15 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.cache; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Map; -import org.springframework.boot.actuate.cache.CacheStatistics; -import org.springframework.boot.actuate.cache.CacheStatisticsProvider; import org.springframework.boot.actuate.metrics.Metric; +import org.springframework.boot.actuate.metrics.PublicMetrics; import org.springframework.cache.Cache; import org.springframework.cache.CacheManager; import org.springframework.cache.transaction.TransactionAwareCacheDecorator; @@ -36,7 +35,7 @@ import org.springframework.util.MultiValueMap; * A {@link PublicMetrics} implementation that provides cache statistics. * * @author Stephane Nicoll - * @since 1.3.0 + * @since 2.0.0 */ public class CachePublicMetrics implements PublicMetrics { diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cache/package-info.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cache/package-info.java index 3fb8898be2..922292e857 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cache/package-info.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cache/package-info.java @@ -15,6 +15,6 @@ */ /** - * Classes for cache statistics. + * Actuator support for cache statistics. */ package org.springframework.boot.actuate.cache; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/CassandraHealthIndicator.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cassandra/CassandraHealthIndicator.java similarity index 88% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/CassandraHealthIndicator.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cassandra/CassandraHealthIndicator.java index b8da356c21..6400c595dc 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/CassandraHealthIndicator.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cassandra/CassandraHealthIndicator.java @@ -14,12 +14,15 @@ * limitations under the License. */ -package org.springframework.boot.actuate.health; +package org.springframework.boot.actuate.cassandra; import com.datastax.driver.core.ResultSet; import com.datastax.driver.core.querybuilder.QueryBuilder; import com.datastax.driver.core.querybuilder.Select; +import org.springframework.boot.actuate.health.AbstractHealthIndicator; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.HealthIndicator; import org.springframework.data.cassandra.core.CassandraOperations; import org.springframework.util.Assert; @@ -28,7 +31,7 @@ import org.springframework.util.Assert; * Cassandra data stores. * * @author Julien Dubois - * @since 1.3.0 + * @since 2.0.0 */ public class CassandraHealthIndicator extends AbstractHealthIndicator { diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/ShutdownEndpoint.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/context/ShutdownEndpoint.java similarity index 91% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/ShutdownEndpoint.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/context/ShutdownEndpoint.java index 8026566337..88fc92ab58 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/ShutdownEndpoint.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/context/ShutdownEndpoint.java @@ -14,14 +14,14 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.context; import java.util.Collections; import java.util.Map; import org.springframework.beans.BeansException; -import org.springframework.boot.endpoint.Endpoint; -import org.springframework.boot.endpoint.WriteOperation; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.WriteOperation; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.ConfigurableApplicationContext; @@ -32,6 +32,7 @@ import org.springframework.context.ConfigurableApplicationContext; * @author Dave Syer * @author Christian Dupuis * @author Andy Wilkinson + * @since 2.0.0 */ @Endpoint(id = "shutdown", enabledByDefault = false) public class ShutdownEndpoint implements ApplicationContextAware { diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/package-info.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/context/package-info.java similarity index 86% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/package-info.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/context/package-info.java index ecfde0e231..17991043f1 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/package-info.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/context/package-info.java @@ -15,6 +15,6 @@ */ /** - * JMX endpoint support. + * Actuator support relating to Spring Context. */ -package org.springframework.boot.endpoint.jmx; +package org.springframework.boot.actuate.context; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/ConfigurationPropertiesReportEndpoint.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpoint.java similarity index 98% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/ConfigurationPropertiesReportEndpoint.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpoint.java index 63015098b0..4d7a5ae04a 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/ConfigurationPropertiesReportEndpoint.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpoint.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.context.properties; import java.util.ArrayList; import java.util.Collection; @@ -40,10 +40,11 @@ import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter; import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider; import org.springframework.beans.BeansException; +import org.springframework.boot.actuate.endpoint.Sanitizer; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; import org.springframework.boot.context.properties.ConfigurationBeanFactoryMetaData; import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.boot.endpoint.Endpoint; -import org.springframework.boot.endpoint.ReadOperation; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.util.ClassUtils; @@ -62,6 +63,7 @@ import org.springframework.util.StringUtils; * @author Christian Dupuis * @author Dave Syer * @author Stephane Nicoll + * @since 2.0.0 */ @Endpoint(id = "configprops") @ConfigurationProperties("endpoints.configprops") diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/context/properties/package-info.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/context/properties/package-info.java new file mode 100644 index 0000000000..245ea6f446 --- /dev/null +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/context/properties/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Actuator support relating to external configuration properties. + */ +package org.springframework.boot.actuate.context.properties; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/CouchbaseHealthIndicator.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/couchbase/CouchbaseHealthIndicator.java similarity index 82% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/CouchbaseHealthIndicator.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/couchbase/CouchbaseHealthIndicator.java index 4bd1f8ae8d..06e19e55b2 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/CouchbaseHealthIndicator.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/couchbase/CouchbaseHealthIndicator.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2016 the original author or authors. + * Copyright 2012-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,12 +14,15 @@ * limitations under the License. */ -package org.springframework.boot.actuate.health; +package org.springframework.boot.actuate.couchbase; import java.util.List; import com.couchbase.client.java.util.features.Version; +import org.springframework.boot.actuate.health.AbstractHealthIndicator; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.HealthIndicator; import org.springframework.data.couchbase.core.CouchbaseOperations; import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -28,7 +31,7 @@ import org.springframework.util.StringUtils; * {@link HealthIndicator} for Couchbase. * * @author Eddú Meléndez - * @since 1.4.0 + * @since 2.0.0 */ public class CouchbaseHealthIndicator extends AbstractHealthIndicator { diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/ElasticsearchHealthIndicator.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/elasticsearch/ElasticsearchHealthIndicator.java similarity index 54% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/ElasticsearchHealthIndicator.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/elasticsearch/ElasticsearchHealthIndicator.java index 75874cbaf6..2c219955e9 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/ElasticsearchHealthIndicator.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/elasticsearch/ElasticsearchHealthIndicator.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2016 the original author or authors. + * Copyright 2012-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,43 +14,68 @@ * limitations under the License. */ -package org.springframework.boot.actuate.health; +package org.springframework.boot.actuate.elasticsearch; import java.util.List; +import org.elasticsearch.action.admin.cluster.health.ClusterHealthRequest; import org.elasticsearch.action.admin.cluster.health.ClusterHealthResponse; import org.elasticsearch.client.Client; import org.elasticsearch.client.Requests; +import org.springframework.boot.actuate.health.AbstractHealthIndicator; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.HealthIndicator; +import org.springframework.util.ObjectUtils; + /** * {@link HealthIndicator} for an Elasticsearch cluster. * * @author Binwei Yang * @author Andy Wilkinson - * @since 1.3.0 + * @since 2.0.0 */ public class ElasticsearchHealthIndicator extends AbstractHealthIndicator { - private static final String[] allIndices = { "_all" }; + private static final String[] ALL_INDICES = { "_all" }; private final Client client; - private final ElasticsearchHealthIndicatorProperties properties; + private final String[] indices; - public ElasticsearchHealthIndicator(Client client, - ElasticsearchHealthIndicatorProperties properties) { + private final long responseTimeout; + + /** + * Create a new {@link ElasticsearchHealthIndicator} instance. + * @param client the Elasticsearch client + * @param responseTimeout the request timeout in milliseconds + * @param indices the indices to check + */ + public ElasticsearchHealthIndicator(Client client, long responseTimeout, + List indices) { + this(client, responseTimeout, (indices == null ? (String[]) null + : indices.toArray(new String[indices.size()]))); + } + + /** + * Create a new {@link ElasticsearchHealthIndicator} instance. + * @param client the Elasticsearch client + * @param responseTimeout the request timeout in milliseconds + * @param indices the indices to check + */ + public ElasticsearchHealthIndicator(Client client, long responseTimeout, + String... indices) { this.client = client; - this.properties = properties; + this.responseTimeout = responseTimeout; + this.indices = indices; } @Override protected void doHealthCheck(Health.Builder builder) throws Exception { - List indices = this.properties.getIndices(); - ClusterHealthResponse response = this.client.admin().cluster() - .health(Requests.clusterHealthRequest(indices.isEmpty() ? allIndices - : indices.toArray(new String[indices.size()]))) - .actionGet(this.properties.getResponseTimeout()); - + ClusterHealthRequest request = Requests.clusterHealthRequest( + ObjectUtils.isEmpty(this.indices) ? ALL_INDICES : this.indices); + ClusterHealthResponse response = this.client.admin().cluster().health(request) + .actionGet(this.responseTimeout); switch (response.getStatus()) { case GREEN: case YELLOW: diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/ElasticsearchJestHealthIndicator.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/elasticsearch/ElasticsearchJestHealthIndicator.java similarity index 83% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/ElasticsearchJestHealthIndicator.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/elasticsearch/ElasticsearchJestHealthIndicator.java index 432b2fa5eb..1d821b860f 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/ElasticsearchJestHealthIndicator.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/elasticsearch/ElasticsearchJestHealthIndicator.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2016 the original author or authors. + * Copyright 2012-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.health; +package org.springframework.boot.actuate.elasticsearch; import com.google.gson.JsonElement; import com.google.gson.JsonObject; @@ -23,11 +23,15 @@ import io.searchbox.client.JestClient; import io.searchbox.client.JestResult; import io.searchbox.indices.Stats; +import org.springframework.boot.actuate.health.AbstractHealthIndicator; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.HealthIndicator; + /** * {@link HealthIndicator} for Elasticsearch using a {@link JestClient}. * * @author Stephane Nicoll - * @since 1.4.0 + * @since 2.0.0 */ public class ElasticsearchJestHealthIndicator extends AbstractHealthIndicator { diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/EndpointDiscoverer.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/EndpointDiscoverer.java similarity index 95% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/EndpointDiscoverer.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/EndpointDiscoverer.java index 969417de69..218655133f 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/EndpointDiscoverer.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/EndpointDiscoverer.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint; +package org.springframework.boot.actuate.endpoint; import java.util.Collection; diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/EndpointInfo.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/EndpointInfo.java similarity index 97% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/EndpointInfo.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/EndpointInfo.java index 00fd684c74..139fcab489 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/EndpointInfo.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/EndpointInfo.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint; +package org.springframework.boot.actuate.endpoint; import java.util.Collection; diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/Operation.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/Operation.java similarity index 97% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/Operation.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/Operation.java index 8bcbf281b2..1561215068 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/Operation.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/Operation.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint; +package org.springframework.boot.actuate.endpoint; /** * An operation on an endpoint. diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/OperationInvoker.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/OperationInvoker.java similarity index 95% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/OperationInvoker.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/OperationInvoker.java index 6de256a8fc..49368aeb99 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/OperationInvoker.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/OperationInvoker.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint; +package org.springframework.boot.actuate.endpoint; import java.util.Map; diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/OperationParameterMapper.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/OperationParameterMapper.java similarity index 96% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/OperationParameterMapper.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/OperationParameterMapper.java index ef8d0fa3e7..e695fe9824 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/OperationParameterMapper.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/OperationParameterMapper.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint; +package org.springframework.boot.actuate.endpoint; /** * An {@code OperationParameterMapper} is used to map parameters to the required type when diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/OperationType.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/OperationType.java similarity index 94% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/OperationType.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/OperationType.java index 8f56af0de8..3ccb945689 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/OperationType.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/OperationType.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint; +package org.springframework.boot.actuate.endpoint; /** * An enumeration of the different types of operation supported by an endpoint. diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/ParameterMappingException.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/ParameterMappingException.java similarity index 96% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/ParameterMappingException.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/ParameterMappingException.java index 4c76cee4be..a789924746 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/ParameterMappingException.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/ParameterMappingException.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint; +package org.springframework.boot.actuate.endpoint; /** * A {@code ParameterMappingException} is thrown when a failure occurs during @@ -39,7 +39,7 @@ public class ParameterMappingException extends RuntimeException { * @param cause the cause of the mapping failure */ public ParameterMappingException(Object input, Class type, Throwable cause) { - super("Failed to map " + input + " of type " + input.getClass() + " to type " + super("Failed to map " + input + " of type " + input.getClass() + " to type " + type, cause); this.input = input; this.type = type; diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/ReflectiveOperationInvoker.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/ReflectiveOperationInvoker.java similarity index 97% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/ReflectiveOperationInvoker.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/ReflectiveOperationInvoker.java index 947245feec..37f4862252 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/ReflectiveOperationInvoker.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/ReflectiveOperationInvoker.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint; +package org.springframework.boot.actuate.endpoint; import java.lang.reflect.Method; import java.lang.reflect.Parameter; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/Sanitizer.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/Sanitizer.java index 50e453d957..c0716751b8 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/Sanitizer.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/Sanitizer.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2016 the original author or authors. + * Copyright 2012-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,25 +21,27 @@ import java.util.regex.Pattern; import org.springframework.util.Assert; /** - * Internal strategy used to sanitize potentially sensitive keys. + * Strategy that be be used by endpoint implementations to sanitize potentially sensitive + * keys. * * @author Christian Dupuis * @author Toshiaki Maki * @author Phillip Webb * @author Nicolas Lejeune * @author Stephane Nicoll + * @since 2.0.0 */ -class Sanitizer { +public class Sanitizer { private static final String[] REGEX_PARTS = { "*", "$", "^", "+" }; private Pattern[] keysToSanitize; - Sanitizer() { + public Sanitizer() { this("password", "secret", "key", "token", ".*credentials.*", "vcap_services"); } - Sanitizer(String... keysToSanitize) { + public Sanitizer(String... keysToSanitize) { setKeysToSanitize(keysToSanitize); } diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/AnnotationEndpointDiscoverer.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation/AnnotationEndpointDiscoverer.java similarity index 94% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/AnnotationEndpointDiscoverer.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation/AnnotationEndpointDiscoverer.java index 3f6af441ad..82cfb07e69 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/AnnotationEndpointDiscoverer.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation/AnnotationEndpointDiscoverer.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint; +package org.springframework.boot.actuate.endpoint.annotation; import java.lang.annotation.Annotation; import java.lang.reflect.Method; @@ -29,6 +29,12 @@ import java.util.function.Consumer; import java.util.function.Function; import org.springframework.beans.factory.BeanFactoryUtils; +import org.springframework.boot.actuate.endpoint.EndpointDiscoverer; +import org.springframework.boot.actuate.endpoint.EndpointInfo; +import org.springframework.boot.actuate.endpoint.Operation; +import org.springframework.boot.actuate.endpoint.OperationType; +import org.springframework.boot.actuate.endpoint.cache.CachingConfiguration; +import org.springframework.boot.actuate.endpoint.cache.CachingConfigurationFactory; import org.springframework.context.ApplicationContext; import org.springframework.core.MethodIntrospector; import org.springframework.core.annotation.AnnotatedElementUtils; @@ -56,12 +62,12 @@ public abstract class AnnotationEndpointDiscoverer private final Function operationKeyFactory; - private final Function cachingConfigurationFactory; + private final CachingConfigurationFactory cachingConfigurationFactory; protected AnnotationEndpointDiscoverer(ApplicationContext applicationContext, EndpointOperationFactory operationFactory, Function operationKeyFactory, - Function cachingConfigurationFactory) { + CachingConfigurationFactory cachingConfigurationFactory) { this.applicationContext = applicationContext; this.operationFactory = operationFactory; this.operationKeyFactory = operationKeyFactory; @@ -118,7 +124,7 @@ public abstract class AnnotationEndpointDiscoverer private Map, EndpointExtensionInfo> discoverExtensions( Map, EndpointInfo> endpoints, - Class extensionType, EndpointExposure delivery) { + Class extensionType, EndpointExposure exposure) { if (extensionType == null) { return Collections.emptyMap(); } @@ -130,7 +136,7 @@ public abstract class AnnotationEndpointDiscoverer Class endpointType = getEndpointType(extensionType, beanType); AnnotationAttributes endpointAttributes = AnnotatedElementUtils .getMergedAnnotationAttributes(endpointType, Endpoint.class); - Assert.state(isExposedOver(endpointAttributes, delivery), + Assert.state(isExposedOver(endpointAttributes, exposure), "Invalid extension " + beanType.getName() + "': endpoint '" + endpointType.getName() + "' does not support such extension"); @@ -256,7 +262,7 @@ public abstract class AnnotationEndpointDiscoverer return null; } CachingConfiguration cachingConfiguration = this.cachingConfigurationFactory - .apply(endpointId); + .getCachingConfiguration(endpointId); return this.operationFactory.createOperation(endpointId, operationAttributes, this.applicationContext.getBean(beanName), method, operationType, determineTimeToLive(cachingConfiguration, operationType, method)); diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/DeleteOperation.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation/DeleteOperation.java similarity index 95% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/DeleteOperation.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation/DeleteOperation.java index 4482f87d63..9c60dad786 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/DeleteOperation.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation/DeleteOperation.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint; +package org.springframework.boot.actuate.endpoint.annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/Endpoint.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation/Endpoint.java similarity index 92% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/Endpoint.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation/Endpoint.java index 451b9684fc..2204e30d01 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/Endpoint.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation/Endpoint.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint; +package org.springframework.boot.actuate.endpoint.annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; @@ -22,6 +22,8 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import org.springframework.boot.actuate.endpoint.EndpointDiscoverer; + /** * Identifies a type as being an endpoint. * diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/EndpointExposure.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation/EndpointExposure.java similarity index 94% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/EndpointExposure.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation/EndpointExposure.java index bf86f0618d..937d28c86e 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/EndpointExposure.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation/EndpointExposure.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint; +package org.springframework.boot.actuate.endpoint.annotation; /** * An enumeration of the available {@link Endpoint} exposure technologies. diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/ReadOperation.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation/ReadOperation.java similarity index 95% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/ReadOperation.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation/ReadOperation.java index 15ee948455..d4688f2ef2 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/ReadOperation.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation/ReadOperation.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint; +package org.springframework.boot.actuate.endpoint.annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/Selector.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation/Selector.java similarity index 94% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/Selector.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation/Selector.java index 215459e86b..0eb84894c3 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/Selector.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation/Selector.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint; +package org.springframework.boot.actuate.endpoint.annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/WriteOperation.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation/WriteOperation.java similarity index 95% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/WriteOperation.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation/WriteOperation.java index f9c6a3563a..0fe850965d 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/WriteOperation.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation/WriteOperation.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint; +package org.springframework.boot.actuate.endpoint.annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation/package-info.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation/package-info.java new file mode 100644 index 0000000000..0dc2847fe1 --- /dev/null +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Annotation support for actuator endpoints. + */ +package org.springframework.boot.actuate.endpoint.annotation; diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/CachingConfiguration.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/cache/CachingConfiguration.java similarity index 95% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/CachingConfiguration.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/cache/CachingConfiguration.java index 06d5ae264e..0021b2f7bd 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/CachingConfiguration.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/cache/CachingConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint; +package org.springframework.boot.actuate.endpoint.cache; /** * The caching configuration of an endpoint. diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/EndpointPathResolver.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/cache/CachingConfigurationFactory.java similarity index 61% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/EndpointPathResolver.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/cache/CachingConfigurationFactory.java index 8c201d0d47..c664eb6f61 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/EndpointPathResolver.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/cache/CachingConfigurationFactory.java @@ -14,22 +14,22 @@ * limitations under the License. */ -package org.springframework.boot.endpoint; +package org.springframework.boot.actuate.endpoint.cache; /** - * Strategy interface that can be used to resolve endpoint paths based on endpoint id. + * Factory used to return a {@link CachingConfiguration} for an endpoint ID. * - * @author Madhura Bhave + * @author Stephane Nicoll * @since 2.0.0 */ @FunctionalInterface -public interface EndpointPathResolver { +public interface CachingConfigurationFactory { /** - * Resolve endpoint path based on id. - * @param endpointId the endpoint id - * @return the resolved path + * Return the {@link CachingConfiguration} for the given endpoint ID. + * @param endpointId the endpoint ID + * @return the caching configuration */ - String resolvePath(String endpointId); + CachingConfiguration getCachingConfiguration(String endpointId); } diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/CachingOperationInvoker.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/cache/CachingOperationInvoker.java similarity index 95% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/CachingOperationInvoker.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/cache/CachingOperationInvoker.java index 2a80c6cbc0..53a5d9f9d5 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/CachingOperationInvoker.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/cache/CachingOperationInvoker.java @@ -14,10 +14,11 @@ * limitations under the License. */ -package org.springframework.boot.endpoint; +package org.springframework.boot.actuate.endpoint.cache; import java.util.Map; +import org.springframework.boot.actuate.endpoint.OperationInvoker; import org.springframework.util.Assert; /** diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/cache/package-info.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/cache/package-info.java new file mode 100644 index 0000000000..e2568b6501 --- /dev/null +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/cache/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Caching support for actuator endpoints. + */ +package org.springframework.boot.actuate.endpoint.cache; diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/ConversionServiceOperationParameterMapper.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/convert/ConversionServiceOperationParameterMapper.java similarity index 70% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/ConversionServiceOperationParameterMapper.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/convert/ConversionServiceOperationParameterMapper.java index 064e40436a..e319bd1b7c 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/ConversionServiceOperationParameterMapper.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/convert/ConversionServiceOperationParameterMapper.java @@ -14,16 +14,20 @@ * limitations under the License. */ -package org.springframework.boot.endpoint; +package org.springframework.boot.actuate.endpoint.convert; +import org.springframework.boot.actuate.endpoint.OperationParameterMapper; +import org.springframework.boot.actuate.endpoint.ParameterMappingException; import org.springframework.boot.context.properties.bind.convert.BinderConversionService; import org.springframework.core.convert.ConversionService; +import org.springframework.format.support.DefaultFormattingConversionService; /** * {@link OperationParameterMapper} that uses a {@link ConversionService} to map parameter * values if necessary. * * @author Stephane Nicoll + * @author Phillip Webb * @since 2.0.0 */ public class ConversionServiceOperationParameterMapper @@ -31,6 +35,10 @@ public class ConversionServiceOperationParameterMapper private final ConversionService conversionService; + public ConversionServiceOperationParameterMapper() { + this(createDefaultConversionService()); + } + /** * Create a new instance with the {@link ConversionService} to use. * @param conversionService the conversion service @@ -42,9 +50,6 @@ public class ConversionServiceOperationParameterMapper @Override public T mapParameter(Object input, Class parameterType) { - if (input == null || parameterType.isAssignableFrom(input.getClass())) { - return parameterType.cast(input); - } try { return this.conversionService.convert(input, parameterType); } @@ -53,4 +58,10 @@ public class ConversionServiceOperationParameterMapper } } + private static ConversionService createDefaultConversionService() { + DefaultFormattingConversionService conversionService = new DefaultFormattingConversionService(); + IsoOffsetDateTimeConverter.registerConverter(conversionService); + return conversionService; + } + } diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/convert/IsoOffsetDateTimeConverter.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/convert/IsoOffsetDateTimeConverter.java new file mode 100644 index 0000000000..a4f1bf7e7c --- /dev/null +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/convert/IsoOffsetDateTimeConverter.java @@ -0,0 +1,52 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.endpoint.convert; + +import java.time.OffsetDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Date; +import java.util.concurrent.TimeUnit; + +import org.springframework.core.convert.converter.Converter; +import org.springframework.core.convert.converter.ConverterRegistry; +import org.springframework.util.StringUtils; + +/** + * A {@link String} to {@link Date} {@link Converter} that uses + * {@link DateTimeFormatter#ISO_OFFSET_DATE_TIME ISO offset} parsing. + * + * @author Andy Wilkinson + * @author Stephane Nicoll + * @since 2.0.0 + */ +public class IsoOffsetDateTimeConverter implements Converter { + + @Override + public Date convert(String source) { + if (StringUtils.hasLength(source)) { + OffsetDateTime offsetDateTime = OffsetDateTime.parse(source, + DateTimeFormatter.ISO_OFFSET_DATE_TIME); + return new Date(TimeUnit.SECONDS.toMillis(offsetDateTime.toEpochSecond())); + } + return null; + } + + public static void registerConverter(ConverterRegistry registry) { + registry.addConverter(new IsoOffsetDateTimeConverter()); + } + +} diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/convert/package-info.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/convert/package-info.java new file mode 100644 index 0000000000..dc0bfc39d4 --- /dev/null +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/convert/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Converter support for actuator endpoints. + */ +package org.springframework.boot.actuate.endpoint.convert; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/ActuatorMediaTypes.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/http/ActuatorMediaType.java similarity index 57% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/ActuatorMediaTypes.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/http/ActuatorMediaType.java index 8b4dcfa5e7..e5a3173600 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/ActuatorMediaTypes.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/http/ActuatorMediaType.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure; +package org.springframework.boot.actuate.endpoint.http; import org.springframework.http.MediaType; @@ -25,32 +25,29 @@ import org.springframework.http.MediaType; * @author Madhura Bhave * @since 2.0.0 */ -public final class ActuatorMediaTypes { +public final class ActuatorMediaType { /** - * {@link String} equivalent of {@link #APPLICATION_ACTUATOR_V1_JSON}. + * {@link String} equivalent of {@link #V1_JSON}. */ - public static final String APPLICATION_ACTUATOR_V1_JSON_VALUE = "application/vnd.spring-boot.actuator.v1+json"; + public static final String V1_JSON_VALUE = "application/vnd.spring-boot.actuator.v1+json"; /** - * {@link String} equivalent of {@link #APPLICATION_ACTUATOR_V2_JSON}. + * {@link String} equivalent of {@link #V2_JSON}. */ - public static final String APPLICATION_ACTUATOR_V2_JSON_VALUE = "application/vnd.spring-boot.actuator.v2+json"; + public static final String V2_JSON_VALUE = "application/vnd.spring-boot.actuator.v2+json"; /** * The {@code application/vnd.spring-boot.actuator.v1+json} media type. */ - public static final MediaType APPLICATION_ACTUATOR_V1_JSON = MediaType - .valueOf(APPLICATION_ACTUATOR_V1_JSON_VALUE); + public static final MediaType V1_JSON = MediaType.valueOf(V1_JSON_VALUE); /** * The {@code application/vnd.spring-boot.actuator.v2+json} media type. */ - public static final MediaType APPLICATION_ACTUATOR_V2_JSON = MediaType - .valueOf(APPLICATION_ACTUATOR_V2_JSON_VALUE); - - private ActuatorMediaTypes() { + public static final MediaType V2_JSON = MediaType.valueOf(V2_JSON_VALUE); + private ActuatorMediaType() { } } diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/http/package-info.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/http/package-info.java new file mode 100644 index 0000000000..13af5cfdf5 --- /dev/null +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/http/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Actuator endpoint HTTP concerns (not tied to any specific implementation). + */ +package org.springframework.boot.actuate.endpoint.http; diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/EndpointMBean.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/EndpointMBean.java similarity index 97% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/EndpointMBean.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/EndpointMBean.java index c5c37d97ee..16553be8f8 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/EndpointMBean.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/EndpointMBean.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint.jmx; +package org.springframework.boot.actuate.endpoint.jmx; import java.util.HashMap; import java.util.List; @@ -32,7 +32,7 @@ import javax.management.ReflectionException; import reactor.core.publisher.Mono; -import org.springframework.boot.endpoint.EndpointInfo; +import org.springframework.boot.actuate.endpoint.EndpointInfo; import org.springframework.util.ClassUtils; /** diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/EndpointMBeanInfo.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/EndpointMBeanInfo.java similarity index 89% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/EndpointMBeanInfo.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/EndpointMBeanInfo.java index d97e5463c2..feed7ec1e9 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/EndpointMBeanInfo.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/EndpointMBeanInfo.java @@ -14,14 +14,14 @@ * limitations under the License. */ -package org.springframework.boot.endpoint.jmx; +package org.springframework.boot.actuate.endpoint.jmx; import java.util.Map; import javax.management.MBeanInfo; -import org.springframework.boot.endpoint.EndpointInfo; -import org.springframework.boot.endpoint.Operation; +import org.springframework.boot.actuate.endpoint.EndpointInfo; +import org.springframework.boot.actuate.endpoint.Operation; /** * The {@link MBeanInfo} for a particular {@link EndpointInfo endpoint}. Maps operation diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/EndpointMBeanInfoAssembler.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/EndpointMBeanInfoAssembler.java similarity index 96% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/EndpointMBeanInfoAssembler.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/EndpointMBeanInfoAssembler.java index e7b7633328..d0379420d7 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/EndpointMBeanInfoAssembler.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/EndpointMBeanInfoAssembler.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint.jmx; +package org.springframework.boot.actuate.endpoint.jmx; import java.util.HashMap; import java.util.LinkedHashMap; @@ -30,8 +30,8 @@ import javax.management.modelmbean.ModelMBeanInfoSupport; import javax.management.modelmbean.ModelMBeanNotificationInfo; import javax.management.modelmbean.ModelMBeanOperationInfo; -import org.springframework.boot.endpoint.EndpointInfo; -import org.springframework.boot.endpoint.OperationType; +import org.springframework.boot.actuate.endpoint.EndpointInfo; +import org.springframework.boot.actuate.endpoint.OperationType; /** * Gathers the management operations of a particular {@link EndpointInfo endpoint}. diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/EndpointMBeanRegistrar.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/EndpointMBeanRegistrar.java similarity index 98% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/EndpointMBeanRegistrar.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/EndpointMBeanRegistrar.java index b04de7ae13..ca48373bde 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/EndpointMBeanRegistrar.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/EndpointMBeanRegistrar.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint.jmx; +package org.springframework.boot.actuate.endpoint.jmx; import javax.management.InstanceNotFoundException; import javax.management.MBeanRegistrationException; diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/EndpointObjectNameFactory.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/EndpointObjectNameFactory.java similarity index 95% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/EndpointObjectNameFactory.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/EndpointObjectNameFactory.java index 2647e82708..63eb529b87 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/EndpointObjectNameFactory.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/EndpointObjectNameFactory.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint.jmx; +package org.springframework.boot.actuate.endpoint.jmx; import javax.management.MalformedObjectNameException; import javax.management.ObjectName; diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/JmxEndpointMBeanFactory.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/JmxEndpointMBeanFactory.java similarity index 94% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/JmxEndpointMBeanFactory.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/JmxEndpointMBeanFactory.java index 18c10e354e..e4f884e9e2 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/JmxEndpointMBeanFactory.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/JmxEndpointMBeanFactory.java @@ -14,12 +14,12 @@ * limitations under the License. */ -package org.springframework.boot.endpoint.jmx; +package org.springframework.boot.actuate.endpoint.jmx; import java.util.Collection; import java.util.stream.Collectors; -import org.springframework.boot.endpoint.EndpointInfo; +import org.springframework.boot.actuate.endpoint.EndpointInfo; /** * A factory for creating JMX MBeans for endpoint operations. diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/JmxEndpointOperation.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/JmxEndpointOperation.java similarity index 91% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/JmxEndpointOperation.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/JmxEndpointOperation.java index 5dca8e9d4b..446127c62e 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/JmxEndpointOperation.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/JmxEndpointOperation.java @@ -14,14 +14,14 @@ * limitations under the License. */ -package org.springframework.boot.endpoint.jmx; +package org.springframework.boot.actuate.endpoint.jmx; import java.util.Collections; import java.util.List; -import org.springframework.boot.endpoint.Operation; -import org.springframework.boot.endpoint.OperationInvoker; -import org.springframework.boot.endpoint.OperationType; +import org.springframework.boot.actuate.endpoint.Operation; +import org.springframework.boot.actuate.endpoint.OperationInvoker; +import org.springframework.boot.actuate.endpoint.OperationType; /** * An operation on a JMX endpoint. diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/JmxEndpointOperationParameterInfo.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/JmxEndpointOperationParameterInfo.java similarity index 96% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/JmxEndpointOperationParameterInfo.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/JmxEndpointOperationParameterInfo.java index 5da2b862c4..0f622e3780 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/JmxEndpointOperationParameterInfo.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/JmxEndpointOperationParameterInfo.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint.jmx; +package org.springframework.boot.actuate.endpoint.jmx; /** * Describes the parameters of an operation on a JMX endpoint. diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/JmxOperationResponseMapper.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/JmxOperationResponseMapper.java similarity index 95% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/JmxOperationResponseMapper.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/JmxOperationResponseMapper.java index 74695742c6..1730a572fc 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/JmxOperationResponseMapper.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/JmxOperationResponseMapper.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint.jmx; +package org.springframework.boot.actuate.endpoint.jmx; /** * A {@code JmxOperationResponseMapper} maps an operation's response to a JMX-friendly diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/JmxAnnotationEndpointDiscoverer.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/annotation/JmxAnnotationEndpointDiscoverer.java similarity index 86% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/JmxAnnotationEndpointDiscoverer.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/annotation/JmxAnnotationEndpointDiscoverer.java index 91a6d1adad..8e6c1cddd3 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/JmxAnnotationEndpointDiscoverer.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/annotation/JmxAnnotationEndpointDiscoverer.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint.jmx; +package org.springframework.boot.actuate.endpoint.jmx.annotation; import java.lang.reflect.Method; import java.lang.reflect.Parameter; @@ -23,20 +23,22 @@ import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.List; -import java.util.function.Function; import java.util.function.Supplier; import java.util.stream.Collectors; -import org.springframework.boot.endpoint.AnnotationEndpointDiscoverer; -import org.springframework.boot.endpoint.CachingConfiguration; -import org.springframework.boot.endpoint.CachingOperationInvoker; -import org.springframework.boot.endpoint.Endpoint; -import org.springframework.boot.endpoint.EndpointExposure; -import org.springframework.boot.endpoint.EndpointInfo; -import org.springframework.boot.endpoint.OperationInvoker; -import org.springframework.boot.endpoint.OperationParameterMapper; -import org.springframework.boot.endpoint.OperationType; -import org.springframework.boot.endpoint.ReflectiveOperationInvoker; +import org.springframework.boot.actuate.endpoint.EndpointInfo; +import org.springframework.boot.actuate.endpoint.OperationInvoker; +import org.springframework.boot.actuate.endpoint.OperationParameterMapper; +import org.springframework.boot.actuate.endpoint.OperationType; +import org.springframework.boot.actuate.endpoint.ReflectiveOperationInvoker; +import org.springframework.boot.actuate.endpoint.annotation.AnnotationEndpointDiscoverer; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.EndpointExposure; +import org.springframework.boot.actuate.endpoint.cache.CachingConfiguration; +import org.springframework.boot.actuate.endpoint.cache.CachingConfigurationFactory; +import org.springframework.boot.actuate.endpoint.cache.CachingOperationInvoker; +import org.springframework.boot.actuate.endpoint.jmx.JmxEndpointOperation; +import org.springframework.boot.actuate.endpoint.jmx.JmxEndpointOperationParameterInfo; import org.springframework.context.ApplicationContext; import org.springframework.core.annotation.AnnotationAttributes; import org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource; @@ -68,7 +70,7 @@ public class JmxAnnotationEndpointDiscoverer */ public JmxAnnotationEndpointDiscoverer(ApplicationContext applicationContext, OperationParameterMapper parameterMapper, - Function cachingConfigurationFactory) { + CachingConfigurationFactory cachingConfigurationFactory) { super(applicationContext, new JmxEndpointOperationFactory(parameterMapper), JmxEndpointOperation::getOperationName, cachingConfigurationFactory); } diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/JmxEndpointExtension.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/annotation/JmxEndpointExtension.java similarity index 90% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/JmxEndpointExtension.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/annotation/JmxEndpointExtension.java index aaacf88715..8ff93938d4 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/jmx/JmxEndpointExtension.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/annotation/JmxEndpointExtension.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint.jmx; +package org.springframework.boot.actuate.endpoint.jmx.annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; @@ -22,7 +22,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import org.springframework.boot.endpoint.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; /** * Identifies a type as being a JMX-specific extension of an {@link Endpoint}. diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/annotation/package-info.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/annotation/package-info.java new file mode 100644 index 0000000000..e6e28145a9 --- /dev/null +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/annotation/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Annotation support for actuator JMX endpoints. + */ +package org.springframework.boot.actuate.endpoint.jmx.annotation; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/package-info.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/package-info.java index fceb7b5bab..eb8c906b54 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/package-info.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/package-info.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2015 the original author or authors. + * Copyright 2012-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,6 +15,6 @@ */ /** - * Actuator JMX endpoint support. + * JMX support for actuator endpoints. */ package org.springframework.boot.actuate.endpoint.jmx; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/package-info.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/package-info.java deleted file mode 100644 index 12bf583673..0000000000 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2012-2015 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Actuator Spring MVC endpoint support. - */ -package org.springframework.boot.actuate.endpoint.mvc; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/package-info.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/package-info.java index f3e4a76aba..3eb35b770c 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/package-info.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/package-info.java @@ -16,6 +16,5 @@ /** * Endpoints used to expose actuator information. - * */ package org.springframework.boot.actuate.endpoint; diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/web/EndpointLinksResolver.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/EndpointLinksResolver.java similarity index 94% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/web/EndpointLinksResolver.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/EndpointLinksResolver.java index 11097d8c73..395c1d1f28 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/web/EndpointLinksResolver.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/EndpointLinksResolver.java @@ -14,13 +14,13 @@ * limitations under the License. */ -package org.springframework.boot.endpoint.web; +package org.springframework.boot.actuate.endpoint.web; import java.util.Collection; import java.util.LinkedHashMap; import java.util.Map; -import org.springframework.boot.endpoint.EndpointInfo; +import org.springframework.boot.actuate.endpoint.EndpointInfo; /** * A resolver for {@link Link links} to web endpoints. diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/web/Link.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/Link.java similarity index 96% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/web/Link.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/Link.java index 9b2ecec8b7..681c4b8e7c 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/web/Link.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/Link.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint.web; +package org.springframework.boot.actuate.endpoint.web; import org.springframework.core.style.ToStringCreator; diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/web/OperationRequestPredicate.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/OperationRequestPredicate.java similarity index 98% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/web/OperationRequestPredicate.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/OperationRequestPredicate.java index ac713efe77..4946e83d40 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/web/OperationRequestPredicate.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/OperationRequestPredicate.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint.web; +package org.springframework.boot.actuate.endpoint.web; import java.util.Collection; import java.util.Collections; diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/web/WebEndpointHttpMethod.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/WebEndpointHttpMethod.java similarity index 94% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/web/WebEndpointHttpMethod.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/WebEndpointHttpMethod.java index a340682988..25486ed020 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/web/WebEndpointHttpMethod.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/WebEndpointHttpMethod.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint.web; +package org.springframework.boot.actuate.endpoint.web; /** * An enumeration of HTTP methods supported by web endpoint operations. diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/web/WebEndpointOperation.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/WebEndpointOperation.java similarity index 89% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/web/WebEndpointOperation.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/WebEndpointOperation.java index 28e0bfd181..c16f07de39 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/web/WebEndpointOperation.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/WebEndpointOperation.java @@ -14,11 +14,11 @@ * limitations under the License. */ -package org.springframework.boot.endpoint.web; +package org.springframework.boot.actuate.endpoint.web; -import org.springframework.boot.endpoint.Operation; -import org.springframework.boot.endpoint.OperationInvoker; -import org.springframework.boot.endpoint.OperationType; +import org.springframework.boot.actuate.endpoint.Operation; +import org.springframework.boot.actuate.endpoint.OperationInvoker; +import org.springframework.boot.actuate.endpoint.OperationType; /** * An operation on a web endpoint. diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/web/WebEndpointResponse.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/WebEndpointResponse.java similarity index 93% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/web/WebEndpointResponse.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/WebEndpointResponse.java index ae50b1c14e..37c2584f0c 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/web/WebEndpointResponse.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/WebEndpointResponse.java @@ -14,7 +14,9 @@ * limitations under the License. */ -package org.springframework.boot.endpoint.web; +package org.springframework.boot.actuate.endpoint.web; + +import org.springframework.boot.actuate.endpoint.web.annotation.WebEndpointExtension; /** * A {@code WebEndpointResponse} can be returned by an operation on a diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/web/WebAnnotationEndpointDiscoverer.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/annotation/WebAnnotationEndpointDiscoverer.java similarity index 86% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/web/WebAnnotationEndpointDiscoverer.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/annotation/WebAnnotationEndpointDiscoverer.java index 8cbb519b5e..b4a8a386bd 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/web/WebAnnotationEndpointDiscoverer.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/annotation/WebAnnotationEndpointDiscoverer.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint.web; +package org.springframework.boot.actuate.endpoint.web.annotation; import java.lang.reflect.Method; import java.util.ArrayList; @@ -22,23 +22,27 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; -import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; import org.reactivestreams.Publisher; -import org.springframework.boot.endpoint.AnnotationEndpointDiscoverer; -import org.springframework.boot.endpoint.CachingConfiguration; -import org.springframework.boot.endpoint.CachingOperationInvoker; -import org.springframework.boot.endpoint.Endpoint; -import org.springframework.boot.endpoint.EndpointExposure; -import org.springframework.boot.endpoint.EndpointInfo; -import org.springframework.boot.endpoint.OperationInvoker; -import org.springframework.boot.endpoint.OperationParameterMapper; -import org.springframework.boot.endpoint.OperationType; -import org.springframework.boot.endpoint.ReflectiveOperationInvoker; -import org.springframework.boot.endpoint.Selector; +import org.springframework.boot.actuate.endpoint.EndpointInfo; +import org.springframework.boot.actuate.endpoint.OperationInvoker; +import org.springframework.boot.actuate.endpoint.OperationParameterMapper; +import org.springframework.boot.actuate.endpoint.OperationType; +import org.springframework.boot.actuate.endpoint.ReflectiveOperationInvoker; +import org.springframework.boot.actuate.endpoint.annotation.AnnotationEndpointDiscoverer; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.EndpointExposure; +import org.springframework.boot.actuate.endpoint.annotation.Selector; +import org.springframework.boot.actuate.endpoint.cache.CachingConfiguration; +import org.springframework.boot.actuate.endpoint.cache.CachingConfigurationFactory; +import org.springframework.boot.actuate.endpoint.cache.CachingOperationInvoker; +import org.springframework.boot.actuate.endpoint.web.OperationRequestPredicate; +import org.springframework.boot.actuate.endpoint.web.WebEndpointHttpMethod; +import org.springframework.boot.actuate.endpoint.web.WebEndpointOperation; +import org.springframework.boot.actuate.endpoint.web.WebEndpointResponse; import org.springframework.context.ApplicationContext; import org.springframework.core.ResolvableType; import org.springframework.core.annotation.AnnotationAttributes; @@ -69,7 +73,7 @@ public class WebAnnotationEndpointDiscoverer extends */ public WebAnnotationEndpointDiscoverer(ApplicationContext applicationContext, OperationParameterMapper operationParameterMapper, - Function cachingConfigurationFactory, + CachingConfigurationFactory cachingConfigurationFactory, Collection consumedMediaTypes, Collection producedMediaTypes) { super(applicationContext, diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/web/WebEndpointExtension.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/annotation/WebEndpointExtension.java similarity index 90% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/web/WebEndpointExtension.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/annotation/WebEndpointExtension.java index f89416fb23..d09202261f 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/web/WebEndpointExtension.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/annotation/WebEndpointExtension.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint.web; +package org.springframework.boot.actuate.endpoint.web.annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; @@ -22,7 +22,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import org.springframework.boot.endpoint.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; /** * Identifies a type as being a Web-specific extension of an {@link Endpoint}. diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/annotation/package-info.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/annotation/package-info.java new file mode 100644 index 0000000000..08d543dee2 --- /dev/null +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/annotation/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Annotation support for actuator Web endpoints. + */ +package org.springframework.boot.actuate.endpoint.web.annotation; diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/web/jersey/JerseyEndpointResourceFactory.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/jersey/JerseyEndpointResourceFactory.java similarity index 91% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/web/jersey/JerseyEndpointResourceFactory.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/jersey/JerseyEndpointResourceFactory.java index 9cd95b328a..f8775200ec 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/web/jersey/JerseyEndpointResourceFactory.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/jersey/JerseyEndpointResourceFactory.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint.web.jersey; +package org.springframework.boot.actuate.endpoint.web.jersey; import java.io.IOException; import java.util.ArrayList; @@ -38,21 +38,22 @@ import org.glassfish.jersey.server.model.Resource; import org.glassfish.jersey.server.model.Resource.Builder; import reactor.core.publisher.Mono; -import org.springframework.boot.endpoint.EndpointInfo; -import org.springframework.boot.endpoint.OperationInvoker; -import org.springframework.boot.endpoint.ParameterMappingException; -import org.springframework.boot.endpoint.web.EndpointLinksResolver; +import org.springframework.boot.actuate.endpoint.EndpointInfo; +import org.springframework.boot.actuate.endpoint.OperationInvoker; +import org.springframework.boot.actuate.endpoint.ParameterMappingException; +import org.springframework.boot.actuate.endpoint.web.EndpointLinksResolver; +import org.springframework.boot.actuate.endpoint.web.Link; +import org.springframework.boot.actuate.endpoint.web.OperationRequestPredicate; +import org.springframework.boot.actuate.endpoint.web.WebEndpointOperation; +import org.springframework.boot.actuate.endpoint.web.WebEndpointResponse; import org.springframework.boot.endpoint.web.EndpointMapping; -import org.springframework.boot.endpoint.web.Link; -import org.springframework.boot.endpoint.web.OperationRequestPredicate; -import org.springframework.boot.endpoint.web.WebEndpointOperation; -import org.springframework.boot.endpoint.web.WebEndpointResponse; import org.springframework.util.ClassUtils; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; /** - * A factory for creating Jersey {@link Resource Resources} for web endpoint operations. + * A factory for creating Jersey {@link Resource Resources} for + * {@link WebEndpointOperation web endpoint operations}. * * @author Andy Wilkinson * @since 2.0.0 diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/jersey/package-info.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/jersey/package-info.java new file mode 100644 index 0000000000..62246ae68f --- /dev/null +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/jersey/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Jersey support for actuator endpoints. + */ +package org.springframework.boot.actuate.endpoint.web.jersey; diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/web/jersey/package-info.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/package-info.java similarity index 87% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/web/jersey/package-info.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/package-info.java index 65469b9973..b2707c2752 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/web/jersey/package-info.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/package-info.java @@ -15,6 +15,6 @@ */ /** - * Jersey web endpoint support. + * Web support for actuator endpoints. */ -package org.springframework.boot.endpoint.web.jersey; +package org.springframework.boot.actuate.endpoint.web; diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/web/reactive/WebEndpointReactiveHandlerMapping.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/reactive/WebFluxEndpointHandlerMapping.java similarity index 90% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/web/reactive/WebEndpointReactiveHandlerMapping.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/reactive/WebFluxEndpointHandlerMapping.java index 05410eccfe..ff1a2fb593 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/web/reactive/WebEndpointReactiveHandlerMapping.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/reactive/WebFluxEndpointHandlerMapping.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint.web.reactive; +package org.springframework.boot.actuate.endpoint.web.reactive; import java.lang.reflect.Method; import java.util.Collection; @@ -28,16 +28,16 @@ import reactor.core.publisher.MonoSink; import reactor.core.scheduler.Schedulers; import org.springframework.beans.factory.InitializingBean; -import org.springframework.boot.endpoint.EndpointInfo; -import org.springframework.boot.endpoint.OperationInvoker; -import org.springframework.boot.endpoint.OperationType; -import org.springframework.boot.endpoint.ParameterMappingException; -import org.springframework.boot.endpoint.web.EndpointLinksResolver; +import org.springframework.boot.actuate.endpoint.EndpointInfo; +import org.springframework.boot.actuate.endpoint.OperationInvoker; +import org.springframework.boot.actuate.endpoint.OperationType; +import org.springframework.boot.actuate.endpoint.ParameterMappingException; +import org.springframework.boot.actuate.endpoint.web.EndpointLinksResolver; +import org.springframework.boot.actuate.endpoint.web.Link; +import org.springframework.boot.actuate.endpoint.web.OperationRequestPredicate; +import org.springframework.boot.actuate.endpoint.web.WebEndpointOperation; +import org.springframework.boot.actuate.endpoint.web.WebEndpointResponse; import org.springframework.boot.endpoint.web.EndpointMapping; -import org.springframework.boot.endpoint.web.Link; -import org.springframework.boot.endpoint.web.OperationRequestPredicate; -import org.springframework.boot.endpoint.web.WebEndpointOperation; -import org.springframework.boot.endpoint.web.WebEndpointResponse; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -60,13 +60,13 @@ import org.springframework.web.util.UriComponentsBuilder; import org.springframework.web.util.pattern.PathPatternParser; /** - * A custom {@link RequestMappingInfoHandlerMapping} that makes web endpoints available - * over HTTP using Spring WebFlux. + * A custom {@link HandlerMapping} that makes web endpoints available over HTTP using + * Spring WebFlux. * * @author Andy Wilkinson * @since 2.0.0 */ -public class WebEndpointReactiveHandlerMapping extends RequestMappingInfoHandlerMapping +public class WebFluxEndpointHandlerMapping extends RequestMappingInfoHandlerMapping implements InitializingBean { private static final PathPatternParser pathPatternParser = new PathPatternParser(); @@ -94,7 +94,7 @@ public class WebEndpointReactiveHandlerMapping extends RequestMappingInfoHandler * @param endpointMapping the base mapping for all endpoints * @param collection the web endpoints */ - public WebEndpointReactiveHandlerMapping(EndpointMapping endpointMapping, + public WebFluxEndpointHandlerMapping(EndpointMapping endpointMapping, Collection> collection) { this(endpointMapping, collection, null); } @@ -106,7 +106,7 @@ public class WebEndpointReactiveHandlerMapping extends RequestMappingInfoHandler * @param webEndpoints the web endpoints * @param corsConfiguration the CORS configuration for the endpoints */ - public WebEndpointReactiveHandlerMapping(EndpointMapping endpointMapping, + public WebFluxEndpointHandlerMapping(EndpointMapping endpointMapping, Collection> webEndpoints, CorsConfiguration corsConfiguration) { this.endpointMapping = endpointMapping; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/reactive/package-info.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/reactive/package-info.java new file mode 100644 index 0000000000..8b32084385 --- /dev/null +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/reactive/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Spring WebFlux support for actuator endpoints. + */ +package org.springframework.boot.actuate.endpoint.web.reactive; diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/web/mvc/AbstractWebEndpointServletHandlerMapping.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/servlet/AbstractWebMvcEndpointHandlerMapping.java similarity index 90% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/web/mvc/AbstractWebEndpointServletHandlerMapping.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/servlet/AbstractWebMvcEndpointHandlerMapping.java index d8ccfd9f1b..6a7b831778 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/web/mvc/AbstractWebEndpointServletHandlerMapping.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/servlet/AbstractWebMvcEndpointHandlerMapping.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint.web.mvc; +package org.springframework.boot.actuate.endpoint.web.servlet; import java.lang.reflect.Method; import java.util.Collection; @@ -24,14 +24,15 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.InitializingBean; -import org.springframework.boot.endpoint.EndpointInfo; +import org.springframework.boot.actuate.endpoint.EndpointInfo; +import org.springframework.boot.actuate.endpoint.web.OperationRequestPredicate; +import org.springframework.boot.actuate.endpoint.web.WebEndpointOperation; import org.springframework.boot.endpoint.web.EndpointMapping; -import org.springframework.boot.endpoint.web.OperationRequestPredicate; -import org.springframework.boot.endpoint.web.WebEndpointOperation; import org.springframework.util.StringUtils; import org.springframework.web.accept.PathExtensionContentNegotiationStrategy; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.servlet.HandlerMapping; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import org.springframework.web.servlet.mvc.condition.ConsumesRequestCondition; import org.springframework.web.servlet.mvc.condition.PatternsRequestCondition; @@ -41,14 +42,14 @@ import org.springframework.web.servlet.mvc.method.RequestMappingInfo; import org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping; /** - * A custom {@link RequestMappingInfoHandlerMapping} that makes web endpoints available - * over HTTP using Spring MVC. + * A custom {@link HandlerMapping} that makes web endpoints available over HTTP using + * Spring MVC. * * @author Andy Wilkinson * @author Madhura Bhave * @since 2.0.0 */ -public abstract class AbstractWebEndpointServletHandlerMapping +public abstract class AbstractWebMvcEndpointHandlerMapping extends RequestMappingInfoHandlerMapping implements InitializingBean { private final EndpointMapping endpointMapping; @@ -63,7 +64,7 @@ public abstract class AbstractWebEndpointServletHandlerMapping * @param endpointMapping the base mapping for all endpoints * @param collection the web endpoints operations */ - public AbstractWebEndpointServletHandlerMapping(EndpointMapping endpointMapping, + public AbstractWebMvcEndpointHandlerMapping(EndpointMapping endpointMapping, Collection> collection) { this(endpointMapping, collection, null); } @@ -75,7 +76,7 @@ public abstract class AbstractWebEndpointServletHandlerMapping * @param webEndpoints the web endpoints * @param corsConfiguration the CORS configuration for the endpoints */ - public AbstractWebEndpointServletHandlerMapping(EndpointMapping endpointMapping, + public AbstractWebMvcEndpointHandlerMapping(EndpointMapping endpointMapping, Collection> webEndpoints, CorsConfiguration corsConfiguration) { this.endpointMapping = endpointMapping; diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/web/mvc/WebEndpointServletHandlerMapping.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/servlet/WebMvcEndpointHandlerMapping.java similarity index 81% rename from spring-boot/src/main/java/org/springframework/boot/endpoint/web/mvc/WebEndpointServletHandlerMapping.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/servlet/WebMvcEndpointHandlerMapping.java index abdac22306..78860b8563 100644 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/web/mvc/WebEndpointServletHandlerMapping.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/servlet/WebMvcEndpointHandlerMapping.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint.web.mvc; +package org.springframework.boot.actuate.endpoint.web.servlet; import java.lang.reflect.Method; import java.util.Arrays; @@ -25,14 +25,14 @@ import java.util.Map; import javax.servlet.http.HttpServletRequest; -import org.springframework.boot.endpoint.EndpointInfo; -import org.springframework.boot.endpoint.OperationInvoker; -import org.springframework.boot.endpoint.ParameterMappingException; -import org.springframework.boot.endpoint.web.EndpointLinksResolver; +import org.springframework.boot.actuate.endpoint.EndpointInfo; +import org.springframework.boot.actuate.endpoint.OperationInvoker; +import org.springframework.boot.actuate.endpoint.ParameterMappingException; +import org.springframework.boot.actuate.endpoint.web.EndpointLinksResolver; +import org.springframework.boot.actuate.endpoint.web.Link; +import org.springframework.boot.actuate.endpoint.web.WebEndpointOperation; +import org.springframework.boot.actuate.endpoint.web.WebEndpointResponse; import org.springframework.boot.endpoint.web.EndpointMapping; -import org.springframework.boot.endpoint.web.Link; -import org.springframework.boot.endpoint.web.WebEndpointOperation; -import org.springframework.boot.endpoint.web.WebEndpointResponse; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -41,23 +41,21 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.servlet.HandlerMapping; -import org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping; /** - * A custom {@link RequestMappingInfoHandlerMapping} that makes web endpoints available - * over HTTP using Spring MVC. + * A custom {@link HandlerMapping} that makes web endpoints available over HTTP using + * Spring MVC. * * @author Andy Wilkinson * @since 2.0.0 */ -public class WebEndpointServletHandlerMapping - extends AbstractWebEndpointServletHandlerMapping { +public class WebMvcEndpointHandlerMapping extends AbstractWebMvcEndpointHandlerMapping { private final Method handle = ReflectionUtils.findMethod(OperationHandler.class, "handle", HttpServletRequest.class, Map.class); private final Method links = ReflectionUtils.findMethod( - WebEndpointServletHandlerMapping.class, "links", HttpServletRequest.class); + WebMvcEndpointHandlerMapping.class, "links", HttpServletRequest.class); private final EndpointLinksResolver endpointLinksResolver = new EndpointLinksResolver(); @@ -67,7 +65,7 @@ public class WebEndpointServletHandlerMapping * @param endpointMapping the base mapping for all endpoints * @param collection the web endpoints operations */ - public WebEndpointServletHandlerMapping(EndpointMapping endpointMapping, + public WebMvcEndpointHandlerMapping(EndpointMapping endpointMapping, Collection> collection) { this(endpointMapping, collection, null); } @@ -79,7 +77,7 @@ public class WebEndpointServletHandlerMapping * @param webEndpoints the web endpoints * @param corsConfiguration the CORS configuration for the endpoints */ - public WebEndpointServletHandlerMapping(EndpointMapping endpointMapping, + public WebMvcEndpointHandlerMapping(EndpointMapping endpointMapping, Collection> webEndpoints, CorsConfiguration corsConfiguration) { super(endpointMapping, webEndpoints, corsConfiguration); diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/servlet/package-info.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/servlet/package-info.java new file mode 100644 index 0000000000..f840789f94 --- /dev/null +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/servlet/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Spring MVC support for actuator endpoints. + */ +package org.springframework.boot.actuate.endpoint.web.servlet; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/EnvironmentEndpoint.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/env/EnvironmentEndpoint.java similarity index 93% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/EnvironmentEndpoint.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/env/EnvironmentEndpoint.java index 2862b5d793..6e470a9dec 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/EnvironmentEndpoint.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/env/EnvironmentEndpoint.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.env; import java.util.ArrayList; import java.util.Arrays; @@ -25,12 +25,13 @@ import java.util.function.Predicate; import java.util.regex.Pattern; import java.util.stream.Stream; -import org.springframework.boot.actuate.endpoint.EnvironmentEndpoint.EnvironmentDescriptor.PropertySourceDescriptor; -import org.springframework.boot.actuate.endpoint.EnvironmentEndpoint.EnvironmentDescriptor.PropertySourceDescriptor.PropertyValueDescriptor; +import org.springframework.boot.actuate.endpoint.Sanitizer; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; +import org.springframework.boot.actuate.endpoint.annotation.Selector; +import org.springframework.boot.actuate.env.EnvironmentEndpoint.EnvironmentDescriptor.PropertySourceDescriptor; +import org.springframework.boot.actuate.env.EnvironmentEndpoint.EnvironmentDescriptor.PropertySourceDescriptor.PropertyValueDescriptor; import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.boot.endpoint.Endpoint; -import org.springframework.boot.endpoint.ReadOperation; -import org.springframework.boot.endpoint.Selector; import org.springframework.boot.origin.OriginLookup; import org.springframework.core.env.CompositePropertySource; import org.springframework.core.env.ConfigurableEnvironment; @@ -53,6 +54,7 @@ import org.springframework.web.bind.annotation.ResponseStatus; * @author Phillip Webb * @author Christian Dupuis * @author Madhura Bhave + * @since 2.0.0 */ @Endpoint(id = "env") @ConfigurationProperties("endpoints.env") diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/FlywayEndpoint.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/flyway/FlywayEndpoint.java similarity index 83% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/FlywayEndpoint.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/flyway/FlywayEndpoint.java index dc1d839931..a66d227f35 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/FlywayEndpoint.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/flyway/FlywayEndpoint.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.flyway; import java.util.Date; import java.util.HashMap; @@ -28,8 +28,8 @@ import org.flywaydb.core.api.MigrationInfo; import org.flywaydb.core.api.MigrationState; import org.flywaydb.core.api.MigrationType; -import org.springframework.boot.endpoint.Endpoint; -import org.springframework.boot.endpoint.ReadOperation; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; import org.springframework.util.Assert; /** @@ -38,26 +38,23 @@ import org.springframework.util.Assert; * @author Eddú Meléndez * @author Phillip Webb * @author Andy Wilkinson - * @since 1.3.0 + * @since 2.0.0 */ @Endpoint(id = "flyway") public class FlywayEndpoint { - private final Map flyways; + private final Map flywayBeans; - public FlywayEndpoint(Map flyways) { - Assert.notEmpty(flyways, "Flyways must be specified"); - this.flyways = flyways; + public FlywayEndpoint(Map flywayBeans) { + Assert.notEmpty(flywayBeans, "FlywayBeans must be specified"); + this.flywayBeans = flywayBeans; } @ReadOperation public Map flywayReports() { Map reports = new HashMap<>(); - for (Map.Entry entry : this.flyways.entrySet()) { - reports.put(entry.getKey(), - new FlywayReport(Stream.of(entry.getValue().info().all()) - .map(FlywayMigration::new).collect(Collectors.toList()))); - } + this.flywayBeans.forEach((name, flyway) -> reports.put(name, + new FlywayReport(flyway.info().all()))); return reports; } @@ -68,6 +65,11 @@ public class FlywayEndpoint { private final List migrations; + public FlywayReport(MigrationInfo[] migrations) { + this.migrations = Stream.of(migrations).map(FlywayMigration::new) + .collect(Collectors.toList()); + } + public FlywayReport(List migrations) { this.migrations = migrations; } diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/HealthEndpoint.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/HealthEndpoint.java similarity index 80% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/HealthEndpoint.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/HealthEndpoint.java index a2f74e30ac..82e08bca3c 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/HealthEndpoint.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/HealthEndpoint.java @@ -14,12 +14,10 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.health; -import org.springframework.boot.actuate.health.Health; -import org.springframework.boot.actuate.health.HealthIndicator; -import org.springframework.boot.endpoint.Endpoint; -import org.springframework.boot.endpoint.ReadOperation; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; /** * {@link Endpoint} to expose application health. @@ -27,6 +25,7 @@ import org.springframework.boot.endpoint.ReadOperation; * @author Dave Syer * @author Christian Dupuis * @author Andy Wilkinson + * @since 2.0.0 */ @Endpoint(id = "health") public class HealthEndpoint { diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/HealthReactiveWebEndpointExtension.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/HealthReactiveWebEndpointExtension.java similarity index 74% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/HealthReactiveWebEndpointExtension.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/HealthReactiveWebEndpointExtension.java index 2bed97a7e8..788691ec87 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/HealthReactiveWebEndpointExtension.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/HealthReactiveWebEndpointExtension.java @@ -14,17 +14,13 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint.web; +package org.springframework.boot.actuate.health; import reactor.core.publisher.Mono; -import org.springframework.boot.actuate.endpoint.HealthEndpoint; -import org.springframework.boot.actuate.health.Health; -import org.springframework.boot.actuate.health.HealthStatusHttpMapper; -import org.springframework.boot.actuate.health.ReactiveHealthIndicator; -import org.springframework.boot.endpoint.ReadOperation; -import org.springframework.boot.endpoint.web.WebEndpointExtension; -import org.springframework.boot.endpoint.web.WebEndpointResponse; +import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; +import org.springframework.boot.actuate.endpoint.web.WebEndpointResponse; +import org.springframework.boot.actuate.endpoint.web.annotation.WebEndpointExtension; /** * Reactive {@link WebEndpointExtension} for the {@link HealthEndpoint}. diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/HealthWebEndpointExtension.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/HealthWebEndpointExtension.java similarity index 77% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/HealthWebEndpointExtension.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/HealthWebEndpointExtension.java index ad04a9258d..dea8d8f3ab 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/HealthWebEndpointExtension.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/HealthWebEndpointExtension.java @@ -14,14 +14,11 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint.web; +package org.springframework.boot.actuate.health; -import org.springframework.boot.actuate.endpoint.HealthEndpoint; -import org.springframework.boot.actuate.health.Health; -import org.springframework.boot.actuate.health.HealthStatusHttpMapper; -import org.springframework.boot.endpoint.ReadOperation; -import org.springframework.boot.endpoint.web.WebEndpointExtension; -import org.springframework.boot.endpoint.web.WebEndpointResponse; +import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; +import org.springframework.boot.actuate.endpoint.web.WebEndpointResponse; +import org.springframework.boot.actuate.endpoint.web.annotation.WebEndpointExtension; /** * {@link WebEndpointExtension} for the {@link HealthEndpoint}. diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/StatusEndpoint.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/StatusEndpoint.java similarity index 77% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/StatusEndpoint.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/StatusEndpoint.java index 56c60811c5..b7245761ac 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/StatusEndpoint.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/StatusEndpoint.java @@ -14,13 +14,10 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.health; -import org.springframework.boot.actuate.health.Health; -import org.springframework.boot.actuate.health.HealthIndicator; -import org.springframework.boot.actuate.health.Status; -import org.springframework.boot.endpoint.Endpoint; -import org.springframework.boot.endpoint.ReadOperation; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; /** * {@link Endpoint} to expose application {@link Status}. diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/StatusReactiveWebEndpointExtension.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/StatusReactiveWebEndpointExtension.java similarity index 74% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/StatusReactiveWebEndpointExtension.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/StatusReactiveWebEndpointExtension.java index fd81f2ed98..ed76c49286 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/StatusReactiveWebEndpointExtension.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/StatusReactiveWebEndpointExtension.java @@ -14,17 +14,13 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint.web; +package org.springframework.boot.actuate.health; import reactor.core.publisher.Mono; -import org.springframework.boot.actuate.endpoint.StatusEndpoint; -import org.springframework.boot.actuate.health.Health; -import org.springframework.boot.actuate.health.HealthStatusHttpMapper; -import org.springframework.boot.actuate.health.ReactiveHealthIndicator; -import org.springframework.boot.endpoint.ReadOperation; -import org.springframework.boot.endpoint.web.WebEndpointExtension; -import org.springframework.boot.endpoint.web.WebEndpointResponse; +import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; +import org.springframework.boot.actuate.endpoint.web.WebEndpointResponse; +import org.springframework.boot.actuate.endpoint.web.annotation.WebEndpointExtension; /** * Reactive {@link WebEndpointExtension} for the {@link StatusEndpoint}. diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/StatusWebEndpointExtension.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/StatusWebEndpointExtension.java similarity index 75% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/StatusWebEndpointExtension.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/StatusWebEndpointExtension.java index aa39145262..f7d3789e82 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/StatusWebEndpointExtension.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/StatusWebEndpointExtension.java @@ -14,14 +14,11 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint.web; +package org.springframework.boot.actuate.health; -import org.springframework.boot.actuate.endpoint.StatusEndpoint; -import org.springframework.boot.actuate.health.Health; -import org.springframework.boot.actuate.health.HealthStatusHttpMapper; -import org.springframework.boot.endpoint.ReadOperation; -import org.springframework.boot.endpoint.web.WebEndpointExtension; -import org.springframework.boot.endpoint.web.WebEndpointResponse; +import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; +import org.springframework.boot.actuate.endpoint.web.WebEndpointResponse; +import org.springframework.boot.actuate.endpoint.web.annotation.WebEndpointExtension; /** * {@link WebEndpointExtension} for the {@link StatusEndpoint}. diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/InfoEndpoint.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/info/InfoEndpoint.java similarity index 85% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/InfoEndpoint.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/info/InfoEndpoint.java index 85ba27e857..cacbacc15b 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/InfoEndpoint.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/info/InfoEndpoint.java @@ -14,15 +14,13 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.info; import java.util.List; import java.util.Map; -import org.springframework.boot.actuate.info.Info; -import org.springframework.boot.actuate.info.InfoContributor; -import org.springframework.boot.endpoint.Endpoint; -import org.springframework.boot.endpoint.ReadOperation; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; import org.springframework.util.Assert; /** @@ -31,6 +29,7 @@ import org.springframework.util.Assert; * @author Dave Syer * @author Meang Akira Tanaka * @author Stephane Nicoll + * @since 2.0.0 */ @Endpoint(id = "info") public class InfoEndpoint { diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/DataSourceHealthIndicator.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/jdbc/DataSourceHealthIndicator.java similarity index 95% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/DataSourceHealthIndicator.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/jdbc/DataSourceHealthIndicator.java index 371fd73a1e..173e041df2 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/DataSourceHealthIndicator.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/jdbc/DataSourceHealthIndicator.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.health; +package org.springframework.boot.actuate.jdbc; import java.sql.Connection; import java.sql.ResultSet; @@ -25,6 +25,9 @@ import java.util.List; import javax.sql.DataSource; import org.springframework.beans.factory.InitializingBean; +import org.springframework.boot.actuate.health.AbstractHealthIndicator; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.HealthIndicator; import org.springframework.boot.jdbc.DatabaseDriver; import org.springframework.dao.support.DataAccessUtils; import org.springframework.jdbc.IncorrectResultSetColumnCountException; @@ -44,7 +47,7 @@ import org.springframework.util.StringUtils; * @author Andy Wilkinson * @author Stephane Nicoll * @author Arthur Kalimullin - * @since 1.1.0 + * @since 2.0.0 */ public class DataSourceHealthIndicator extends AbstractHealthIndicator implements InitializingBean { diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/JmsHealthIndicator.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/jms/JmsHealthIndicator.java similarity index 83% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/JmsHealthIndicator.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/jms/JmsHealthIndicator.java index a83435076d..320d23b900 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/JmsHealthIndicator.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/jms/JmsHealthIndicator.java @@ -14,16 +14,20 @@ * limitations under the License. */ -package org.springframework.boot.actuate.health; +package org.springframework.boot.actuate.jms; import javax.jms.Connection; import javax.jms.ConnectionFactory; +import org.springframework.boot.actuate.health.AbstractHealthIndicator; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.HealthIndicator; + /** * {@link HealthIndicator} for a JMS {@link ConnectionFactory}. * * @author Stephane Nicoll - * @since 1.3.0 + * @since 2.0.0 */ public class JmsHealthIndicator extends AbstractHealthIndicator { diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/LdapHealthIndicator.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/ldap/LdapHealthIndicator.java similarity index 88% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/LdapHealthIndicator.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/ldap/LdapHealthIndicator.java index 668c1df591..ae1b2effe0 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/LdapHealthIndicator.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/ldap/LdapHealthIndicator.java @@ -14,11 +14,14 @@ * limitations under the License. */ -package org.springframework.boot.actuate.health; +package org.springframework.boot.actuate.ldap; import javax.naming.NamingException; import javax.naming.directory.DirContext; +import org.springframework.boot.actuate.health.AbstractHealthIndicator; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.HealthIndicator; import org.springframework.ldap.core.ContextExecutor; import org.springframework.ldap.core.LdapOperations; import org.springframework.util.Assert; @@ -28,7 +31,7 @@ import org.springframework.util.Assert; * * @author Eddú Meléndez * @author Stephane Nicoll - * @version 1.5.0 + * @version 2.0.0 */ public class LdapHealthIndicator extends AbstractHealthIndicator { diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/LiquibaseEndpoint.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpoint.java similarity index 91% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/LiquibaseEndpoint.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpoint.java index 520b799d5c..830099e5be 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/LiquibaseEndpoint.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpoint.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.liquibase; import java.util.Date; import java.util.HashMap; @@ -34,8 +34,8 @@ import liquibase.database.DatabaseFactory; import liquibase.database.jvm.JdbcConnection; import liquibase.integration.spring.SpringLiquibase; -import org.springframework.boot.endpoint.Endpoint; -import org.springframework.boot.endpoint.ReadOperation; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -43,16 +43,16 @@ import org.springframework.util.StringUtils; * {@link Endpoint} to expose liquibase info. * * @author Eddú Meléndez - * @since 1.3.0 + * @since 2.0.0 */ @Endpoint(id = "liquibase") public class LiquibaseEndpoint { - private final Map liquibases; + private final Map liquibaseBeans; - public LiquibaseEndpoint(Map liquibases) { - Assert.notEmpty(liquibases, "Liquibases must be specified"); - this.liquibases = liquibases; + public LiquibaseEndpoint(Map liquibaseBeans) { + Assert.notEmpty(liquibaseBeans, "LiquibaseBeans must be specified"); + this.liquibaseBeans = liquibaseBeans; } @ReadOperation @@ -60,9 +60,8 @@ public class LiquibaseEndpoint { Map reports = new HashMap<>(); DatabaseFactory factory = DatabaseFactory.getInstance(); StandardChangeLogHistoryService service = new StandardChangeLogHistoryService(); - for (Map.Entry entry : this.liquibases.entrySet()) { - reports.put(entry.getKey(), createReport(entry.getValue(), service, factory)); - } + this.liquibaseBeans.forEach((name, liquibase) -> reports.put(name, + createReport(liquibase, service, factory))); return reports; } diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/LogFileWebEndpoint.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/logger/LogFileWebEndpoint.java similarity index 90% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/LogFileWebEndpoint.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/logger/LogFileWebEndpoint.java index cbf29a08ef..7f4b2b799c 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/LogFileWebEndpoint.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/logger/LogFileWebEndpoint.java @@ -14,17 +14,17 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint.web; +package org.springframework.boot.actuate.logger; import java.io.File; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.EndpointExposure; +import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.boot.endpoint.Endpoint; -import org.springframework.boot.endpoint.EndpointExposure; -import org.springframework.boot.endpoint.ReadOperation; import org.springframework.boot.logging.LogFile; import org.springframework.core.env.Environment; import org.springframework.core.io.FileSystemResource; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/LoggersEndpoint.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/logging/LoggersEndpoint.java similarity index 90% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/LoggersEndpoint.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/logging/LoggersEndpoint.java index 3d2af7fc70..254b11d769 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/LoggersEndpoint.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/logging/LoggersEndpoint.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.logging; import java.util.Collection; import java.util.Collections; @@ -24,10 +24,10 @@ import java.util.NavigableSet; import java.util.Set; import java.util.TreeSet; -import org.springframework.boot.endpoint.Endpoint; -import org.springframework.boot.endpoint.ReadOperation; -import org.springframework.boot.endpoint.Selector; -import org.springframework.boot.endpoint.WriteOperation; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; +import org.springframework.boot.actuate.endpoint.annotation.Selector; +import org.springframework.boot.actuate.endpoint.annotation.WriteOperation; import org.springframework.boot.logging.LogLevel; import org.springframework.boot.logging.LoggerConfiguration; import org.springframework.boot.logging.LoggingSystem; @@ -38,7 +38,7 @@ import org.springframework.util.Assert; * * @author Ben Hale * @author Phillip Webb - * @since 1.5.0 + * @since 2.0.0 */ @Endpoint(id = "loggers") public class LoggersEndpoint { diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/MailHealthIndicator.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/mail/MailHealthIndicator.java similarity index 82% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/MailHealthIndicator.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/mail/MailHealthIndicator.java index 5f443c7725..ed46e361fe 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/MailHealthIndicator.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/mail/MailHealthIndicator.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2015 the original author or authors. + * Copyright 2012-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,16 +14,18 @@ * limitations under the License. */ -package org.springframework.boot.actuate.health; +package org.springframework.boot.actuate.mail; +import org.springframework.boot.actuate.health.AbstractHealthIndicator; import org.springframework.boot.actuate.health.Health.Builder; +import org.springframework.boot.actuate.health.HealthIndicator; import org.springframework.mail.javamail.JavaMailSenderImpl; /** * {@link HealthIndicator} for configured smtp server(s). * * @author Johannes Edmeier - * @since 1.3.0 + * @since 2.0.0 */ public class MailHealthIndicator extends AbstractHealthIndicator { diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/HeapDumpWebEndpoint.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/management/HeapDumpWebEndpoint.java similarity index 95% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/HeapDumpWebEndpoint.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/management/HeapDumpWebEndpoint.java index bec769816c..8e806f7e4e 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/HeapDumpWebEndpoint.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/management/HeapDumpWebEndpoint.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint.web; +package org.springframework.boot.actuate.management; import java.io.Closeable; import java.io.File; @@ -36,11 +36,11 @@ import java.util.concurrent.locks.ReentrantLock; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.EndpointExposure; +import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; +import org.springframework.boot.actuate.endpoint.web.WebEndpointResponse; import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.boot.endpoint.Endpoint; -import org.springframework.boot.endpoint.EndpointExposure; -import org.springframework.boot.endpoint.ReadOperation; -import org.springframework.boot.endpoint.web.WebEndpointResponse; import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.Resource; import org.springframework.http.HttpStatus; diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/ThreadDumpEndpoint.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/management/ThreadDumpEndpoint.java similarity index 87% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/ThreadDumpEndpoint.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/management/ThreadDumpEndpoint.java index 10692ea6bd..913ede27f3 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/ThreadDumpEndpoint.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/management/ThreadDumpEndpoint.java @@ -14,21 +14,22 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.management; import java.lang.management.ManagementFactory; import java.lang.management.ThreadInfo; import java.util.Arrays; import java.util.List; -import org.springframework.boot.endpoint.Endpoint; -import org.springframework.boot.endpoint.ReadOperation; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; /** * {@link Endpoint} to expose thread info. * * @author Dave Syer * @author Andy Wilkinson + * @since 2.0.0 */ @Endpoint(id = "threaddump") public class ThreadDumpEndpoint { diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/DataSourcePublicMetrics.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/DataSourcePublicMetrics.java similarity index 91% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/DataSourcePublicMetrics.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/DataSourcePublicMetrics.java index 29b03e9686..ade95e7975 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/DataSourcePublicMetrics.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/DataSourcePublicMetrics.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.metrics; import java.util.Collection; import java.util.HashMap; @@ -27,10 +27,9 @@ import javax.sql.DataSource; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.actuate.metrics.Metric; -import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadata; -import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvider; -import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProviders; +import org.springframework.boot.jdbc.metadata.DataSourcePoolMetadata; +import org.springframework.boot.jdbc.metadata.DataSourcePoolMetadataProvider; +import org.springframework.boot.jdbc.metadata.DataSourcePoolMetadataProviders; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Primary; @@ -38,7 +37,7 @@ import org.springframework.context.annotation.Primary; * A {@link PublicMetrics} implementation that provides data source usage statistics. * * @author Stephane Nicoll - * @since 1.2.0 + * @since 2.0.0 */ public class DataSourcePublicMetrics implements PublicMetrics { diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/MetricsEndpoint.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/MetricsEndpoint.java similarity index 91% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/MetricsEndpoint.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/MetricsEndpoint.java index 0631679715..143fb2b571 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/MetricsEndpoint.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/MetricsEndpoint.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.metrics; import java.util.ArrayList; import java.util.Collection; @@ -25,10 +25,9 @@ import java.util.Map; import java.util.function.Predicate; import java.util.regex.Pattern; -import org.springframework.boot.actuate.metrics.Metric; -import org.springframework.boot.endpoint.Endpoint; -import org.springframework.boot.endpoint.ReadOperation; -import org.springframework.boot.endpoint.Selector; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; +import org.springframework.boot.actuate.endpoint.annotation.Selector; import org.springframework.core.annotation.AnnotationAwareOrderComparator; import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -37,6 +36,7 @@ import org.springframework.util.StringUtils; * {@link Endpoint} to expose a collection of {@link PublicMetrics}. * * @author Dave Syer + * @since 2.0.0 */ @Endpoint(id = "metrics") public class MetricsEndpoint { diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/PublicMetrics.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/PublicMetrics.java similarity index 92% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/PublicMetrics.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/PublicMetrics.java index dca14978c3..1b90d4a273 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/PublicMetrics.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/PublicMetrics.java @@ -14,12 +14,10 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.metrics; import java.util.Collection; -import org.springframework.boot.actuate.metrics.Metric; - /** * Interface to expose specific {@link Metric}s via a {@link MetricsEndpoint}. * Implementations should take care that the metrics they provide have unique names in the @@ -27,6 +25,7 @@ import org.springframework.boot.actuate.metrics.Metric; * or across a distributed system. * * @author Dave Syer + * @since 2.0.0 * @see SystemPublicMetrics SystemPublicMetrics for an example implementation */ @FunctionalInterface diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/SystemPublicMetrics.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/SystemPublicMetrics.java similarity index 98% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/SystemPublicMetrics.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/SystemPublicMetrics.java index 6a0a97ecb4..848915f7e6 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/SystemPublicMetrics.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/SystemPublicMetrics.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.metrics; import java.lang.management.ClassLoadingMXBean; import java.lang.management.GarbageCollectorMXBean; @@ -25,7 +25,6 @@ import java.util.Collection; import java.util.LinkedHashSet; import java.util.List; -import org.springframework.boot.actuate.metrics.Metric; import org.springframework.core.Ordered; import org.springframework.util.StringUtils; @@ -36,7 +35,7 @@ import org.springframework.util.StringUtils; * @author Christian Dupuis * @author Stephane Nicoll * @author Johannes Edmeier - * @since 1.2.0 + * @since 2.0.0 */ public class SystemPublicMetrics implements PublicMetrics, Ordered { diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/TomcatPublicMetrics.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/TomcatPublicMetrics.java similarity index 96% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/TomcatPublicMetrics.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/TomcatPublicMetrics.java index a27af6ef6d..9c9b1264be 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/TomcatPublicMetrics.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/TomcatPublicMetrics.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.metrics; import java.util.ArrayList; import java.util.Collection; @@ -27,7 +27,6 @@ import org.apache.catalina.Manager; import org.apache.catalina.session.ManagerBase; import org.springframework.beans.BeansException; -import org.springframework.boot.actuate.metrics.Metric; import org.springframework.boot.web.embedded.tomcat.TomcatWebServer; import org.springframework.boot.web.server.WebServer; import org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext; @@ -39,7 +38,7 @@ import org.springframework.context.ApplicationContextAware; * * @author Johannes Edmeier * @author Phillip Webb - * @since 1.2.0 + * @since 2.0.0 */ public class TomcatPublicMetrics implements PublicMetrics, ApplicationContextAware { diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/MetricReaderPublicMetrics.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/reader/MetricReaderPublicMetrics.java similarity index 91% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/MetricReaderPublicMetrics.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/reader/MetricReaderPublicMetrics.java index b68784d1c8..7013887110 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/MetricReaderPublicMetrics.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/reader/MetricReaderPublicMetrics.java @@ -14,14 +14,14 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.metrics.reader; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.springframework.boot.actuate.metrics.Metric; -import org.springframework.boot.actuate.metrics.reader.MetricReader; +import org.springframework.boot.actuate.metrics.PublicMetrics; import org.springframework.util.Assert; /** @@ -31,6 +31,7 @@ import org.springframework.util.Assert; * @author Christian Dupuis * @author Stephane Nicoll * @author Phillip Webb + * @since 2.0.0 */ public class MetricReaderPublicMetrics implements PublicMetrics { diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/MetricsEndpointMetricReader.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/reader/MetricsEndpointMetricReader.java similarity index 93% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/MetricsEndpointMetricReader.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/reader/MetricsEndpointMetricReader.java index 381956290f..b9a3ffda99 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/MetricsEndpointMetricReader.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/reader/MetricsEndpointMetricReader.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.metrics.reader; import java.util.ArrayList; import java.util.Date; @@ -23,7 +23,7 @@ import java.util.Map; import java.util.Map.Entry; import org.springframework.boot.actuate.metrics.Metric; -import org.springframework.boot.actuate.metrics.reader.MetricReader; +import org.springframework.boot.actuate.metrics.MetricsEndpoint; /** * {@link MetricReader} that pulls all current values out of the {@link MetricsEndpoint}. @@ -31,7 +31,7 @@ import org.springframework.boot.actuate.metrics.reader.MetricReader; * recent, and they all come out with the default (current time). * * @author Dave Syer - * @since 1.3.0 + * @since 2.0.0 */ public class MetricsEndpointMetricReader implements MetricReader { diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/RichGaugeReaderPublicMetrics.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/rich/RichGaugeReaderPublicMetrics.java similarity index 91% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/RichGaugeReaderPublicMetrics.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/rich/RichGaugeReaderPublicMetrics.java index 970cec57d0..54fef7fdc9 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/RichGaugeReaderPublicMetrics.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/rich/RichGaugeReaderPublicMetrics.java @@ -14,22 +14,21 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.metrics.rich; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.springframework.boot.actuate.metrics.Metric; -import org.springframework.boot.actuate.metrics.rich.RichGauge; -import org.springframework.boot.actuate.metrics.rich.RichGaugeReader; +import org.springframework.boot.actuate.metrics.PublicMetrics; import org.springframework.util.Assert; /** * {@link PublicMetrics} exposed from a {@link RichGaugeReader}. * * @author Johannes Edmeier - * @since 1.2 + * @since 2.0.0 */ public class RichGaugeReaderPublicMetrics implements PublicMetrics { diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/MongoHealthIndicator.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/mongo/MongoHealthIndicator.java similarity index 84% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/MongoHealthIndicator.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/mongo/MongoHealthIndicator.java index 21c79841b9..c5ec7c99a4 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/MongoHealthIndicator.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/mongo/MongoHealthIndicator.java @@ -14,10 +14,13 @@ * limitations under the License. */ -package org.springframework.boot.actuate.health; +package org.springframework.boot.actuate.mongo; import org.bson.Document; +import org.springframework.boot.actuate.health.AbstractHealthIndicator; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.HealthIndicator; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.util.Assert; @@ -26,7 +29,7 @@ import org.springframework.util.Assert; * Mongo data stores. * * @author Christian Dupuis - * @since 1.1.0 + * @since 2.0.0 */ public class MongoHealthIndicator extends AbstractHealthIndicator { diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/Neo4jHealthIndicator.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/neo4j/Neo4jHealthIndicator.java similarity index 87% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/Neo4jHealthIndicator.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/neo4j/Neo4jHealthIndicator.java index e926b19b98..43fb70f32d 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/Neo4jHealthIndicator.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/neo4j/Neo4jHealthIndicator.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.health; +package org.springframework.boot.actuate.neo4j; import java.util.Collections; @@ -22,6 +22,10 @@ import org.neo4j.ogm.model.Result; import org.neo4j.ogm.session.Session; import org.neo4j.ogm.session.SessionFactory; +import org.springframework.boot.actuate.health.AbstractHealthIndicator; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.HealthIndicator; + /** * {@link HealthIndicator} that tests the status of a Neo4j by executing a Cypher * statement. diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/RedisHealthIndicator.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/redis/RedisHealthIndicator.java similarity index 88% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/RedisHealthIndicator.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/redis/RedisHealthIndicator.java index 85f5c0c700..00c2f0e124 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/RedisHealthIndicator.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/redis/RedisHealthIndicator.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2016 the original author or authors. + * Copyright 2012-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,10 +14,13 @@ * limitations under the License. */ -package org.springframework.boot.actuate.health; +package org.springframework.boot.actuate.redis; import java.util.Properties; +import org.springframework.boot.actuate.health.AbstractHealthIndicator; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.HealthIndicator; import org.springframework.data.redis.connection.ClusterInfo; import org.springframework.data.redis.connection.RedisClusterConnection; import org.springframework.data.redis.connection.RedisConnection; @@ -31,7 +34,7 @@ import org.springframework.util.Assert; * * @author Christian Dupuis * @author Richard Santana - * @since 1.1.0 + * @since 2.0.0 */ public class RedisHealthIndicator extends AbstractHealthIndicator { diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/RedisReactiveHealthIndicator.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicator.java similarity index 72% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/RedisReactiveHealthIndicator.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicator.java index 317aa88f4c..79dd638fab 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/RedisReactiveHealthIndicator.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicator.java @@ -14,10 +14,15 @@ * limitations under the License. */ -package org.springframework.boot.actuate.health; +package org.springframework.boot.actuate.redis; + +import java.util.Properties; import reactor.core.publisher.Mono; +import org.springframework.boot.actuate.health.AbstractReactiveHealthIndicator; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.ReactiveHealthIndicator; import org.springframework.data.redis.connection.ReactiveRedisConnection; import org.springframework.data.redis.connection.ReactiveRedisConnectionFactory; @@ -41,12 +46,13 @@ public class RedisReactiveHealthIndicator extends AbstractReactiveHealthIndicato protected Mono doHealthCheck(Health.Builder builder) { ReactiveRedisConnection connection = this.connectionFactory .getReactiveConnection(); - return connection.serverCommands().info() - .map((info) -> builder.up() - .withDetail(RedisHealthIndicator.VERSION, - info.getProperty(RedisHealthIndicator.REDIS_VERSION)) - .build()) + return connection.serverCommands().info().map((info) -> up(builder, info)) .doFinally((signal) -> connection.close()); } + private Health up(Health.Builder builder, Properties info) { + return builder.up().withDetail(RedisHealthIndicator.VERSION, + info.getProperty(RedisHealthIndicator.REDIS_VERSION)).build(); + } + } diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/SolrHealthIndicator.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/solr/SolrHealthIndicator.java similarity index 83% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/SolrHealthIndicator.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/solr/SolrHealthIndicator.java index 5e2e418706..bf22abf500 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/SolrHealthIndicator.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/solr/SolrHealthIndicator.java @@ -14,19 +14,24 @@ * limitations under the License. */ -package org.springframework.boot.actuate.health; +package org.springframework.boot.actuate.solr; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.request.CoreAdminRequest; import org.apache.solr.client.solrj.response.CoreAdminResponse; import org.apache.solr.common.params.CoreAdminParams; +import org.springframework.boot.actuate.health.AbstractHealthIndicator; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.HealthIndicator; +import org.springframework.boot.actuate.health.Status; + /** * {@link HealthIndicator} for Apache Solr. * * @author Andy Wilkinson * @author Stephane Nicoll - * @since 1.1.0 + * @since 2.0.0 */ public class SolrHealthIndicator extends AbstractHealthIndicator { diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/DiskSpaceHealthIndicator.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/system/DiskSpaceHealthIndicator.java similarity index 60% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/DiskSpaceHealthIndicator.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/system/DiskSpaceHealthIndicator.java index 2c25bb7b9f..7e765c14c0 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/DiskSpaceHealthIndicator.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/system/DiskSpaceHealthIndicator.java @@ -14,52 +14,60 @@ * limitations under the License. */ -package org.springframework.boot.actuate.health; +package org.springframework.boot.actuate.system; import java.io.File; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.boot.actuate.health.AbstractHealthIndicator; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.HealthIndicator; +import org.springframework.boot.actuate.health.Status; + /** * A {@link HealthIndicator} that checks available disk space and reports a status of * {@link Status#DOWN} when it drops below a configurable threshold. * * @author Mattias Severson * @author Andy Wilkinson - * @since 1.2.0 + * @since 2.0.0 */ public class DiskSpaceHealthIndicator extends AbstractHealthIndicator { private static final Log logger = LogFactory.getLog(DiskSpaceHealthIndicator.class); - private final DiskSpaceHealthIndicatorProperties properties; + private final File path; + + private final long threshold; /** - * Create a new {@code DiskSpaceHealthIndicator}. - * @param properties the disk space properties + * Create a new {@code DiskSpaceHealthIndicator} instance. + * @param path the Path used to compute the available disk space + * @param threshold the minimum disk space that should be available (in bytes) */ - public DiskSpaceHealthIndicator(DiskSpaceHealthIndicatorProperties properties) { - this.properties = properties; + public DiskSpaceHealthIndicator(File path, long threshold) { + this.path = path; + this.threshold = threshold; } @Override protected void doHealthCheck(Health.Builder builder) throws Exception { - File path = this.properties.getPath(); - long diskFreeInBytes = path.getUsableSpace(); - if (diskFreeInBytes >= this.properties.getThreshold()) { + long diskFreeInBytes = this.path.getUsableSpace(); + if (diskFreeInBytes >= this.threshold) { builder.up(); } else { logger.warn(String.format( "Free disk space below threshold. " + "Available: %d bytes (threshold: %d bytes)", - diskFreeInBytes, this.properties.getThreshold())); + diskFreeInBytes, this.threshold)); builder.down(); } - builder.withDetail("total", path.getTotalSpace()) + builder.withDetail("total", this.path.getTotalSpace()) .withDetail("free", diskFreeInBytes) - .withDetail("threshold", this.properties.getThreshold()); + .withDetail("threshold", this.threshold); } } diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/TraceEndpoint.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/trace/TraceEndpoint.java similarity index 85% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/TraceEndpoint.java rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/trace/TraceEndpoint.java index d38298cb3b..19c9e08f1f 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/TraceEndpoint.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/trace/TraceEndpoint.java @@ -14,20 +14,19 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.trace; import java.util.List; -import org.springframework.boot.actuate.trace.Trace; -import org.springframework.boot.actuate.trace.TraceRepository; -import org.springframework.boot.endpoint.Endpoint; -import org.springframework.boot.endpoint.ReadOperation; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; import org.springframework.util.Assert; /** * {@link Endpoint} to expose {@link Trace} information. * * @author Dave Syer + * @since 2.0.0 */ @Endpoint(id = "trace") public class TraceEndpoint { diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/trace/WebRequestTraceFilter.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/trace/WebRequestTraceFilter.java index f8066711a7..06a7e633c6 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/trace/WebRequestTraceFilter.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/trace/WebRequestTraceFilter.java @@ -39,7 +39,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.boot.actuate.trace.TraceProperties.Include; -import org.springframework.boot.autoconfigure.web.servlet.error.ErrorAttributes; +import org.springframework.boot.web.servlet.error.ErrorAttributes; import org.springframework.core.Ordered; import org.springframework.http.HttpStatus; import org.springframework.web.context.request.ServletWebRequest; diff --git a/spring-boot-actuator/src/main/resources/META-INF/spring.factories b/spring-boot-actuator/src/main/resources/META-INF/spring.factories deleted file mode 100644 index f5f1116003..0000000000 --- a/spring-boot-actuator/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1,27 +0,0 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -org.springframework.boot.actuate.autoconfigure.ManagementContextAutoConfiguration,\ -org.springframework.boot.actuate.autoconfigure.audit.AuditAutoConfiguration,\ -org.springframework.boot.actuate.autoconfigure.cache.CacheStatisticsAutoConfiguration,\ -org.springframework.boot.actuate.cloudfoundry.CloudFoundryActuatorAutoConfiguration,\ -org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration,\ -org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure.EndpointInfrastructureAutoConfiguration,\ -org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure.ServletEndpointAutoConfiguration,\ -org.springframework.boot.actuate.autoconfigure.endpoint.jmx.JmxEndpointAutoConfiguration,\ -org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration,\ -org.springframework.boot.actuate.autoconfigure.info.InfoContributorAutoConfiguration,\ -org.springframework.boot.actuate.autoconfigure.metrics.MetricFilterAutoConfiguration,\ -org.springframework.boot.actuate.autoconfigure.metrics.MetricRepositoryAutoConfiguration,\ -org.springframework.boot.actuate.autoconfigure.metrics.MetricsDropwizardAutoConfiguration,\ -org.springframework.boot.actuate.autoconfigure.metrics.MetricsChannelAutoConfiguration,\ -org.springframework.boot.actuate.autoconfigure.metrics.MetricExportAutoConfiguration,\ -org.springframework.boot.actuate.autoconfigure.metrics.PublicMetricsAutoConfiguration,\ -org.springframework.boot.actuate.autoconfigure.security.ManagementWebSecurityAutoConfiguration,\ -org.springframework.boot.actuate.autoconfigure.trace.TraceRepositoryAutoConfiguration,\ -org.springframework.boot.actuate.autoconfigure.trace.TraceWebFilterAutoConfiguration - -org.springframework.boot.actuate.autoconfigure.ManagementContextConfiguration=\ -org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure.ReactiveEndpointChildManagementContextConfiguration,\ -org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure.ServletEndpointChildManagementContextConfiguration,\ -org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure.WebEndpointInfrastructureManagementContextConfiguration,\ -org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointManagementContextConfiguration,\ -org.springframework.boot.actuate.autoconfigure.jolokia.JolokiaManagementContextConfiguration diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/AdhocTestSuite.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/AdhocTestSuite.java index 8483bad4e7..32046c5a40 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/AdhocTestSuite.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/AdhocTestSuite.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2015 the original author or authors. + * Copyright 2012-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,16 +21,13 @@ import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; -import org.springframework.boot.actuate.endpoint.FlywayEndpointTests; -import org.springframework.boot.actuate.health.DataSourceHealthIndicatorTests; - /** * A test suite for probing weird ordering problems in the tests. * * @author Dave Syer */ @RunWith(Suite.class) -@SuiteClasses({ DataSourceHealthIndicatorTests.class, FlywayEndpointTests.class }) +@SuiteClasses({}) @Ignore public class AdhocTestSuite { diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/amqp/RabbitHealthIndicatorTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/amqp/RabbitHealthIndicatorTests.java new file mode 100644 index 0000000000..6977eacf75 --- /dev/null +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/amqp/RabbitHealthIndicatorTests.java @@ -0,0 +1,90 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.amqp; + +import java.util.Collections; + +import com.rabbitmq.client.Channel; +import com.rabbitmq.client.Connection; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +import org.springframework.amqp.rabbit.core.ChannelCallback; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.Status; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; + +/** + * Tests for {@link RabbitHealthIndicator}. + * + * @author Phillip Webb + */ +public class RabbitHealthIndicatorTests { + + @Rule + public ExpectedException thrown = ExpectedException.none(); + + @Mock + private RabbitTemplate rabbitTemplate; + + @Mock + private Channel channel; + + @Before + public void setup() { + MockitoAnnotations.initMocks(this); + given(this.rabbitTemplate.execute(any())).willAnswer((invocation) -> { + ChannelCallback callback = invocation.getArgument(0); + return callback.doInRabbit(this.channel); + }); + } + + @Test + public void createWhenRabbitTemplateIsNullShouldThrowException() throws Exception { + this.thrown.expect(IllegalArgumentException.class); + this.thrown.expectMessage("RabbitTemplate must not be null"); + new RabbitHealthIndicator(null); + } + + @Test + public void healthWhenConnectionSucceedsShouldReturnUpWithVersion() throws Exception { + Connection connection = mock(Connection.class); + given(this.channel.getConnection()).willReturn(connection); + given(connection.getServerProperties()) + .willReturn(Collections.singletonMap("version", "123")); + Health health = new RabbitHealthIndicator(this.rabbitTemplate).health(); + assertThat(health.getStatus()).isEqualTo(Status.UP); + assertThat(health.getDetails()).containsEntry("version", "123"); + } + + @Test + public void healthWhenConnectionFailsShouldReturnDown() throws Exception { + given(this.channel.getConnection()).willThrow(new RuntimeException()); + Health health = new RabbitHealthIndicator(this.rabbitTemplate).health(); + assertThat(health.getStatus()).isEqualTo(Status.DOWN); + } + +} diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/AuditEventsEndpointTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/audit/AuditEventsEndpointTests.java similarity index 92% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/AuditEventsEndpointTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/audit/AuditEventsEndpointTests.java index 05c3ec1d2d..852c16aad7 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/AuditEventsEndpointTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/audit/AuditEventsEndpointTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.audit; import java.util.Collections; import java.util.Date; @@ -22,9 +22,6 @@ import java.util.List; import org.junit.Test; -import org.springframework.boot.actuate.audit.AuditEvent; -import org.springframework.boot.actuate.audit.AuditEventRepository; - import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/AuditEventsEndpointWebIntegrationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/audit/AuditEventsEndpointWebIntegrationTests.java similarity index 90% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/AuditEventsEndpointWebIntegrationTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/audit/AuditEventsEndpointWebIntegrationTests.java index 1d3d767793..0a8d554d3b 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/AuditEventsEndpointWebIntegrationTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/audit/AuditEventsEndpointWebIntegrationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint.web; +package org.springframework.boot.actuate.audit; import java.time.Instant; import java.util.Collections; @@ -24,10 +24,7 @@ import net.minidev.json.JSONArray; import org.junit.Test; import org.junit.runner.RunWith; -import org.springframework.boot.actuate.audit.AuditEvent; -import org.springframework.boot.actuate.audit.AuditEventRepository; -import org.springframework.boot.actuate.audit.InMemoryAuditEventRepository; -import org.springframework.boot.actuate.endpoint.AuditEventsEndpoint; +import org.springframework.boot.actuate.endpoint.web.test.WebEndpointRunners; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.test.web.reactive.server.WebTestClient; @@ -39,7 +36,7 @@ import org.springframework.test.web.reactive.server.WebTestClient; * @author Vedran Pavic * @author Andy Wilkinson */ -@RunWith(WebEndpointsRunner.class) +@RunWith(WebEndpointRunners.class) public class AuditEventsEndpointWebIntegrationTests { private static WebTestClient client; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/jmx/AuditEventsJmxEndpointExtensionTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/audit/AuditEventsJmxEndpointExtensionTests.java similarity index 89% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/jmx/AuditEventsJmxEndpointExtensionTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/audit/AuditEventsJmxEndpointExtensionTests.java index 5874299c1a..33c9b3f583 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/jmx/AuditEventsJmxEndpointExtensionTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/audit/AuditEventsJmxEndpointExtensionTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint.jmx; +package org.springframework.boot.actuate.audit; import java.util.Collections; import java.util.Date; @@ -22,10 +22,6 @@ import java.util.List; import org.junit.Test; -import org.springframework.boot.actuate.audit.AuditEvent; -import org.springframework.boot.actuate.audit.AuditEventRepository; -import org.springframework.boot.actuate.endpoint.AuditEventsEndpoint; - import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/ManagementEndpointPathResolverTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/ManagementEndpointPathResolverTests.java deleted file mode 100644 index 2e9d497a7a..0000000000 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/ManagementEndpointPathResolverTests.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2012-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.actuate.autoconfigure.endpoint; - -import org.junit.Before; -import org.junit.Test; - -import org.springframework.boot.actuate.autoconfigure.web.ManagementServerProperties; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Tests for {@link ManagementEndpointPathResolver}. - * - * @author Madhura Bhave - */ -public class ManagementEndpointPathResolverTests { - - private ManagementEndpointPathResolver resolver; - - @Before - public void setUp() throws Exception { - ManagementServerProperties properties = new ManagementServerProperties(); - properties.setContextPath("/test"); - this.resolver = new ManagementEndpointPathResolver(properties); - - } - - @Test - public void resolveShouldReturnPathBasedOnContextPath() throws Exception { - String path = this.resolver.resolvePath("my-id"); - assertThat(path.equals("/test/my-id")); - } - -} diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx/JmxEndpointAutoConfigurationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx/JmxEndpointAutoConfigurationTests.java deleted file mode 100644 index 1db7a43b59..0000000000 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx/JmxEndpointAutoConfigurationTests.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright 2012-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.actuate.autoconfigure.endpoint.jmx; - -import org.junit.Test; - -import org.springframework.boot.actuate.audit.AuditEventRepository; -import org.springframework.boot.actuate.endpoint.AuditEventsEndpoint; -import org.springframework.boot.actuate.endpoint.jmx.AuditEventsJmxEndpointExtension; -import org.springframework.boot.autoconfigure.AutoConfigurations; -import org.springframework.boot.test.context.runner.ApplicationContextRunner; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; - -/** - * Tests for {@link JmxEndpointAutoConfiguration}. - * - * @author Andy Wilkinson - */ -public class JmxEndpointAutoConfigurationTests { - - @Test - public void auditEventsJmxEndpointExtensionIsAutoConfigured() { - jmxExtensionIsAutoConfigured(AuditEventsJmxEndpointExtension.class, - AuditEventsEndpointConfiguration.class); - } - - @Test - public void auditEventsJmxEndpointExtensionCanBeDisabled() { - jmxExtensionCanBeDisabled(AuditEventsJmxEndpointExtension.class, "auditevents", - AuditEventsEndpointConfiguration.class); - } - - private void jmxExtensionIsAutoConfigured(Class jmxExtension, Class... config) { - contextRunner().withUserConfiguration(config) - .run((context) -> assertThat(context).hasSingleBean(jmxExtension)); - } - - private void jmxExtensionCanBeDisabled(Class jmxExtension, String id, - Class... config) { - contextRunner().withPropertyValues("endpoints." + id + ".enabled=false") - .run((context) -> assertThat(context).doesNotHaveBean(jmxExtension)); - } - - private ApplicationContextRunner contextRunner() { - return new ApplicationContextRunner().withConfiguration( - AutoConfigurations.of(JmxEndpointAutoConfiguration.class)); - } - - @Configuration - static class AuditEventsEndpointConfiguration { - - @Bean - public AuditEventsEndpoint auditEventsEndpoint() { - return new AuditEventsEndpoint(mock(AuditEventRepository.class)); - } - - } - -} diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/WebEndpointManagementContextConfigurationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/WebEndpointManagementContextConfigurationTests.java deleted file mode 100644 index 988dd3fa11..0000000000 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/WebEndpointManagementContextConfigurationTests.java +++ /dev/null @@ -1,279 +0,0 @@ -/* - * Copyright 2012-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.actuate.autoconfigure.endpoint.web; - -import java.util.Map; - -import org.junit.Test; - -import org.springframework.boot.actuate.audit.AuditEventRepository; -import org.springframework.boot.actuate.endpoint.AuditEventsEndpoint; -import org.springframework.boot.actuate.endpoint.HealthEndpoint; -import org.springframework.boot.actuate.endpoint.StatusEndpoint; -import org.springframework.boot.actuate.endpoint.web.HealthReactiveWebEndpointExtension; -import org.springframework.boot.actuate.endpoint.web.HealthWebEndpointExtension; -import org.springframework.boot.actuate.endpoint.web.HeapDumpWebEndpoint; -import org.springframework.boot.actuate.endpoint.web.LogFileWebEndpoint; -import org.springframework.boot.actuate.endpoint.web.StatusReactiveWebEndpointExtension; -import org.springframework.boot.actuate.endpoint.web.StatusWebEndpointExtension; -import org.springframework.boot.actuate.health.Health; -import org.springframework.boot.actuate.health.HealthStatusHttpMapper; -import org.springframework.boot.autoconfigure.AutoConfigurations; -import org.springframework.boot.test.context.runner.ReactiveWebApplicationContextRunner; -import org.springframework.boot.test.context.runner.WebApplicationContextRunner; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.test.util.ReflectionTestUtils; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; - -/** - * Tests for {@link WebEndpointManagementContextConfiguration}. - * - * @author Andy Wilkinson - * @author Stephane Nicoll - */ -public class WebEndpointManagementContextConfigurationTests { - - @Test - public void heapDumpWebEndpointIsAutoConfigured() { - beanIsAutoConfigured(HeapDumpWebEndpoint.class); - } - - @Test - public void heapDumpWebEndpointCanBeDisabled() { - beanIsNotAutoConfiguredWhenEndpointIsDisabled(HeapDumpWebEndpoint.class, - "heapdump"); - } - - @Test - public void healthWebEndpointExtensionIsAutoConfigured() { - beanIsAutoConfigured(HealthWebEndpointExtension.class, - HealthEndpointConfiguration.class); - } - - @Test - public void healthStatusMappingCanBeCustomized() { - WebApplicationContextRunner contextRunner = webContextRunner() - .withPropertyValues("management.health.status.http-mapping.CUSTOM=500") - .withUserConfiguration(HealthEndpointConfiguration.class); - contextRunner.run((context) -> { - HealthWebEndpointExtension extension = context - .getBean(HealthWebEndpointExtension.class); - Map statusMappings = getStatusMapping(extension); - assertThat(statusMappings).containsEntry("DOWN", 503); - assertThat(statusMappings).containsEntry("OUT_OF_SERVICE", 503); - assertThat(statusMappings).containsEntry("CUSTOM", 500); - }); - } - - @Test - public void healthWebEndpointExtensionCanBeDisabled() { - beanIsNotAutoConfiguredWhenEndpointIsDisabled(HealthWebEndpointExtension.class, - "health", HealthEndpointConfiguration.class); - } - - @Test - public void statusWebEndpointExtensionIsAutoConfigured() { - beanIsAutoConfigured(StatusWebEndpointExtension.class, - StatusEndpointConfiguration.class); - } - - @Test - public void statusMappingCanBeCustomized() { - WebApplicationContextRunner contextRunner = webContextRunner() - .withPropertyValues("management.health.status.http-mapping.CUSTOM=500") - .withUserConfiguration(StatusEndpointConfiguration.class); - contextRunner.run((context) -> { - StatusWebEndpointExtension extension = context - .getBean(StatusWebEndpointExtension.class); - Map statusMappings = getStatusMapping(extension); - assertThat(statusMappings).containsEntry("DOWN", 503); - assertThat(statusMappings).containsEntry("OUT_OF_SERVICE", 503); - assertThat(statusMappings).containsEntry("CUSTOM", 500); - }); - } - - @Test - public void statusWebEndpointExtensionCanBeDisabled() { - beanIsNotAutoConfiguredWhenEndpointIsDisabled(StatusWebEndpointExtension.class, - "status", StatusEndpointConfiguration.class); - } - - @Test - public void reactiveHealthWebEndpointExtensionIsAutoConfigured() { - reactiveWebContextRunner(HealthEndpointConfiguration.class).run((context) -> { - assertThat(context).hasSingleBean(HealthReactiveWebEndpointExtension.class); - assertThat(context).doesNotHaveBean(HealthWebEndpointExtension.class); - }); - - } - - @Test - public void reactiveHealthStatusMappingCanBeCustomized() { - reactiveWebContextRunner(HealthEndpointConfiguration.class) - .withPropertyValues("management.health.status.http-mapping.CUSTOM=500") - .run((context) -> { - HealthReactiveWebEndpointExtension extension = context - .getBean(HealthReactiveWebEndpointExtension.class); - Map statusMappings = getStatusMapping(extension); - assertThat(statusMappings).containsEntry("DOWN", 503); - assertThat(statusMappings).containsEntry("OUT_OF_SERVICE", 503); - assertThat(statusMappings).containsEntry("CUSTOM", 500); - }); - } - - @Test - public void reactiveHealthWebEndpointExtensionCanBeDisabled() { - reactiveWebContextRunner(HealthEndpointConfiguration.class) - .withPropertyValues("endpoints.health.enabled=false").run((context) -> { - assertThat(context) - .doesNotHaveBean(HealthReactiveWebEndpointExtension.class); - assertThat(context).doesNotHaveBean(HealthWebEndpointExtension.class); - }); - - } - - @Test - public void reactiveStatusWebEndpointExtensionIsAutoConfigured() { - reactiveWebContextRunner(StatusEndpointConfiguration.class).run((context) -> { - assertThat(context).hasSingleBean(StatusReactiveWebEndpointExtension.class); - assertThat(context).doesNotHaveBean(StatusWebEndpointExtension.class); - }); - } - - @Test - public void reactiveStatusMappingCanBeCustomized() { - reactiveWebContextRunner(StatusEndpointConfiguration.class) - .withPropertyValues("management.health.status.http-mapping.CUSTOM=500") - .run((context) -> { - StatusReactiveWebEndpointExtension extension = context - .getBean(StatusReactiveWebEndpointExtension.class); - Map statusMappings = getStatusMapping(extension); - assertThat(statusMappings).containsEntry("DOWN", 503); - assertThat(statusMappings).containsEntry("OUT_OF_SERVICE", 503); - assertThat(statusMappings).containsEntry("CUSTOM", 500); - }); - } - - @Test - public void reactiveStatusWebEndpointExtensionCanBeDisabled() { - reactiveWebContextRunner(StatusEndpointConfiguration.class) - .withPropertyValues("endpoints.status.enabled=false").run((context) -> { - assertThat(context) - .doesNotHaveBean(StatusReactiveWebEndpointExtension.class); - assertThat(context).doesNotHaveBean(StatusWebEndpointExtension.class); - }); - } - - @Test - public void logFileWebEndpointIsAutoConfiguredWhenLoggingFileIsSet() { - webContextRunner().withPropertyValues("logging.file:test.log").run( - (context) -> assertThat(context.getBeansOfType(LogFileWebEndpoint.class)) - .hasSize(1)); - } - - @Test - public void logFileWebEndpointIsAutoConfiguredWhenLoggingPathIsSet() { - webContextRunner().withPropertyValues("logging.path:test/logs").run( - (context) -> assertThat(context.getBeansOfType(LogFileWebEndpoint.class)) - .hasSize(1)); - } - - @Test - public void logFileWebEndpointIsAutoConfiguredWhenExternalFileIsSet() { - webContextRunner() - .withPropertyValues("endpoints.logfile.external-file:external.log") - .run((context) -> assertThat( - context.getBeansOfType(LogFileWebEndpoint.class)).hasSize(1)); - } - - @Test - public void logFileWebEndpointCanBeDisabled() { - webContextRunner() - .withPropertyValues("logging.file:test.log", - "endpoints.logfile.enabled:false") - .run((context) -> assertThat(context) - .hasSingleBean(LogFileWebEndpoint.class)); - } - - private void beanIsAutoConfigured(Class beanType, Class... config) { - webContextRunner().withPropertyValues("endpoints.default.web.enabled:true") - .withUserConfiguration(config) - .run((context) -> assertThat(context).hasSingleBean(beanType)); - } - - private ReactiveWebApplicationContextRunner reactiveWebContextRunner( - Class... config) { - return reactiveWebContextRunner() - .withPropertyValues("endpoints.default.web.enabled:true") - .withUserConfiguration(config); - } - - private void beanIsNotAutoConfiguredWhenEndpointIsDisabled(Class webExtension, - String id, Class... config) { - webContextRunner().withPropertyValues("endpoints." + id + ".enabled=false") - .run((context) -> assertThat(context).doesNotHaveBean(webExtension)); - } - - private WebApplicationContextRunner webContextRunner() { - return new WebApplicationContextRunner().withConfiguration( - AutoConfigurations.of(WebEndpointManagementContextConfiguration.class)); - } - - private ReactiveWebApplicationContextRunner reactiveWebContextRunner() { - return new ReactiveWebApplicationContextRunner().withConfiguration( - AutoConfigurations.of(WebEndpointManagementContextConfiguration.class)); - } - - private Map getStatusMapping(Object extension) { - return ((HealthStatusHttpMapper) ReflectionTestUtils.getField(extension, - "statusHttpMapper")).getStatusMapping(); - } - - @Configuration - static class HealthEndpointConfiguration { - - @Bean - public HealthEndpoint healthEndpoint() { - return new HealthEndpoint(() -> Health.up().build()); - } - - } - - @Configuration - static class StatusEndpointConfiguration { - - @Bean - public StatusEndpoint statusEndpoint() { - return new StatusEndpoint(() -> Health.up().build()); - } - - } - - @Configuration - static class AuditEventsEndpointConfiguration { - - @Bean - public AuditEventsEndpoint auditEventsEndpoint() { - return new AuditEventsEndpoint(mock(AuditEventRepository.class)); - } - - } - -} diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorAutoConfigurationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorAutoConfigurationTests.java deleted file mode 100644 index 05bef5714e..0000000000 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorAutoConfigurationTests.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2012-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.actuate.autoconfigure.health; - -import org.junit.Test; - -import org.springframework.boot.actuate.health.ReactiveHealthIndicator; -import org.springframework.boot.actuate.health.RedisReactiveHealthIndicator; -import org.springframework.boot.autoconfigure.AutoConfigurations; -import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; -import org.springframework.boot.test.context.runner.ApplicationContextRunner; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Tests for {@link HealthIndicatorAutoConfiguration} that validates the outcome of - * combining reactive and non reactive health indicators. - * - * @author Stephane Nicoll - */ -public class HealthIndicatorAutoConfigurationTests { - - public final ApplicationContextRunner contextRunner = new ApplicationContextRunner() - .withConfiguration( - AutoConfigurations.of(HealthIndicatorAutoConfiguration.class)); - - @Test - public void reactiveRedisTakePrecedence() { - this.contextRunner - .withConfiguration(AutoConfigurations.of(RedisAutoConfiguration.class)) - .run((context) -> { - assertThat(context).hasSingleBean(ReactiveHealthIndicator.class); - assertThat(context).getBean("redisHealthIndicator") - .isInstanceOf(RedisReactiveHealthIndicator.class); - }); - } - -} diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorsConfigurationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorsConfigurationTests.java deleted file mode 100644 index c5b396f02e..0000000000 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorsConfigurationTests.java +++ /dev/null @@ -1,519 +0,0 @@ -/* - * Copyright 2012-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.actuate.autoconfigure.health; - -import java.util.Map; - -import javax.sql.DataSource; - -import io.searchbox.client.JestClient; -import org.assertj.core.api.Condition; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.neo4j.ogm.session.SessionFactory; - -import org.springframework.boot.actuate.health.ApplicationHealthIndicator; -import org.springframework.boot.actuate.health.CassandraHealthIndicator; -import org.springframework.boot.actuate.health.CompositeHealthIndicator; -import org.springframework.boot.actuate.health.CouchbaseHealthIndicator; -import org.springframework.boot.actuate.health.DataSourceHealthIndicator; -import org.springframework.boot.actuate.health.DiskSpaceHealthIndicator; -import org.springframework.boot.actuate.health.ElasticsearchHealthIndicator; -import org.springframework.boot.actuate.health.ElasticsearchJestHealthIndicator; -import org.springframework.boot.actuate.health.Health; -import org.springframework.boot.actuate.health.HealthIndicator; -import org.springframework.boot.actuate.health.JmsHealthIndicator; -import org.springframework.boot.actuate.health.LdapHealthIndicator; -import org.springframework.boot.actuate.health.MailHealthIndicator; -import org.springframework.boot.actuate.health.MongoHealthIndicator; -import org.springframework.boot.actuate.health.Neo4jHealthIndicator; -import org.springframework.boot.actuate.health.RabbitHealthIndicator; -import org.springframework.boot.actuate.health.RedisHealthIndicator; -import org.springframework.boot.actuate.health.SolrHealthIndicator; -import org.springframework.boot.autoconfigure.AutoConfigurations; -import org.springframework.boot.autoconfigure.AutoConfigureBefore; -import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration; -import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration; -import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration; -import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; -import org.springframework.boot.autoconfigure.elasticsearch.jest.JestAutoConfiguration; -import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder; -import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration; -import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvidersConfiguration; -import org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration; -import org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration; -import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration; -import org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.boot.test.context.assertj.AssertableApplicationContext; -import org.springframework.boot.test.context.runner.ApplicationContextRunner; -import org.springframework.boot.test.context.runner.ContextConsumer; -import org.springframework.boot.testsupport.runner.classpath.ClassPathExclusions; -import org.springframework.boot.testsupport.runner.classpath.ModifiedClassPathRunner; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.cassandra.core.CassandraOperations; -import org.springframework.data.couchbase.core.CouchbaseOperations; -import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; -import org.springframework.ldap.core.LdapOperations; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; - -/** - * Tests for {@link HealthIndicatorsConfiguration}. - * - * @author Christian Dupuis - * @author Stephane Nicoll - * @author Andy Wilkinson - * @author Eddú Meléndez - * @author Eric Spiegelberg - */ -@RunWith(ModifiedClassPathRunner.class) -@ClassPathExclusions({ "reactor-core*.jar", "lettuce-core*.jar" }) -public class HealthIndicatorsConfigurationTests { - - public final ApplicationContextRunner contextRunner = new ApplicationContextRunner() - .withConfiguration( - AutoConfigurations.of(HealthIndicatorAutoConfiguration.class)); - - @Test - public void defaultHealthIndicator() { - this.contextRunner.withPropertyValues("management.health.diskspace.enabled:false") - .run(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); - } - - @Test - public void defaultHealthIndicatorsDisabled() { - this.contextRunner.withPropertyValues("management.health.defaults.enabled:false") - .run(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); - } - - @Test - public void defaultHealthIndicatorsDisabledWithCustomOne() { - this.contextRunner.withUserConfiguration(CustomHealthIndicator.class) - .withPropertyValues("management.health.defaults.enabled:false") - .run((context) -> { - Map beans = context - .getBeansOfType(HealthIndicator.class); - assertThat(beans).hasSize(1); - assertThat(context.getBean("customHealthIndicator")) - .isSameAs(beans.values().iterator().next()); - }); - } - - @Test - public void defaultHealthIndicatorsDisabledButOne() { - this.contextRunner - .withPropertyValues("management.health.defaults.enabled:false", - "management.health.diskspace.enabled:true") - .run(hasSingleHealthIndicator(DiskSpaceHealthIndicator.class)); - } - - @Test - public void redisHealthIndicator() { - this.contextRunner - .withConfiguration(AutoConfigurations.of(RedisAutoConfiguration.class)) - .withPropertyValues("management.health.diskspace.enabled:false") - .run(hasSingleHealthIndicator(RedisHealthIndicator.class)); - } - - @Test - public void notRedisHealthIndicator() { - this.contextRunner - .withConfiguration(AutoConfigurations.of(RedisAutoConfiguration.class)) - .withPropertyValues("management.health.redis.enabled:false", - "management.health.diskspace.enabled:false") - .run(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); - } - - @Test - public void mongoHealthIndicator() { - this.contextRunner - .withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class, - MongoDataAutoConfiguration.class)) - .withPropertyValues("management.health.diskspace.enabled:false") - .run(hasSingleHealthIndicator(MongoHealthIndicator.class)); - } - - @Test - public void notMongoHealthIndicator() { - this.contextRunner - .withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class, - MongoDataAutoConfiguration.class)) - .withPropertyValues("management.health.mongo.enabled:false", - "management.health.diskspace.enabled:false") - .run(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); - } - - @Test - public void combinedHealthIndicator() { - this.contextRunner - .withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class, - RedisAutoConfiguration.class, MongoDataAutoConfiguration.class, - SolrAutoConfiguration.class)) - .run((context) -> { - Map beans = context - .getBeansOfType(HealthIndicator.class); - assertThat(beans).hasSize(4); - }); - } - - @Test - public void dataSourceHealthIndicator() { - this.contextRunner - .withConfiguration( - AutoConfigurations.of(DataSourceAutoConfiguration.class)) - .withPropertyValues("management.health.diskspace.enabled:false") - .run(hasSingleHealthIndicator(DataSourceHealthIndicator.class)); - } - - @Test - public void dataSourceHealthIndicatorWithSeveralDataSources() { - this.contextRunner - .withUserConfiguration(EmbeddedDataSourceConfiguration.class, - DataSourceConfig.class) - .withPropertyValues("management.health.diskspace.enabled:false") - .run((context) -> { - Map beans = context - .getBeansOfType(HealthIndicator.class); - assertThat(beans).hasSize(1); - HealthIndicator bean = beans.values().iterator().next(); - assertThat(bean).isExactlyInstanceOf(CompositeHealthIndicator.class); - assertThat(bean.health().getDetails()).containsOnlyKeys("dataSource", - "testDataSource"); - }); - } - - @Test - public void dataSourceHealthIndicatorWithAbstractRoutingDataSource() { - this.contextRunner - .withUserConfiguration(EmbeddedDataSourceConfiguration.class, - RoutingDatasourceConfig.class) - .withPropertyValues("management.health.diskspace.enabled:false") - .run(hasSingleHealthIndicator(DataSourceHealthIndicator.class)); - } - - @Test - public void dataSourceHealthIndicatorWithCustomValidationQuery() { - this.contextRunner - .withUserConfiguration(DataSourceConfig.class, - DataSourcePoolMetadataProvidersConfiguration.class, - HealthIndicatorAutoConfiguration.class) - .withPropertyValues( - "spring.datasource.test.validation-query:SELECT from FOOBAR", - "management.health.diskspace.enabled:false") - .run((context) -> { - Map beans = context - .getBeansOfType(HealthIndicator.class); - assertThat(beans).hasSize(1); - HealthIndicator healthIndicator = beans.values().iterator().next(); - assertThat(healthIndicator.getClass()) - .isEqualTo(DataSourceHealthIndicator.class); - DataSourceHealthIndicator dataSourceHealthIndicator = (DataSourceHealthIndicator) healthIndicator; - assertThat(dataSourceHealthIndicator.getQuery()) - .isEqualTo("SELECT from FOOBAR"); - }); - } - - @Test - public void notDataSourceHealthIndicator() { - this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class) - .withPropertyValues("management.health.db.enabled:false", - "management.health.diskspace.enabled:false") - .run(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); - } - - @Test - public void rabbitHealthIndicator() { - this.contextRunner - .withConfiguration(AutoConfigurations.of(RabbitAutoConfiguration.class)) - .withPropertyValues("management.health.diskspace.enabled:false") - .run(hasSingleHealthIndicator(RabbitHealthIndicator.class)); - } - - @Test - public void notRabbitHealthIndicator() { - this.contextRunner - .withConfiguration(AutoConfigurations.of(RabbitAutoConfiguration.class)) - .withPropertyValues("management.health.rabbit.enabled:false", - "management.health.diskspace.enabled:false") - .run(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); - } - - @Test - public void solrHealthIndicator() { - this.contextRunner - .withConfiguration(AutoConfigurations.of(SolrAutoConfiguration.class)) - .withPropertyValues("management.health.diskspace.enabled:false") - .run(hasSingleHealthIndicator(SolrHealthIndicator.class)); - } - - @Test - public void notSolrHealthIndicator() { - this.contextRunner - .withConfiguration(AutoConfigurations.of(SolrAutoConfiguration.class)) - .withPropertyValues("management.health.solr.enabled:false", - "management.health.diskspace.enabled:false") - .run(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); - } - - @Test - public void diskSpaceHealthIndicator() { - this.contextRunner.run(hasSingleHealthIndicator(DiskSpaceHealthIndicator.class)); - } - - @Test - public void mailHealthIndicator() { - this.contextRunner - .withConfiguration( - AutoConfigurations.of(MailSenderAutoConfiguration.class)) - .withPropertyValues("spring.mail.host:smtp.acme.org", - "management.health.diskspace.enabled:false") - .run(hasSingleHealthIndicator(MailHealthIndicator.class)); - } - - @Test - public void notMailHealthIndicator() { - this.contextRunner - .withConfiguration( - AutoConfigurations.of(MailSenderAutoConfiguration.class)) - .withPropertyValues("spring.mail.host:smtp.acme.org", - "management.health.mail.enabled:false", - "management.health.diskspace.enabled:false") - .run(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); - } - - @Test - public void jmsHealthIndicator() { - this.contextRunner - .withConfiguration(AutoConfigurations.of(ActiveMQAutoConfiguration.class)) - .withPropertyValues("management.health.diskspace.enabled:false") - .run(hasSingleHealthIndicator(JmsHealthIndicator.class)); - } - - @Test - public void notJmsHealthIndicator() { - this.contextRunner - .withConfiguration(AutoConfigurations.of(ActiveMQAutoConfiguration.class)) - .withPropertyValues("management.health.jms.enabled:false", - "management.health.diskspace.enabled:false") - .run(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); - } - - @Test - public void elasticsearchHealthIndicator() { - this.contextRunner - .withConfiguration(AutoConfigurations.of(JestClientConfiguration.class, - JestAutoConfiguration.class, - ElasticsearchAutoConfiguration.class)) - .withPropertyValues("spring.data.elasticsearch.cluster-nodes:localhost:0", - "management.health.diskspace.enabled:false") - .withSystemProperties("es.set.netty.runtime.available.processors=false") - .run(hasSingleHealthIndicator(ElasticsearchHealthIndicator.class)); - } - - @Test - public void elasticsearchJestHealthIndicator() { - this.contextRunner - .withConfiguration(AutoConfigurations.of(JestClientConfiguration.class, - JestAutoConfiguration.class)) - .withPropertyValues("management.health.diskspace.enabled:false") - .withSystemProperties("es.set.netty.runtime.available.processors=false") - .run(hasSingleHealthIndicator(ElasticsearchJestHealthIndicator.class)); - } - - @Test - public void notElasticsearchHealthIndicator() { - this.contextRunner - .withConfiguration(AutoConfigurations.of(JestClientConfiguration.class, - JestAutoConfiguration.class, - ElasticsearchAutoConfiguration.class)) - .withPropertyValues("management.health.elasticsearch.enabled:false", - "spring.data.elasticsearch.properties.path.home:target", - "management.health.diskspace.enabled:false") - .run(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); - } - - @Test - public void cassandraHealthIndicator() throws Exception { - this.contextRunner - .withConfiguration(AutoConfigurations.of(CassandraConfiguration.class)) - .withPropertyValues("management.health.diskspace.enabled:false") - .run(hasSingleHealthIndicator(CassandraHealthIndicator.class)); - } - - @Test - public void notCassandraHealthIndicator() throws Exception { - this.contextRunner - .withConfiguration(AutoConfigurations.of(CassandraConfiguration.class)) - .withPropertyValues("management.health.diskspace.enabled:false", - "management.health.cassandra.enabled:false") - .run(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); - } - - @Test - public void couchbaseHealthIndicator() throws Exception { - this.contextRunner - .withConfiguration(AutoConfigurations.of(CouchbaseConfiguration.class)) - .withPropertyValues("management.health.diskspace.enabled:false") - .run(hasSingleHealthIndicator(CouchbaseHealthIndicator.class)); - } - - @Test - public void notCouchbaseHealthIndicator() throws Exception { - this.contextRunner - .withConfiguration(AutoConfigurations.of(CouchbaseConfiguration.class)) - .withPropertyValues("management.health.diskspace.enabled:false", - "management.health.couchbase.enabled:false") - .run(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); - } - - @Test - public void ldapHealthIndicator() throws Exception { - this.contextRunner - .withConfiguration(AutoConfigurations.of(LdapConfiguration.class)) - .withPropertyValues("management.health.diskspace.enabled:false") - .run(hasSingleHealthIndicator(LdapHealthIndicator.class)); - } - - @Test - public void notLdapHealthIndicator() throws Exception { - this.contextRunner - .withConfiguration(AutoConfigurations.of(LdapConfiguration.class)) - .withPropertyValues("management.health.diskspace.enabled:false", - "management.health.ldap.enabled:false") - .run(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); - } - - @Test - public void neo4jHealthIndicator() throws Exception { - this.contextRunner - .withConfiguration(AutoConfigurations.of(Neo4jConfiguration.class)) - .withPropertyValues("management.health.diskspace.enabled:false") - .run(hasSingleHealthIndicator(Neo4jHealthIndicator.class)); - } - - @Test - public void notNeo4jHealthIndicator() throws Exception { - this.contextRunner - .withConfiguration(AutoConfigurations.of(Neo4jConfiguration.class)) - .withPropertyValues("management.health.diskspace.enabled:false", - "management.health.neo4j.enabled:false") - .run(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); - } - - private ContextConsumer hasSingleHealthIndicator( - Class type) { - return (context) -> assertThat(context).getBeans(HealthIndicator.class).hasSize(1) - .hasValueSatisfying( - new Condition<>((indicator) -> indicator.getClass().equals(type), - "Wrong indicator type")); - } - - @Configuration - @EnableConfigurationProperties - protected static class DataSourceConfig { - - @Bean - @ConfigurationProperties(prefix = "spring.datasource.test") - public DataSource testDataSource() { - return DataSourceBuilder.create() - .type(org.apache.tomcat.jdbc.pool.DataSource.class) - .driverClassName("org.hsqldb.jdbc.JDBCDriver") - .url("jdbc:hsqldb:mem:test").username("sa").build(); - } - - } - - @Configuration - protected static class RoutingDatasourceConfig { - - @Bean - AbstractRoutingDataSource routingDataSource() { - return mock(AbstractRoutingDataSource.class); - } - - } - - @Configuration - protected static class CustomHealthIndicator { - - @Bean - public HealthIndicator customHealthIndicator() { - return () -> Health.down().build(); - } - - } - - @Configuration - @AutoConfigureBefore(HealthIndicatorAutoConfiguration.class) - protected static class CassandraConfiguration { - - @Bean - public CassandraOperations cassandraOperations() { - return mock(CassandraOperations.class); - } - - } - - @Configuration - @AutoConfigureBefore(HealthIndicatorAutoConfiguration.class) - protected static class CouchbaseConfiguration { - - @Bean - public CouchbaseOperations couchbaseOperations() { - return mock(CouchbaseOperations.class); - } - - } - - @Configuration - protected static class JestClientConfiguration { - - @Bean - public JestClient jestClient() { - return mock(JestClient.class); - } - - } - - @Configuration - @AutoConfigureBefore(HealthIndicatorAutoConfiguration.class) - protected static class LdapConfiguration { - - @Bean - public LdapOperations ldapOperations() { - return mock(LdapOperations.class); - } - - } - - @Configuration - @AutoConfigureBefore(HealthIndicatorAutoConfiguration.class) - protected static class Neo4jConfiguration { - - @Bean - public SessionFactory sessionFactory() { - return mock(SessionFactory.class); - } - - } - -} diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/health/ReactiveHealthIndicatorsConfigurationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/health/ReactiveHealthIndicatorsConfigurationTests.java deleted file mode 100644 index 728278c056..0000000000 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/health/ReactiveHealthIndicatorsConfigurationTests.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2012-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.actuate.autoconfigure.health; - -import org.assertj.core.api.Condition; -import org.junit.Test; - -import org.springframework.boot.actuate.health.ReactiveHealthIndicator; -import org.springframework.boot.actuate.health.RedisReactiveHealthIndicator; -import org.springframework.boot.autoconfigure.AutoConfigurations; -import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; -import org.springframework.boot.test.context.assertj.AssertableApplicationContext; -import org.springframework.boot.test.context.runner.ApplicationContextRunner; -import org.springframework.boot.test.context.runner.ContextConsumer; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Tests for {@link ReactiveHealthIndicatorsConfiguration}. - * - * @author Stephane Nicoll - */ -public class ReactiveHealthIndicatorsConfigurationTests { - - public final ApplicationContextRunner contextRunner = new ApplicationContextRunner() - .withConfiguration( - AutoConfigurations.of(HealthIndicatorAutoConfiguration.class)); - - @Test - public void redisHealthIndicator() { - this.contextRunner - .withConfiguration(AutoConfigurations.of(RedisAutoConfiguration.class)) - .withPropertyValues("management.health.diskspace.enabled:false") - .run(hasSingleReactiveHealthIndicator( - RedisReactiveHealthIndicator.class)); - } - - private ContextConsumer hasSingleReactiveHealthIndicator( - Class type) { - return (context) -> assertThat(context).getBeans(ReactiveHealthIndicator.class) - .hasSize(1).hasValueSatisfying( - new Condition<>((indicator) -> indicator.getClass().equals(type), - "Wrong indicator type")); - } - -} diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/BeansEndpointTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/beans/BeansEndpointTests.java similarity index 95% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/BeansEndpointTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/beans/BeansEndpointTests.java index 30e3a8eadf..f00b47fc02 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/BeansEndpointTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/beans/BeansEndpointTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.beans; import java.util.List; import java.util.Map; @@ -25,8 +25,8 @@ import org.junit.Test; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; -import org.springframework.boot.actuate.endpoint.BeansEndpoint.ApplicationContextDescriptor; -import org.springframework.boot.actuate.endpoint.BeansEndpoint.BeanDescriptor; +import org.springframework.boot.actuate.beans.BeansEndpoint.ApplicationContextDescriptor; +import org.springframework.boot.actuate.beans.BeansEndpoint.BeanDescriptor; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Bean; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/CachePublicMetricsTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cache/CachePublicMetricsTests.java similarity index 92% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/CachePublicMetricsTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cache/CachePublicMetricsTests.java index fbeaac45d1..391297d644 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/CachePublicMetricsTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cache/CachePublicMetricsTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.cache; import java.util.Arrays; import java.util.Collection; @@ -25,9 +25,6 @@ import java.util.Map; import org.junit.Before; import org.junit.Test; -import org.springframework.boot.actuate.cache.CacheStatisticsProvider; -import org.springframework.boot.actuate.cache.CaffeineCacheStatisticsProvider; -import org.springframework.boot.actuate.cache.ConcurrentMapCacheStatisticsProvider; import org.springframework.boot.actuate.metrics.Metric; import org.springframework.cache.CacheManager; import org.springframework.cache.concurrent.ConcurrentMapCache; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/ShutdownEndpointTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/ShutdownEndpointTests.java similarity index 98% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/ShutdownEndpointTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/ShutdownEndpointTests.java index fd407bed1d..46b0fd7f26 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/ShutdownEndpointTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/ShutdownEndpointTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.context; import java.net.URL; import java.net.URLClassLoader; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/ConfigurationPropertiesReportEndpointMethodAnnotationsTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointMethodAnnotationsTests.java similarity index 92% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/ConfigurationPropertiesReportEndpointMethodAnnotationsTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointMethodAnnotationsTests.java index 240e3b0575..a5662a1207 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/ConfigurationPropertiesReportEndpointMethodAnnotationsTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointMethodAnnotationsTests.java @@ -14,12 +14,12 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.context.properties; import org.junit.Test; -import org.springframework.boot.actuate.endpoint.ConfigurationPropertiesReportEndpoint.ConfigurationPropertiesBeanDescriptor; -import org.springframework.boot.actuate.endpoint.ConfigurationPropertiesReportEndpoint.ConfigurationPropertiesDescriptor; +import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ConfigurationPropertiesBeanDescriptor; +import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ConfigurationPropertiesDescriptor; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.runner.ApplicationContextRunner; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/ConfigurationPropertiesReportEndpointParentTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointParentTests.java similarity index 95% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/ConfigurationPropertiesReportEndpointParentTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointParentTests.java index 1bf99e80ed..dcd5c1e2d4 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/ConfigurationPropertiesReportEndpointParentTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointParentTests.java @@ -14,11 +14,11 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.context.properties; import org.junit.Test; -import org.springframework.boot.actuate.endpoint.ConfigurationPropertiesReportEndpoint.ConfigurationPropertiesDescriptor; +import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ConfigurationPropertiesDescriptor; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.runner.ApplicationContextRunner; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/ConfigurationPropertiesReportEndpointProxyTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointProxyTests.java similarity index 90% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/ConfigurationPropertiesReportEndpointProxyTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointProxyTests.java index 67e88b43d2..099c383cbd 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/ConfigurationPropertiesReportEndpointProxyTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointProxyTests.java @@ -14,14 +14,14 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.context.properties; import javax.sql.DataSource; import org.junit.Test; -import org.springframework.boot.actuate.endpoint.ConfigurationPropertiesReportEndpoint.ConfigurationPropertiesBeanDescriptor; -import org.springframework.boot.actuate.endpoint.ConfigurationPropertiesReportEndpoint.ConfigurationPropertiesDescriptor; +import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ConfigurationPropertiesBeanDescriptor; +import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ConfigurationPropertiesDescriptor; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.runner.ApplicationContextRunner; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/ConfigurationPropertiesReportEndpointSerializationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointSerializationTests.java similarity index 97% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/ConfigurationPropertiesReportEndpointSerializationTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointSerializationTests.java index 272b2de30c..ffe38d66fd 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/ConfigurationPropertiesReportEndpointSerializationTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointSerializationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.context.properties; import java.net.InetAddress; import java.util.ArrayList; @@ -24,8 +24,8 @@ import java.util.Map; import org.junit.Test; -import org.springframework.boot.actuate.endpoint.ConfigurationPropertiesReportEndpoint.ConfigurationPropertiesBeanDescriptor; -import org.springframework.boot.actuate.endpoint.ConfigurationPropertiesReportEndpoint.ConfigurationPropertiesDescriptor; +import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ConfigurationPropertiesBeanDescriptor; +import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ConfigurationPropertiesDescriptor; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.runner.ApplicationContextRunner; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/ConfigurationPropertiesReportEndpointTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointTests.java similarity index 96% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/ConfigurationPropertiesReportEndpointTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointTests.java index 4e7f8193ec..972c410931 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/ConfigurationPropertiesReportEndpointTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpointTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.context.properties; import java.util.ArrayList; import java.util.Arrays; @@ -26,8 +26,8 @@ import java.util.function.Consumer; import org.junit.Test; -import org.springframework.boot.actuate.endpoint.ConfigurationPropertiesReportEndpoint.ConfigurationPropertiesBeanDescriptor; -import org.springframework.boot.actuate.endpoint.ConfigurationPropertiesReportEndpoint.ConfigurationPropertiesDescriptor; +import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ConfigurationPropertiesBeanDescriptor; +import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ConfigurationPropertiesDescriptor; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.runner.ApplicationContextRunner; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/ElasticsearchHealthIndicatorTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/elasticsearch/ElasticsearchHealthIndicatorTests.java similarity index 95% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/ElasticsearchHealthIndicatorTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/elasticsearch/ElasticsearchHealthIndicatorTests.java index 6ab1801102..f9ba59b115 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/ElasticsearchHealthIndicatorTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/elasticsearch/ElasticsearchHealthIndicatorTests.java @@ -14,9 +14,8 @@ * limitations under the License. */ -package org.springframework.boot.actuate.health; +package org.springframework.boot.actuate.elasticsearch; -import java.util.Arrays; import java.util.Map; import org.elasticsearch.ElasticsearchException; @@ -38,6 +37,9 @@ import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.Status; + import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; @@ -60,14 +62,12 @@ public class ElasticsearchHealthIndicatorTests { private ElasticsearchHealthIndicator indicator; - private ElasticsearchHealthIndicatorProperties properties = new ElasticsearchHealthIndicatorProperties(); - @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); given(this.client.admin()).willReturn(this.admin); given(this.admin.cluster()).willReturn(this.cluster); - this.indicator = new ElasticsearchHealthIndicator(this.client, this.properties); + this.indicator = new ElasticsearchHealthIndicator(this.client, 100L); } @Test @@ -85,13 +85,13 @@ public class ElasticsearchHealthIndicatorTests { @Test public void certainIndices() { + this.indicator = new ElasticsearchHealthIndicator(this.client, 100L, + "test-index-1", "test-index-2"); PlainActionFuture responseFuture = new PlainActionFuture<>(); responseFuture.onResponse(new StubClusterHealthResponse()); ArgumentCaptor requestCaptor = ArgumentCaptor .forClass(ClusterHealthRequest.class); given(this.cluster.health(requestCaptor.capture())).willReturn(responseFuture); - this.properties.getIndices() - .addAll(Arrays.asList("test-index-1", "test-index-2")); Health health = this.indicator.health(); assertThat(requestCaptor.getValue().indices()).contains("test-index-1", "test-index-2"); @@ -100,12 +100,12 @@ public class ElasticsearchHealthIndicatorTests { @Test public void customTimeout() { + this.indicator = new ElasticsearchHealthIndicator(this.client, 1000L); TestActionFuture responseFuture = new TestActionFuture(); responseFuture.onResponse(new StubClusterHealthResponse()); ArgumentCaptor requestCaptor = ArgumentCaptor .forClass(ClusterHealthRequest.class); given(this.cluster.health(requestCaptor.capture())).willReturn(responseFuture); - this.properties.setResponseTimeout(1000L); this.indicator.health(); assertThat(responseFuture.getTimeout).isEqualTo(1000L); } diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/ElasticsearchJestHealthIndicatorTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/elasticsearch/ElasticsearchJestHealthIndicatorTests.java similarity index 94% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/ElasticsearchJestHealthIndicatorTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/elasticsearch/ElasticsearchJestHealthIndicatorTests.java index b1828d42c1..21d047555c 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/ElasticsearchJestHealthIndicatorTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/elasticsearch/ElasticsearchJestHealthIndicatorTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.health; +package org.springframework.boot.actuate.elasticsearch; import java.io.IOException; @@ -27,6 +27,9 @@ import io.searchbox.client.config.exception.CouldNotConnectException; import io.searchbox.core.SearchResult; import org.junit.Test; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.Status; + import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; @@ -49,7 +52,6 @@ public class ElasticsearchJestHealthIndicatorTests { public void elasticsearchIsUp() throws IOException { given(this.jestClient.execute(any(Action.class))) .willReturn(createJestResult(4, 0)); - Health health = this.healthIndicator.health(); assertThat(health.getStatus()).isEqualTo(Status.UP); } diff --git a/spring-boot/src/test/java/org/springframework/boot/endpoint/AnnotationEndpointDiscovererTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/annotation/AnnotationEndpointDiscovererTests.java similarity index 94% rename from spring-boot/src/test/java/org/springframework/boot/endpoint/AnnotationEndpointDiscovererTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/annotation/AnnotationEndpointDiscovererTests.java index 59065e6cdd..7ad54f0c4c 100644 --- a/spring-boot/src/test/java/org/springframework/boot/endpoint/AnnotationEndpointDiscovererTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/annotation/AnnotationEndpointDiscovererTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint; +package org.springframework.boot.actuate.endpoint.annotation; import java.lang.reflect.Method; import java.util.Collection; @@ -22,13 +22,19 @@ import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import java.util.function.Consumer; -import java.util.function.Function; import java.util.stream.Collectors; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; +import org.springframework.boot.actuate.endpoint.EndpointInfo; +import org.springframework.boot.actuate.endpoint.Operation; +import org.springframework.boot.actuate.endpoint.OperationInvoker; +import org.springframework.boot.actuate.endpoint.OperationType; +import org.springframework.boot.actuate.endpoint.cache.CachingConfiguration; +import org.springframework.boot.actuate.endpoint.cache.CachingConfigurationFactory; +import org.springframework.boot.actuate.endpoint.cache.CachingOperationInvoker; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; @@ -137,7 +143,7 @@ public class AnnotationEndpointDiscovererTests { @Test public void endpointMainReadOperationIsNotCachedWithNonMatchingId() { - Function cachingConfigurationFactory = ( + CachingConfigurationFactory cachingConfigurationFactory = ( endpointId) -> (endpointId.equals("foo") ? new CachingConfiguration(500) : new CachingConfiguration(0)); load(TestEndpointConfiguration.class, (context) -> { @@ -155,7 +161,7 @@ public class AnnotationEndpointDiscovererTests { @Test public void endpointMainReadOperationIsCachedWithMatchingId() { - Function cachingConfigurationFactory = ( + CachingConfigurationFactory cachingConfigurationFactory = ( endpointId) -> (endpointId.equals("test") ? new CachingConfiguration(500) : new CachingConfiguration(0)); load(TestEndpointConfiguration.class, (context) -> { @@ -333,7 +339,7 @@ public class AnnotationEndpointDiscovererTests { extends AnnotationEndpointDiscoverer { TestAnnotationEndpointDiscoverer(ApplicationContext applicationContext, - Function cachingConfigurationFactory) { + CachingConfigurationFactory cachingConfigurationFactory) { super(applicationContext, endpointOperationFactory(), TestEndpointOperation::getOperationMethod, cachingConfigurationFactory); diff --git a/spring-boot/src/test/java/org/springframework/boot/endpoint/CachingOperationInvokerTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/cache/CachingOperationInvokerTests.java similarity index 95% rename from spring-boot/src/test/java/org/springframework/boot/endpoint/CachingOperationInvokerTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/cache/CachingOperationInvokerTests.java index 9704dd31b1..334687d660 100644 --- a/spring-boot/src/test/java/org/springframework/boot/endpoint/CachingOperationInvokerTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/cache/CachingOperationInvokerTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint; +package org.springframework.boot.actuate.endpoint.cache; import java.util.HashMap; import java.util.Map; @@ -23,6 +23,8 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; +import org.springframework.boot.actuate.endpoint.OperationInvoker; + import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/convert/ConversionServiceOperationParameterMapperTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/convert/ConversionServiceOperationParameterMapperTests.java new file mode 100644 index 0000000000..c55cb07333 --- /dev/null +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/convert/ConversionServiceOperationParameterMapperTests.java @@ -0,0 +1,95 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.endpoint.convert; + +import java.util.Date; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +import org.springframework.boot.actuate.endpoint.ParameterMappingException; +import org.springframework.core.convert.ConversionService; +import org.springframework.core.convert.support.DefaultConversionService; +import org.springframework.format.support.DefaultFormattingConversionService; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.fail; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; + +/** + * Tests for {@link ConversionServiceOperationParameterMapper}. + * + * @author Phillip Webb + */ +public class ConversionServiceOperationParameterMapperTests { + + @Rule + public ExpectedException thrown = ExpectedException.none(); + + @Test + public void mapParameterShouldDelegateToConversionService() throws Exception { + DefaultFormattingConversionService conversionService = spy( + new DefaultFormattingConversionService()); + ConversionServiceOperationParameterMapper mapper = new ConversionServiceOperationParameterMapper( + conversionService); + Integer mapped = mapper.mapParameter("123", Integer.class); + assertThat(mapped).isEqualTo(123); + verify(conversionService).convert("123", Integer.class); + } + + @Test + public void mapParameterWhenConversionServiceFailsShouldThrowParameterMappingException() + throws Exception { + ConversionService conversionService = mock(ConversionService.class); + RuntimeException error = new RuntimeException(); + given(conversionService.convert(any(), any())).willThrow(error); + ConversionServiceOperationParameterMapper mapper = new ConversionServiceOperationParameterMapper( + conversionService); + try { + mapper.mapParameter("123", Integer.class); + fail("Did not throw"); + } + catch (ParameterMappingException ex) { + assertThat(ex.getInput()).isEqualTo("123"); + assertThat(ex.getType()).isEqualTo(Integer.class); + assertThat(ex.getCause()).isEqualTo(error); + } + } + + @Test + public void createShouldRegisterIsoOffsetDateTimeConverter() throws Exception { + ConversionServiceOperationParameterMapper mapper = new ConversionServiceOperationParameterMapper(); + Date mapped = mapper.mapParameter("2011-12-03T10:15:30+01:00", Date.class); + assertThat(mapped).isNotNull(); + } + + @Test + public void createWithConversionServiceShouldNotRegisterIsoOffsetDateTimeConverter() + throws Exception { + ConversionService conversionService = new DefaultConversionService(); + ConversionServiceOperationParameterMapper mapper = new ConversionServiceOperationParameterMapper( + conversionService); + this.thrown.expect(ParameterMappingException.class); + mapper.mapParameter("2011-12-03T10:15:30+01:00", Date.class); + } + +} diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/convert/IsoOffsetDateTimeConverterTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/convert/IsoOffsetDateTimeConverterTests.java new file mode 100644 index 0000000000..c6962add52 --- /dev/null +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/convert/IsoOffsetDateTimeConverterTests.java @@ -0,0 +1,49 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.endpoint.convert; + +import java.util.Date; + +import org.junit.Test; + +import org.springframework.core.convert.support.DefaultConversionService; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link IsoOffsetDateTimeConverter}. + * + * @author Phillip Webb + */ +public class IsoOffsetDateTimeConverterTests { + + @Test + public void convertShouldConvertIsoDate() throws Exception { + IsoOffsetDateTimeConverter converter = new IsoOffsetDateTimeConverter(); + Date date = converter.convert("2011-12-03T10:15:30+01:00"); + assertThat(date).isNotNull(); + } + + @Test + public void registerConverterShouldRegister() throws Exception { + DefaultConversionService service = new DefaultConversionService(); + IsoOffsetDateTimeConverter.registerConverter(service); + Date date = service.convert("2011-12-03T10:15:30+01:00", Date.class); + assertThat(date).isNotNull(); + } + +} diff --git a/spring-boot/src/test/java/org/springframework/boot/endpoint/jmx/EndpointMBeanInfoAssemblerTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/jmx/EndpointMBeanInfoAssemblerTests.java similarity index 95% rename from spring-boot/src/test/java/org/springframework/boot/endpoint/jmx/EndpointMBeanInfoAssemblerTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/jmx/EndpointMBeanInfoAssemblerTests.java index acdde394ac..5739430b13 100644 --- a/spring-boot/src/test/java/org/springframework/boot/endpoint/jmx/EndpointMBeanInfoAssemblerTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/jmx/EndpointMBeanInfoAssemblerTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint.jmx; +package org.springframework.boot.actuate.endpoint.jmx; import java.util.Collections; import java.util.Map; @@ -25,9 +25,9 @@ import javax.management.MBeanParameterInfo; import org.junit.Test; -import org.springframework.boot.endpoint.EndpointInfo; -import org.springframework.boot.endpoint.OperationInvoker; -import org.springframework.boot.endpoint.OperationType; +import org.springframework.boot.actuate.endpoint.EndpointInfo; +import org.springframework.boot.actuate.endpoint.OperationInvoker; +import org.springframework.boot.actuate.endpoint.OperationType; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.entry; diff --git a/spring-boot/src/test/java/org/springframework/boot/endpoint/jmx/EndpointMBeanRegistrarTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/jmx/EndpointMBeanRegistrarTests.java similarity index 98% rename from spring-boot/src/test/java/org/springframework/boot/endpoint/jmx/EndpointMBeanRegistrarTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/jmx/EndpointMBeanRegistrarTests.java index 1e44c415a3..4cbb06fdf8 100644 --- a/spring-boot/src/test/java/org/springframework/boot/endpoint/jmx/EndpointMBeanRegistrarTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/jmx/EndpointMBeanRegistrarTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint.jmx; +package org.springframework.boot.actuate.endpoint.jmx; import javax.management.InstanceNotFoundException; import javax.management.MBeanRegistrationException; diff --git a/spring-boot/src/test/java/org/springframework/boot/endpoint/jmx/EndpointMBeanTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/jmx/EndpointMBeanTests.java similarity index 94% rename from spring-boot/src/test/java/org/springframework/boot/endpoint/jmx/EndpointMBeanTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/jmx/EndpointMBeanTests.java index c19144e3d9..bde5a78f13 100644 --- a/spring-boot/src/test/java/org/springframework/boot/endpoint/jmx/EndpointMBeanTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/jmx/EndpointMBeanTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint.jmx; +package org.springframework.boot.actuate.endpoint.jmx; import java.util.Collection; import java.util.HashMap; @@ -41,12 +41,13 @@ import org.junit.Before; import org.junit.Test; import reactor.core.publisher.Mono; -import org.springframework.boot.endpoint.CachingConfiguration; -import org.springframework.boot.endpoint.ConversionServiceOperationParameterMapper; -import org.springframework.boot.endpoint.DeleteOperation; -import org.springframework.boot.endpoint.Endpoint; -import org.springframework.boot.endpoint.ReadOperation; -import org.springframework.boot.endpoint.WriteOperation; +import org.springframework.boot.actuate.endpoint.annotation.DeleteOperation; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; +import org.springframework.boot.actuate.endpoint.annotation.WriteOperation; +import org.springframework.boot.actuate.endpoint.cache.CachingConfiguration; +import org.springframework.boot.actuate.endpoint.convert.ConversionServiceOperationParameterMapper; +import org.springframework.boot.actuate.endpoint.jmx.annotation.JmxAnnotationEndpointDiscoverer; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.core.convert.support.DefaultConversionService; diff --git a/spring-boot/src/test/java/org/springframework/boot/endpoint/jmx/JmxAnnotationEndpointDiscovererTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/jmx/annotation/JmxAnnotationEndpointDiscovererTests.java similarity index 94% rename from spring-boot/src/test/java/org/springframework/boot/endpoint/jmx/JmxAnnotationEndpointDiscovererTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/jmx/annotation/JmxAnnotationEndpointDiscovererTests.java index a4d5145c81..91a1321e6d 100644 --- a/spring-boot/src/test/java/org/springframework/boot/endpoint/jmx/JmxAnnotationEndpointDiscovererTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/jmx/annotation/JmxAnnotationEndpointDiscovererTests.java @@ -14,29 +14,31 @@ * limitations under the License. */ -package org.springframework.boot.endpoint.jmx; +package org.springframework.boot.actuate.endpoint.jmx.annotation; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; -import java.util.function.Function; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; -import org.springframework.boot.endpoint.CachingConfiguration; -import org.springframework.boot.endpoint.CachingOperationInvoker; -import org.springframework.boot.endpoint.ConversionServiceOperationParameterMapper; -import org.springframework.boot.endpoint.DeleteOperation; -import org.springframework.boot.endpoint.Endpoint; -import org.springframework.boot.endpoint.EndpointExposure; -import org.springframework.boot.endpoint.EndpointInfo; -import org.springframework.boot.endpoint.ReadOperation; -import org.springframework.boot.endpoint.ReflectiveOperationInvoker; -import org.springframework.boot.endpoint.WriteOperation; +import org.springframework.boot.actuate.endpoint.EndpointInfo; +import org.springframework.boot.actuate.endpoint.ReflectiveOperationInvoker; +import org.springframework.boot.actuate.endpoint.annotation.DeleteOperation; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.EndpointExposure; +import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; +import org.springframework.boot.actuate.endpoint.annotation.WriteOperation; +import org.springframework.boot.actuate.endpoint.cache.CachingConfiguration; +import org.springframework.boot.actuate.endpoint.cache.CachingConfigurationFactory; +import org.springframework.boot.actuate.endpoint.cache.CachingOperationInvoker; +import org.springframework.boot.actuate.endpoint.convert.ConversionServiceOperationParameterMapper; +import org.springframework.boot.actuate.endpoint.jmx.JmxEndpointOperation; +import org.springframework.boot.actuate.endpoint.jmx.JmxEndpointOperationParameterInfo; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -315,7 +317,7 @@ public class JmxAnnotationEndpointDiscovererTests { } private void load(Class configuration, - Function cachingConfigurationFactory, + CachingConfigurationFactory cachingConfigurationFactory, Consumer consumer) { try (AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext( configuration)) { diff --git a/spring-boot/src/test/java/org/springframework/boot/endpoint/web/AbstractWebEndpointIntegrationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/AbstractWebEndpointIntegrationTests.java similarity index 93% rename from spring-boot/src/test/java/org/springframework/boot/endpoint/web/AbstractWebEndpointIntegrationTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/AbstractWebEndpointIntegrationTests.java index dbef912702..a1e81acf8d 100644 --- a/spring-boot/src/test/java/org/springframework/boot/endpoint/web/AbstractWebEndpointIntegrationTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/AbstractWebEndpointIntegrationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint.web; +package org.springframework.boot.actuate.endpoint.web; import java.util.Collections; import java.util.HashMap; @@ -27,14 +27,16 @@ import org.junit.Test; import reactor.core.publisher.Mono; import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer; -import org.springframework.boot.endpoint.CachingConfiguration; -import org.springframework.boot.endpoint.ConversionServiceOperationParameterMapper; -import org.springframework.boot.endpoint.DeleteOperation; -import org.springframework.boot.endpoint.Endpoint; -import org.springframework.boot.endpoint.OperationParameterMapper; -import org.springframework.boot.endpoint.ReadOperation; -import org.springframework.boot.endpoint.Selector; -import org.springframework.boot.endpoint.WriteOperation; +import org.springframework.boot.actuate.endpoint.OperationParameterMapper; +import org.springframework.boot.actuate.endpoint.annotation.DeleteOperation; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; +import org.springframework.boot.actuate.endpoint.annotation.Selector; +import org.springframework.boot.actuate.endpoint.annotation.WriteOperation; +import org.springframework.boot.actuate.endpoint.cache.CachingConfiguration; +import org.springframework.boot.actuate.endpoint.convert.ConversionServiceOperationParameterMapper; +import org.springframework.boot.actuate.endpoint.web.annotation.WebAnnotationEndpointDiscoverer; +import org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader; import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Bean; @@ -322,7 +324,16 @@ public abstract class AbstractWebEndpointIntegrationTests null, configuration, consumer); } - private void load(Function cachingConfigurationFactory, + private void load(CachingConfigurationFactory cachingConfigurationFactory, Class configuration, Consumer consumer) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext( configuration); diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/WebEndpointsRunner.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/WebEndpointsRunner.java deleted file mode 100644 index a09e428dc2..0000000000 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/WebEndpointsRunner.java +++ /dev/null @@ -1,415 +0,0 @@ -/* - * Copyright 2012-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.actuate.endpoint.web; - -import java.lang.reflect.Modifier; -import java.time.Duration; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.function.Function; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import org.glassfish.jersey.server.ResourceConfig; -import org.junit.runner.Runner; -import org.junit.runners.BlockJUnit4ClassRunner; -import org.junit.runners.Suite; -import org.junit.runners.model.FrameworkMethod; -import org.junit.runners.model.InitializationError; -import org.junit.runners.model.Statement; - -import org.springframework.boot.actuate.autoconfigure.ManagementContextAutoConfiguration; -import org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure.EndpointInfrastructureAutoConfiguration; -import org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure.ServletEndpointAutoConfiguration; -import org.springframework.boot.autoconfigure.ImportAutoConfiguration; -import org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration; -import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration; -import org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration; -import org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration; -import org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration; -import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration; -import org.springframework.boot.test.util.TestPropertyValues; -import org.springframework.boot.web.context.WebServerInitializedEvent; -import org.springframework.boot.web.embedded.netty.NettyReactiveWebServerFactory; -import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; -import org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext; -import org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext; -import org.springframework.context.ApplicationContext; -import org.springframework.context.ApplicationListener; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; -import org.springframework.core.annotation.AnnotationUtils; -import org.springframework.core.env.MutablePropertySources; -import org.springframework.core.env.PropertySource; -import org.springframework.http.server.reactive.HttpHandler; -import org.springframework.test.web.reactive.server.WebTestClient; -import org.springframework.util.ReflectionUtils; -import org.springframework.web.server.adapter.WebHttpHandlerBuilder; -import org.springframework.web.util.DefaultUriBuilderFactory; -import org.springframework.web.util.DefaultUriBuilderFactory.EncodingMode; - -/** - * A custom {@link Runner} that tests web endpoints that are made available over HTTP - * using Jersey, Spring MVC, and WebFlux. - *

- * The following types can be automatically injected into static fields on the test class: - *

    - *
  • {@link WebTestClient}
  • - *
  • {@link ConfigurableApplicationContext}
  • - *
- *

- * The {@link PropertySource PropertySources} that belong to the application context's - * {@link org.springframework.core.env.Environment} are reset at the end of every test. - * This means that {@link TestPropertyValues} can be used in a test without affecting the - * {@code Environment} of other tests in the same class. The runner always sets the flag - * `endpoints.default.web.enabled` to true so that web endpoints are enabled. - * - * @author Andy Wilkinson - */ -public class WebEndpointsRunner extends Suite { - - public WebEndpointsRunner(Class testClass) throws InitializationError { - super(testClass, createRunners(testClass)); - } - - private static List createRunners(Class clazz) throws InitializationError { - return Arrays.asList(new JerseyWebEndpointsRunner(clazz), - new MvcWebEndpointsRunner(clazz), new ReactiveWebEndpointsRunner(clazz)); - } - - private static class AbstractWebEndpointsRunner extends BlockJUnit4ClassRunner { - - private final TestContext testContext; - - private final String name; - - protected AbstractWebEndpointsRunner(Class klass, String name, - Function>, ConfigurableApplicationContext> contextLoader) - throws InitializationError { - super(klass); - this.name = name; - this.testContext = new TestContext(klass, contextLoader); - } - - @Override - protected final String getName() { - return this.name; - } - - @Override - protected String testName(FrameworkMethod method) { - return super.testName(method) + "[" + getName() + "]"; - } - - @Override - protected Statement withBeforeClasses(Statement statement) { - Statement delegate = super.withBeforeClasses(statement); - return new Statement() { - - @Override - public void evaluate() throws Throwable { - AbstractWebEndpointsRunner.this.testContext.beforeClass(); - delegate.evaluate(); - } - - }; - } - - @Override - protected Statement withAfterClasses(Statement statement) { - Statement delegate = super.withAfterClasses(statement); - return new Statement() { - - @Override - public void evaluate() throws Throwable { - try { - delegate.evaluate(); - } - finally { - AbstractWebEndpointsRunner.this.testContext.afterClass(); - } - } - - }; - } - - @Override - protected Statement withBefores(FrameworkMethod method, Object target, - Statement statement) { - Statement delegate = super.withBefores(method, target, statement); - return new Statement() { - - @Override - public void evaluate() throws Throwable { - AbstractWebEndpointsRunner.this.testContext.beforeTest(); - delegate.evaluate(); - } - - }; - } - - @Override - protected Statement withAfters(FrameworkMethod method, Object target, - Statement statement) { - Statement delegate = super.withAfters(method, target, statement); - return new Statement() { - - @Override - public void evaluate() throws Throwable { - try { - delegate.evaluate(); - } - finally { - AbstractWebEndpointsRunner.this.testContext.afterTest(); - } - } - - }; - } - - } - - private static final class MvcWebEndpointsRunner extends AbstractWebEndpointsRunner { - - private MvcWebEndpointsRunner(Class klass) throws InitializationError { - super(klass, "Spring MVC", (classes) -> { - AnnotationConfigServletWebServerApplicationContext context = new AnnotationConfigServletWebServerApplicationContext(); - TestPropertyValues.of("endpoints.default.web.enabled=true") - .applyTo(context); - classes.add(MvcTestConfiguration.class); - context.register(classes.toArray(new Class[classes.size()])); - context.refresh(); - return context; - }); - } - - @Configuration - @ImportAutoConfiguration({ JacksonAutoConfiguration.class, - HttpMessageConvertersAutoConfiguration.class, - WebMvcAutoConfiguration.class, DispatcherServletAutoConfiguration.class, - EndpointInfrastructureAutoConfiguration.class, - ManagementContextAutoConfiguration.class, - ServletEndpointAutoConfiguration.class }) - static class MvcTestConfiguration { - - @Bean - public TomcatServletWebServerFactory tomcat() { - return new TomcatServletWebServerFactory(0); - } - - } - - } - - private static final class JerseyWebEndpointsRunner - extends AbstractWebEndpointsRunner { - - private JerseyWebEndpointsRunner(Class klass) throws InitializationError { - super(klass, "Jersey", (classes) -> { - AnnotationConfigServletWebServerApplicationContext context = new AnnotationConfigServletWebServerApplicationContext(); - TestPropertyValues.of("endpoints.default.web.enabled=true") - .applyTo(context); - classes.add(JerseyAppConfiguration.class); - classes.add(JerseyInfrastructureConfiguration.class); - context.register(classes.toArray(new Class[classes.size()])); - context.refresh(); - return context; - }); - } - - @Configuration - @Import({ JacksonAutoConfiguration.class, JerseyAutoConfiguration.class, - EndpointInfrastructureAutoConfiguration.class, - ManagementContextAutoConfiguration.class }) - static class JerseyInfrastructureConfiguration { - - @Bean - public TomcatServletWebServerFactory tomcat() { - return new TomcatServletWebServerFactory(0); - } - - } - - @Configuration - static class JerseyAppConfiguration { - - @Bean - public ResourceConfig resourceConfig() { - return new ResourceConfig(); - } - - } - - } - - private static final class ReactiveWebEndpointsRunner - extends AbstractWebEndpointsRunner { - - private ReactiveWebEndpointsRunner(Class klass) throws InitializationError { - super(klass, "Reactive", (classes) -> { - ReactiveWebServerApplicationContext context = new ReactiveWebServerApplicationContext(); - TestPropertyValues.of("endpoints.default.web.enabled:true") - .applyTo(context); - classes.add(ReactiveInfrastructureConfiguration.class); - context.register(classes.toArray(new Class[classes.size()])); - context.refresh(); - return context; - }); - } - - @Configuration - @ImportAutoConfiguration({ JacksonAutoConfiguration.class, - WebFluxAutoConfiguration.class, - EndpointInfrastructureAutoConfiguration.class, - ManagementContextAutoConfiguration.class }) - static class ReactiveInfrastructureConfiguration - implements ApplicationListener { - - @Bean - public NettyReactiveWebServerFactory netty() { - return new NettyReactiveWebServerFactory(0); - } - - @Override - public void onApplicationEvent(WebServerInitializedEvent event) { - portHolder().setPort(event.getWebServer().getPort()); - } - - @Bean - public HttpHandler httpHandler(ApplicationContext applicationContext) { - return WebHttpHandlerBuilder.applicationContext(applicationContext) - .build(); - } - - @Bean - public PortHolder portHolder() { - return new PortHolder(); - } - - } - - } - - private static final class PortHolder { - - private int port; - - int getPort() { - return this.port; - } - - void setPort(int port) { - this.port = port; - } - - } - - private static final class TestContext { - - private final Class testClass; - - private final Function>, ConfigurableApplicationContext> applicationContextLoader; - - private ConfigurableApplicationContext applicationContext; - - private List> propertySources; - - TestContext(Class testClass, - Function>, ConfigurableApplicationContext> applicationContextLoader) { - this.testClass = testClass; - this.applicationContextLoader = applicationContextLoader; - } - - private void beforeClass() { - this.applicationContext = createApplicationContext(); - WebTestClient webTestClient = createWebTestClient(); - injectIfPossible(this.testClass, webTestClient); - injectIfPossible(this.testClass, this.applicationContext); - } - - private void beforeTest() { - capturePropertySources(); - } - - private void afterTest() { - restorePropertySources(); - } - - private void afterClass() { - if (this.applicationContext != null) { - this.applicationContext.close(); - } - } - - private ConfigurableApplicationContext createApplicationContext() { - return this.applicationContextLoader - .apply(new ArrayList<>(Stream.of(this.testClass.getDeclaredClasses()) - .filter((candidate) -> AnnotationUtils.findAnnotation( - candidate, Configuration.class) != null) - .collect(Collectors.toList()))); - } - - private WebTestClient createWebTestClient() { - DefaultUriBuilderFactory uriBuilderFactory = new DefaultUriBuilderFactory( - "http://localhost:" + determinePort()); - uriBuilderFactory.setEncodingMode(EncodingMode.NONE); - WebTestClient webTestClient = WebTestClient.bindToServer() - .uriBuilderFactory(uriBuilderFactory) - .responseTimeout(Duration.ofSeconds(30)).build(); - return webTestClient; - } - - private int determinePort() { - if (this.applicationContext instanceof AnnotationConfigServletWebServerApplicationContext) { - return ((AnnotationConfigServletWebServerApplicationContext) this.applicationContext) - .getWebServer().getPort(); - } - return this.applicationContext.getBean(PortHolder.class).getPort(); - } - - private void injectIfPossible(Class target, Object value) { - ReflectionUtils.doWithFields(target, (field) -> { - if (Modifier.isStatic(field.getModifiers()) - && field.getType().isInstance(value)) { - ReflectionUtils.makeAccessible(field); - ReflectionUtils.setField(field, null, value); - } - }); - } - - private void capturePropertySources() { - this.propertySources = new ArrayList<>(); - this.applicationContext.getEnvironment().getPropertySources() - .forEach(this.propertySources::add); - } - - private void restorePropertySources() { - List names = new ArrayList<>(); - MutablePropertySources propertySources = this.applicationContext - .getEnvironment().getPropertySources(); - propertySources - .forEach((propertySource) -> names.add(propertySource.getName())); - names.forEach(propertySources::remove); - this.propertySources.forEach(propertySources::addLast); - } - - } - -} diff --git a/spring-boot/src/test/java/org/springframework/boot/endpoint/web/jersey/JerseyWebEndpointIntegrationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/jersey/JerseyWebEndpointIntegrationTests.java similarity index 92% rename from spring-boot/src/test/java/org/springframework/boot/endpoint/web/jersey/JerseyWebEndpointIntegrationTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/jersey/JerseyWebEndpointIntegrationTests.java index 13b1da9526..3c10b699cc 100644 --- a/spring-boot/src/test/java/org/springframework/boot/endpoint/web/jersey/JerseyWebEndpointIntegrationTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/jersey/JerseyWebEndpointIntegrationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.endpoint.web.jersey; +package org.springframework.boot.actuate.endpoint.web.jersey; import java.util.Collection; import java.util.HashSet; @@ -27,9 +27,9 @@ import org.glassfish.jersey.server.ResourceConfig; import org.glassfish.jersey.server.model.Resource; import org.glassfish.jersey.servlet.ServletContainer; -import org.springframework.boot.endpoint.web.AbstractWebEndpointIntegrationTests; +import org.springframework.boot.actuate.endpoint.web.AbstractWebEndpointIntegrationTests; +import org.springframework.boot.actuate.endpoint.web.annotation.WebAnnotationEndpointDiscoverer; import org.springframework.boot.endpoint.web.EndpointMapping; -import org.springframework.boot.endpoint.web.WebAnnotationEndpointDiscoverer; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext; @@ -41,6 +41,7 @@ import org.springframework.core.env.Environment; * Integration tests for web endpoints exposed using Jersey. * * @author Andy Wilkinson + * @see JerseyEndpointResourceFactory */ public class JerseyWebEndpointIntegrationTests extends AbstractWebEndpointIntegrationTests { diff --git a/spring-boot/src/test/java/org/springframework/boot/endpoint/web/reactive/ReactiveWebEndpointIntegrationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/reactive/WebFluxEndpointIntegrationTests.java similarity index 88% rename from spring-boot/src/test/java/org/springframework/boot/endpoint/web/reactive/ReactiveWebEndpointIntegrationTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/reactive/WebFluxEndpointIntegrationTests.java index 7371d89c24..41c413927d 100644 --- a/spring-boot/src/test/java/org/springframework/boot/endpoint/web/reactive/ReactiveWebEndpointIntegrationTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/reactive/WebFluxEndpointIntegrationTests.java @@ -14,15 +14,15 @@ * limitations under the License. */ -package org.springframework.boot.endpoint.web.reactive; +package org.springframework.boot.actuate.endpoint.web.reactive; import java.util.Arrays; import org.junit.Test; -import org.springframework.boot.endpoint.web.AbstractWebEndpointIntegrationTests; +import org.springframework.boot.actuate.endpoint.web.AbstractWebEndpointIntegrationTests; +import org.springframework.boot.actuate.endpoint.web.annotation.WebAnnotationEndpointDiscoverer; import org.springframework.boot.endpoint.web.EndpointMapping; -import org.springframework.boot.endpoint.web.WebAnnotationEndpointDiscoverer; import org.springframework.boot.web.embedded.netty.NettyReactiveWebServerFactory; import org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext; import org.springframework.boot.web.reactive.context.ReactiveWebServerInitializedEvent; @@ -41,11 +41,12 @@ import org.springframework.web.server.adapter.WebHttpHandlerBuilder; * Integration tests for web endpoints exposed using WebFlux. * * @author Andy Wilkinson + * @see WebFluxEndpointHandlerMapping */ -public class ReactiveWebEndpointIntegrationTests +public class WebFluxEndpointIntegrationTests extends AbstractWebEndpointIntegrationTests { - public ReactiveWebEndpointIntegrationTests() { + public WebFluxEndpointIntegrationTests() { super(ReactiveConfiguration.class); } @@ -92,13 +93,13 @@ public class ReactiveWebEndpointIntegrationTests } @Bean - public WebEndpointReactiveHandlerMapping webEndpointHandlerMapping( + public WebFluxEndpointHandlerMapping webEndpointHandlerMapping( Environment environment, WebAnnotationEndpointDiscoverer endpointDiscoverer) { CorsConfiguration corsConfiguration = new CorsConfiguration(); corsConfiguration.setAllowedOrigins(Arrays.asList("http://example.com")); corsConfiguration.setAllowedMethods(Arrays.asList("GET", "POST")); - return new WebEndpointReactiveHandlerMapping( + return new WebFluxEndpointHandlerMapping( new EndpointMapping(environment.getProperty("endpointPath")), endpointDiscoverer.discoverEndpoints(), corsConfiguration); } diff --git a/spring-boot/src/test/java/org/springframework/boot/endpoint/web/mvc/MvcWebEndpointIntegrationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/servlet/MvcWebEndpointIntegrationTests.java similarity index 89% rename from spring-boot/src/test/java/org/springframework/boot/endpoint/web/mvc/MvcWebEndpointIntegrationTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/servlet/MvcWebEndpointIntegrationTests.java index f58c7f4fe0..08db366853 100644 --- a/spring-boot/src/test/java/org/springframework/boot/endpoint/web/mvc/MvcWebEndpointIntegrationTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/servlet/MvcWebEndpointIntegrationTests.java @@ -14,15 +14,15 @@ * limitations under the License. */ -package org.springframework.boot.endpoint.web.mvc; +package org.springframework.boot.actuate.endpoint.web.servlet; import java.util.Arrays; import org.junit.Test; -import org.springframework.boot.endpoint.web.AbstractWebEndpointIntegrationTests; +import org.springframework.boot.actuate.endpoint.web.AbstractWebEndpointIntegrationTests; +import org.springframework.boot.actuate.endpoint.web.annotation.WebAnnotationEndpointDiscoverer; import org.springframework.boot.endpoint.web.EndpointMapping; -import org.springframework.boot.endpoint.web.WebAnnotationEndpointDiscoverer; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext; import org.springframework.context.annotation.Bean; @@ -37,6 +37,7 @@ import org.springframework.web.servlet.config.annotation.EnableWebMvc; * Integration tests for web endpoints exposed using Spring MVC. * * @author Andy Wilkinson + * @see WebMvcEndpointHandlerMapping */ public class MvcWebEndpointIntegrationTests extends AbstractWebEndpointIntegrationTests { @@ -86,13 +87,13 @@ public class MvcWebEndpointIntegrationTests extends } @Bean - public WebEndpointServletHandlerMapping webEndpointHandlerMapping( + public WebMvcEndpointHandlerMapping webEndpointHandlerMapping( Environment environment, WebAnnotationEndpointDiscoverer webEndpointDiscoverer) { CorsConfiguration corsConfiguration = new CorsConfiguration(); corsConfiguration.setAllowedOrigins(Arrays.asList("http://example.com")); corsConfiguration.setAllowedMethods(Arrays.asList("GET", "POST")); - return new WebEndpointServletHandlerMapping( + return new WebMvcEndpointHandlerMapping( new EndpointMapping(environment.getProperty("endpointPath")), webEndpointDiscoverer.discoverEndpoints(), corsConfiguration); } diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/test/AbstractWebEndpointRunner.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/test/AbstractWebEndpointRunner.java new file mode 100644 index 0000000000..030636cc56 --- /dev/null +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/test/AbstractWebEndpointRunner.java @@ -0,0 +1,229 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.endpoint.web.test; + +import java.lang.reflect.Modifier; +import java.time.Duration; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.junit.runners.BlockJUnit4ClassRunner; +import org.junit.runners.model.FrameworkMethod; +import org.junit.runners.model.InitializationError; +import org.junit.runners.model.Statement; + +import org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.annotation.AnnotationUtils; +import org.springframework.core.env.MutablePropertySources; +import org.springframework.core.env.PropertySource; +import org.springframework.test.web.reactive.server.WebTestClient; +import org.springframework.util.ReflectionUtils; +import org.springframework.web.util.DefaultUriBuilderFactory; +import org.springframework.web.util.DefaultUriBuilderFactory.EncodingMode; + +/** + * Base class for web endpoint runners. + * + * @author Andy Wilkinson + * @author Phillip Webb + */ +abstract class AbstractWebEndpointRunner extends BlockJUnit4ClassRunner { + + private final String name; + + private final TestContext testContext; + + protected AbstractWebEndpointRunner(Class testClass, String name, + ContextFactory contextFactory) throws InitializationError { + super(testClass); + this.name = name; + this.testContext = new TestContext(testClass, contextFactory); + } + + @Override + protected final String getName() { + return this.name; + } + + @Override + protected String testName(FrameworkMethod method) { + return super.testName(method) + "[" + getName() + "]"; + } + + @Override + protected Statement withBeforeClasses(Statement statement) { + Statement delegate = super.withBeforeClasses(statement); + return new Statement() { + + @Override + public void evaluate() throws Throwable { + AbstractWebEndpointRunner.this.testContext.beforeClass(); + delegate.evaluate(); + } + + }; + } + + @Override + protected Statement withAfterClasses(Statement statement) { + Statement delegate = super.withAfterClasses(statement); + return new Statement() { + + @Override + public void evaluate() throws Throwable { + try { + delegate.evaluate(); + } + finally { + AbstractWebEndpointRunner.this.testContext.afterClass(); + } + } + + }; + } + + @Override + protected Statement withBefores(FrameworkMethod method, Object target, + Statement statement) { + Statement delegate = super.withBefores(method, target, statement); + return new Statement() { + + @Override + public void evaluate() throws Throwable { + AbstractWebEndpointRunner.this.testContext.beforeTest(); + delegate.evaluate(); + } + + }; + } + + @Override + protected Statement withAfters(FrameworkMethod method, Object target, + Statement statement) { + Statement delegate = super.withAfters(method, target, statement); + return new Statement() { + + @Override + public void evaluate() throws Throwable { + try { + delegate.evaluate(); + } + finally { + AbstractWebEndpointRunner.this.testContext.afterTest(); + } + } + + }; + } + + final class TestContext { + + private final Class testClass; + + private final ContextFactory contextFactory; + + private ConfigurableApplicationContext applicationContext; + + private List> propertySources; + + TestContext(Class testClass, ContextFactory contextFactory) { + this.testClass = testClass; + this.contextFactory = contextFactory; + } + + void beforeClass() { + this.applicationContext = createApplicationContext(); + WebTestClient webTestClient = createWebTestClient(); + injectIfPossible(this.testClass, webTestClient); + injectIfPossible(this.testClass, this.applicationContext); + } + + void beforeTest() { + capturePropertySources(); + } + + void afterTest() { + restorePropertySources(); + } + + void afterClass() { + if (this.applicationContext != null) { + this.applicationContext.close(); + } + } + + private ConfigurableApplicationContext createApplicationContext() { + Class[] members = this.testClass.getDeclaredClasses(); + List> configurationClasses = Stream.of(members) + .filter(this::isConfiguration).collect(Collectors.toList()); + return this.contextFactory + .createContext(new ArrayList<>(configurationClasses)); + } + + private boolean isConfiguration(Class candidate) { + return AnnotationUtils.findAnnotation(candidate, Configuration.class) != null; + } + + private WebTestClient createWebTestClient() { + DefaultUriBuilderFactory uriBuilderFactory = new DefaultUriBuilderFactory( + "http://localhost:" + determinePort()); + uriBuilderFactory.setEncodingMode(EncodingMode.NONE); + return WebTestClient.bindToServer().uriBuilderFactory(uriBuilderFactory) + .responseTimeout(Duration.ofSeconds(30)).build(); + } + + private int determinePort() { + if (this.applicationContext instanceof AnnotationConfigServletWebServerApplicationContext) { + return ((AnnotationConfigServletWebServerApplicationContext) this.applicationContext) + .getWebServer().getPort(); + } + return this.applicationContext.getBean(PortHolder.class).getPort(); + } + + private void injectIfPossible(Class target, Object value) { + ReflectionUtils.doWithFields(target, (field) -> { + if (Modifier.isStatic(field.getModifiers()) + && field.getType().isInstance(value)) { + ReflectionUtils.makeAccessible(field); + ReflectionUtils.setField(field, null, value); + } + }); + } + + private void capturePropertySources() { + this.propertySources = new ArrayList<>(); + this.applicationContext.getEnvironment().getPropertySources() + .forEach(this.propertySources::add); + } + + private void restorePropertySources() { + List names = new ArrayList<>(); + MutablePropertySources propertySources = this.applicationContext + .getEnvironment().getPropertySources(); + propertySources + .forEach((propertySource) -> names.add(propertySource.getName())); + names.forEach(propertySources::remove); + this.propertySources.forEach(propertySources::addLast); + } + + } + +} diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx/package-info.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/test/ContextFactory.java similarity index 66% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx/package-info.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/test/ContextFactory.java index 5adbb19815..a9a344e1ca 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx/package-info.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/test/ContextFactory.java @@ -14,8 +14,17 @@ * limitations under the License. */ +package org.springframework.boot.actuate.endpoint.web.test; + +import java.util.List; + +import org.springframework.context.ConfigurableApplicationContext; + /** - * {@link org.springframework.boot.autoconfigure.EnableAutoConfiguration - * Auto-configuration} for the Actuator's JMX endpoints. + * @author Phillip Webb */ -package org.springframework.boot.actuate.autoconfigure.endpoint.jmx; +@FunctionalInterface +interface ContextFactory { + + ConfigurableApplicationContext createContext(List> configurationClasses); +} diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/test/JerseyEndpointsRunner.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/test/JerseyEndpointsRunner.java new file mode 100644 index 0000000000..601af85b73 --- /dev/null +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/test/JerseyEndpointsRunner.java @@ -0,0 +1,107 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.endpoint.web.test; + +import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; + +import org.glassfish.jersey.server.ResourceConfig; +import org.glassfish.jersey.server.model.Resource; +import org.junit.runners.BlockJUnit4ClassRunner; +import org.junit.runners.model.InitializationError; + +import org.springframework.boot.actuate.endpoint.convert.ConversionServiceOperationParameterMapper; +import org.springframework.boot.actuate.endpoint.http.ActuatorMediaType; +import org.springframework.boot.actuate.endpoint.web.annotation.WebAnnotationEndpointDiscoverer; +import org.springframework.boot.actuate.endpoint.web.jersey.JerseyEndpointResourceFactory; +import org.springframework.boot.autoconfigure.ImportAutoConfiguration; +import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration; +import org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration; +import org.springframework.boot.autoconfigure.jersey.ResourceConfigCustomizer; +import org.springframework.boot.endpoint.web.EndpointMapping; +import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; +import org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.MediaType; + +/** + * {@link BlockJUnit4ClassRunner} for Jersey. + * + * @author Andy Wilkinson + * @author Phillip Webb + */ +class JerseyEndpointsRunner extends AbstractWebEndpointRunner { + + JerseyEndpointsRunner(Class testClass) throws InitializationError { + super(testClass, "Jersey", JerseyEndpointsRunner::createContext); + } + + private static ConfigurableApplicationContext createContext(List> classes) { + AnnotationConfigServletWebServerApplicationContext context = new AnnotationConfigServletWebServerApplicationContext(); + classes.add(JerseyEndpointConfiguration.class); + context.register(classes.toArray(new Class[classes.size()])); + context.refresh(); + return context; + } + + @Configuration + @ImportAutoConfiguration({ JacksonAutoConfiguration.class, + JerseyAutoConfiguration.class }) + static class JerseyEndpointConfiguration { + + private final ApplicationContext applicationContext; + + JerseyEndpointConfiguration(ApplicationContext applicationContext) { + this.applicationContext = applicationContext; + } + + @Bean + public TomcatServletWebServerFactory tomcat() { + return new TomcatServletWebServerFactory(0); + } + + @Bean + public ResourceConfig resourceConfig() { + return new ResourceConfig(); + } + + @Bean + public ResourceConfigCustomizer webEndpointRegistrar() { + return this::customize; + } + + private void customize(ResourceConfig config) { + List mediaTypes = Arrays.asList(MediaType.APPLICATION_JSON_VALUE, + ActuatorMediaType.V2_JSON_VALUE); + WebAnnotationEndpointDiscoverer discoverer = new WebAnnotationEndpointDiscoverer( + this.applicationContext, + new ConversionServiceOperationParameterMapper(), (id) -> null, + mediaTypes, mediaTypes); + Collection resources = new JerseyEndpointResourceFactory() + .createEndpointResources(new EndpointMapping("/application"), + discoverer.discoverEndpoints()); + config.registerResources(new HashSet<>(resources)); + } + + } + +} diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/security/package-info.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/test/PortHolder.java similarity index 76% rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/security/package-info.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/test/PortHolder.java index 273b856491..06f26c78f6 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/security/package-info.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/test/PortHolder.java @@ -14,7 +14,18 @@ * limitations under the License. */ -/** - * Auto-configuration for Actuator security. - */ -package org.springframework.boot.actuate.autoconfigure.security; +package org.springframework.boot.actuate.endpoint.web.test; + +class PortHolder { + + private int port; + + int getPort() { + return this.port; + } + + void setPort(int port) { + this.port = port; + } + +} diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/test/WebEndpointRunners.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/test/WebEndpointRunners.java new file mode 100644 index 0000000000..64e109f635 --- /dev/null +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/test/WebEndpointRunners.java @@ -0,0 +1,65 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.endpoint.web.test; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.runner.Runner; +import org.junit.runners.Suite; +import org.junit.runners.model.InitializationError; + +import org.springframework.boot.test.util.TestPropertyValues; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.core.env.PropertySource; +import org.springframework.test.web.reactive.server.WebTestClient; + +/** + * A custom {@link Runner} that tests web endpoints that are made available over HTTP + * using Jersey, Spring MVC, and WebFlux. + *

+ * The following types can be automatically injected into static fields on the test class: + *

    + *
  • {@link WebTestClient}
  • + *
  • {@link ConfigurableApplicationContext}
  • + *
+ *

+ * The {@link PropertySource PropertySources} that belong to the application context's + * {@link org.springframework.core.env.Environment} are reset at the end of every test. + * This means that {@link TestPropertyValues} can be used in a test without affecting the + * {@code Environment} of other tests in the same class. The runner always sets the flag + * `endpoints.default.web.enabled` to true so that web endpoints are enabled. + * + * @author Andy Wilkinson + * @author Phillip Webb + */ +public class WebEndpointRunners extends Suite { + + public WebEndpointRunners(Class testClass) throws InitializationError { + super(testClass, createRunners(testClass)); + } + + private static List createRunners(Class testClass) + throws InitializationError { + List runners = new ArrayList<>(); + runners.add(new WebFluxEndpointsRunner(testClass)); + runners.add(new WebMvcEndpointRunner(testClass)); + runners.add(new JerseyEndpointsRunner(testClass)); + return runners; + } + +} diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/test/WebFluxEndpointsRunner.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/test/WebFluxEndpointsRunner.java new file mode 100644 index 0000000000..a4afef3daf --- /dev/null +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/test/WebFluxEndpointsRunner.java @@ -0,0 +1,112 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.endpoint.web.test; + +import java.util.Arrays; +import java.util.List; + +import org.junit.runners.BlockJUnit4ClassRunner; +import org.junit.runners.model.InitializationError; + +import org.springframework.boot.actuate.endpoint.convert.ConversionServiceOperationParameterMapper; +import org.springframework.boot.actuate.endpoint.http.ActuatorMediaType; +import org.springframework.boot.actuate.endpoint.web.annotation.WebAnnotationEndpointDiscoverer; +import org.springframework.boot.actuate.endpoint.web.reactive.WebFluxEndpointHandlerMapping; +import org.springframework.boot.autoconfigure.ImportAutoConfiguration; +import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration; +import org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration; +import org.springframework.boot.endpoint.web.EndpointMapping; +import org.springframework.boot.web.context.WebServerInitializedEvent; +import org.springframework.boot.web.embedded.netty.NettyReactiveWebServerFactory; +import org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationListener; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.MediaType; +import org.springframework.http.server.reactive.HttpHandler; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.server.adapter.WebHttpHandlerBuilder; + +/** + * {@link BlockJUnit4ClassRunner} for Spring WebFlux. + * + * @author Andy Wilkinson + * @author Phillip Webb + */ +class WebFluxEndpointsRunner extends AbstractWebEndpointRunner { + + WebFluxEndpointsRunner(Class testClass) throws InitializationError { + super(testClass, "Reactive", WebFluxEndpointsRunner::createContext); + } + + private static ConfigurableApplicationContext createContext(List> classes) { + ReactiveWebServerApplicationContext context = new ReactiveWebServerApplicationContext(); + classes.add(WebFluxEndpointConfiguration.class); + context.register(classes.toArray(new Class[classes.size()])); + context.refresh(); + return context; + } + + @Configuration + @ImportAutoConfiguration({ JacksonAutoConfiguration.class, + WebFluxAutoConfiguration.class }) + static class WebFluxEndpointConfiguration + implements ApplicationListener { + + private final ApplicationContext applicationContext; + + WebFluxEndpointConfiguration(ApplicationContext applicationContext) { + this.applicationContext = applicationContext; + } + + @Bean + public NettyReactiveWebServerFactory netty() { + return new NettyReactiveWebServerFactory(0); + } + + @Bean + public PortHolder portHolder() { + return new PortHolder(); + } + + @Override + public void onApplicationEvent(WebServerInitializedEvent event) { + portHolder().setPort(event.getWebServer().getPort()); + } + + @Bean + public HttpHandler httpHandler(ApplicationContext applicationContext) { + return WebHttpHandlerBuilder.applicationContext(applicationContext).build(); + } + + @Bean + public WebFluxEndpointHandlerMapping webEndpointReactiveHandlerMapping() { + List mediaTypes = Arrays.asList(MediaType.APPLICATION_JSON_VALUE, + ActuatorMediaType.V2_JSON_VALUE); + WebAnnotationEndpointDiscoverer discoverer = new WebAnnotationEndpointDiscoverer( + this.applicationContext, + new ConversionServiceOperationParameterMapper(), (id) -> null, + mediaTypes, mediaTypes); + return new WebFluxEndpointHandlerMapping(new EndpointMapping("/application"), + discoverer.discoverEndpoints(), new CorsConfiguration()); + } + + } + +} diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/test/WebMvcEndpointRunner.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/test/WebMvcEndpointRunner.java new file mode 100644 index 0000000000..6051d814a6 --- /dev/null +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/test/WebMvcEndpointRunner.java @@ -0,0 +1,95 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.endpoint.web.test; + +import java.util.Arrays; +import java.util.List; + +import org.junit.runners.BlockJUnit4ClassRunner; +import org.junit.runners.model.InitializationError; + +import org.springframework.boot.actuate.endpoint.convert.ConversionServiceOperationParameterMapper; +import org.springframework.boot.actuate.endpoint.http.ActuatorMediaType; +import org.springframework.boot.actuate.endpoint.web.annotation.WebAnnotationEndpointDiscoverer; +import org.springframework.boot.actuate.endpoint.web.servlet.WebMvcEndpointHandlerMapping; +import org.springframework.boot.autoconfigure.ImportAutoConfiguration; +import org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration; +import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration; +import org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration; +import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration; +import org.springframework.boot.endpoint.web.EndpointMapping; +import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; +import org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.MediaType; +import org.springframework.web.cors.CorsConfiguration; + +/** + * {@link BlockJUnit4ClassRunner} for Spring MVC. + * + * @author Andy Wilkinson + * @author Phillip Webb + */ +class WebMvcEndpointRunner extends AbstractWebEndpointRunner { + + WebMvcEndpointRunner(Class testClass) throws InitializationError { + super(testClass, "Spring MVC", WebMvcEndpointRunner::createContext); + } + + private static ConfigurableApplicationContext createContext(List> classes) { + AnnotationConfigServletWebServerApplicationContext context = new AnnotationConfigServletWebServerApplicationContext(); + classes.add(WebMvcEndpointConfiguration.class); + context.register(classes.toArray(new Class[classes.size()])); + context.refresh(); + return context; + } + + @Configuration + @ImportAutoConfiguration({ JacksonAutoConfiguration.class, + HttpMessageConvertersAutoConfiguration.class, WebMvcAutoConfiguration.class, + DispatcherServletAutoConfiguration.class }) + static class WebMvcEndpointConfiguration { + + private final ApplicationContext applicationContext; + + WebMvcEndpointConfiguration(ApplicationContext applicationContext) { + this.applicationContext = applicationContext; + } + + @Bean + public TomcatServletWebServerFactory tomcat() { + return new TomcatServletWebServerFactory(0); + } + + @Bean + public WebMvcEndpointHandlerMapping webEndpointServletHandlerMapping() { + List mediaTypes = Arrays.asList(MediaType.APPLICATION_JSON_VALUE, + ActuatorMediaType.V2_JSON_VALUE); + WebAnnotationEndpointDiscoverer discoverer = new WebAnnotationEndpointDiscoverer( + this.applicationContext, + new ConversionServiceOperationParameterMapper(), (id) -> null, + mediaTypes, mediaTypes); + return new WebMvcEndpointHandlerMapping(new EndpointMapping("/application"), + discoverer.discoverEndpoints(), new CorsConfiguration()); + } + + } + +} diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/EnvironmentEndpointTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/env/EnvironmentEndpointTests.java similarity index 92% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/EnvironmentEndpointTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/env/EnvironmentEndpointTests.java index 0103d2f9ce..58a68dea16 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/EnvironmentEndpointTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/env/EnvironmentEndpointTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.env; import java.util.Collections; import java.util.HashMap; @@ -23,9 +23,9 @@ import java.util.Map; import org.junit.After; import org.junit.Test; -import org.springframework.boot.actuate.endpoint.EnvironmentEndpoint.EnvironmentDescriptor; -import org.springframework.boot.actuate.endpoint.EnvironmentEndpoint.EnvironmentDescriptor.PropertySourceDescriptor; -import org.springframework.boot.actuate.endpoint.EnvironmentEndpoint.EnvironmentDescriptor.PropertySourceDescriptor.PropertyValueDescriptor; +import org.springframework.boot.actuate.env.EnvironmentEndpoint.EnvironmentDescriptor; +import org.springframework.boot.actuate.env.EnvironmentEndpoint.EnvironmentDescriptor.PropertySourceDescriptor; +import org.springframework.boot.actuate.env.EnvironmentEndpoint.EnvironmentDescriptor.PropertySourceDescriptor.PropertyValueDescriptor; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.boot.test.util.TestPropertyValues; @@ -68,10 +68,10 @@ public class EnvironmentEndpointTests { public void compositeSourceIsHandledCorrectly() { StandardEnvironment environment = new StandardEnvironment(); CompositePropertySource source = new CompositePropertySource("composite"); - source.addPropertySource(new MapPropertySource("one", - Collections.singletonMap("foo", "bar"))); - source.addPropertySource(new MapPropertySource("two", - Collections.singletonMap("foo", "spam"))); + source.addPropertySource( + new MapPropertySource("one", Collections.singletonMap("foo", "bar"))); + source.addPropertySource( + new MapPropertySource("two", Collections.singletonMap("foo", "spam"))); environment.getPropertySources().addFirst(source); EnvironmentDescriptor env = new EnvironmentEndpoint(environment) .environment(null); @@ -159,8 +159,7 @@ public class EnvironmentEndpointTests { .withPropertyValues("endpoints.env.keys-to-sanitize=.*pass.*") .withUserConfiguration(Config.class); tester.run((context) -> { - EnvironmentEndpoint endpoint = context - .getBean(EnvironmentEndpoint.class); + EnvironmentEndpoint endpoint = context.getBean(EnvironmentEndpoint.class); EnvironmentDescriptor env = endpoint.environment(null); Map systemProperties = getSource( "systemProperties", env).getProperties(); @@ -233,8 +232,7 @@ public class EnvironmentEndpointTests { @Test public void propertyEntry() { StandardEnvironment environment = new StandardEnvironment(); - TestPropertyValues.of("my.foo=bar", "my.foo2=bar2") - .applyTo(environment); + TestPropertyValues.of("my.foo=bar", "my.foo2=bar2").applyTo(environment); EnvironmentDescriptor env = new EnvironmentEndpoint(environment) .environmentEntry("my.foo"); assertThat(env).isNotNull(); @@ -254,7 +252,6 @@ public class EnvironmentEndpointTests { .filter((source) -> name.equals(source.getName())).findFirst().get(); } - @Configuration @EnableConfigurationProperties static class Config { diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/EnvironmentEndpointWebIntegrationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/env/EnvironmentEndpointWebIntegrationTests.java similarity index 96% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/EnvironmentEndpointWebIntegrationTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/env/EnvironmentEndpointWebIntegrationTests.java index f484804837..071334bce2 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/EnvironmentEndpointWebIntegrationTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/env/EnvironmentEndpointWebIntegrationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint.web; +package org.springframework.boot.actuate.env; import java.util.HashMap; import java.util.Map; @@ -23,7 +23,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.springframework.boot.actuate.endpoint.EnvironmentEndpoint; +import org.springframework.boot.actuate.endpoint.web.test.WebEndpointRunners; import org.springframework.boot.test.util.TestPropertyValues; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Bean; @@ -32,7 +32,7 @@ import org.springframework.core.env.Environment; import org.springframework.core.env.MapPropertySource; import org.springframework.test.web.reactive.server.WebTestClient; -@RunWith(WebEndpointsRunner.class) +@RunWith(WebEndpointRunners.class) public class EnvironmentEndpointWebIntegrationTests { private static WebTestClient client; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/FlywayEndpointTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/flyway/FlywayEndpointTests.java similarity index 96% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/FlywayEndpointTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/flyway/FlywayEndpointTests.java index 23a50fe01a..74e10d1ea7 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/FlywayEndpointTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/flyway/FlywayEndpointTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.flyway; import java.util.Map; @@ -35,6 +35,7 @@ import static org.assertj.core.api.Assertions.assertThat; * * @author Eddú Meléndez * @author Andy Wilkinson + * @author Phillip Webb */ public class FlywayEndpointTests { diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/HealthEndpointTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/HealthEndpointTests.java similarity index 84% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/HealthEndpointTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/HealthEndpointTests.java index a14c76ea24..66da11d9ae 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/HealthEndpointTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/HealthEndpointTests.java @@ -14,19 +14,13 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.health; import java.util.HashMap; import java.util.Map; import org.junit.Test; -import org.springframework.boot.actuate.health.CompositeHealthIndicatorFactory; -import org.springframework.boot.actuate.health.Health; -import org.springframework.boot.actuate.health.HealthIndicator; -import org.springframework.boot.actuate.health.OrderedHealthAggregator; -import org.springframework.boot.actuate.health.Status; - import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.entry; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/HealthEndpointWebIntegrationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/HealthEndpointWebIntegrationTests.java similarity index 86% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/HealthEndpointWebIntegrationTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/HealthEndpointWebIntegrationTests.java index 2b95328e20..61791ee802 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/HealthEndpointWebIntegrationTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/HealthEndpointWebIntegrationTests.java @@ -14,19 +14,14 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint.web; +package org.springframework.boot.actuate.health; import java.util.Map; import org.junit.Test; import org.junit.runner.RunWith; -import org.springframework.boot.actuate.endpoint.HealthEndpoint; -import org.springframework.boot.actuate.health.CompositeHealthIndicatorFactory; -import org.springframework.boot.actuate.health.Health; -import org.springframework.boot.actuate.health.HealthIndicator; -import org.springframework.boot.actuate.health.HealthStatusHttpMapper; -import org.springframework.boot.actuate.health.OrderedHealthAggregator; +import org.springframework.boot.actuate.endpoint.web.test.WebEndpointRunners; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -39,7 +34,7 @@ import org.springframework.test.web.reactive.server.WebTestClient; * * @author Andy Wilkinson */ -@RunWith(WebEndpointsRunner.class) +@RunWith(WebEndpointRunners.class) public class HealthEndpointWebIntegrationTests { private static WebTestClient client; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/RabbitHealthIndicatorTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/RabbitHealthIndicatorTests.java deleted file mode 100644 index 7f7be80b7f..0000000000 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/RabbitHealthIndicatorTests.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2012-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.actuate.health; - -import org.junit.After; -import org.junit.Test; - -import org.springframework.amqp.rabbit.core.RabbitAdmin; -import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration; -import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration; -import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration; -import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Tests for {@link RabbitHealthIndicator}. - * - * @author Christian Dupuis - */ -public class RabbitHealthIndicatorTests { - - private AnnotationConfigApplicationContext context; - - @After - public void close() { - if (this.context != null) { - this.context.close(); - } - } - - @Test - public void indicatorExists() { - this.context = new AnnotationConfigApplicationContext( - PropertyPlaceholderAutoConfiguration.class, RabbitAutoConfiguration.class, - EndpointAutoConfiguration.class, HealthIndicatorAutoConfiguration.class); - assertThat(this.context.getBeanNamesForType(RabbitAdmin.class).length) - .isEqualTo(1); - RabbitHealthIndicator healthIndicator = this.context - .getBean(RabbitHealthIndicator.class); - assertThat(healthIndicator).isNotNull(); - } - -} diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/StatusEndpointTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/StatusEndpointTests.java similarity index 81% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/StatusEndpointTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/StatusEndpointTests.java index 0f49987465..d58c98c145 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/StatusEndpointTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/StatusEndpointTests.java @@ -14,19 +14,13 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.health; import java.util.HashMap; import java.util.Map; import org.junit.Test; -import org.springframework.boot.actuate.health.CompositeHealthIndicatorFactory; -import org.springframework.boot.actuate.health.Health; -import org.springframework.boot.actuate.health.HealthIndicator; -import org.springframework.boot.actuate.health.OrderedHealthAggregator; -import org.springframework.boot.actuate.health.Status; - import static org.assertj.core.api.Assertions.assertThat; /** diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/StatusEndpointWebIntegrationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/StatusEndpointWebIntegrationTests.java similarity index 85% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/StatusEndpointWebIntegrationTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/StatusEndpointWebIntegrationTests.java index ddb24dbcd8..bf105f264f 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/StatusEndpointWebIntegrationTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/StatusEndpointWebIntegrationTests.java @@ -14,19 +14,14 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint.web; +package org.springframework.boot.actuate.health; import java.util.Map; import org.junit.Test; import org.junit.runner.RunWith; -import org.springframework.boot.actuate.endpoint.StatusEndpoint; -import org.springframework.boot.actuate.health.CompositeHealthIndicatorFactory; -import org.springframework.boot.actuate.health.Health; -import org.springframework.boot.actuate.health.HealthIndicator; -import org.springframework.boot.actuate.health.HealthStatusHttpMapper; -import org.springframework.boot.actuate.health.OrderedHealthAggregator; +import org.springframework.boot.actuate.endpoint.web.test.WebEndpointRunners; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -39,7 +34,7 @@ import org.springframework.test.web.reactive.server.WebTestClient; * * @author Stephane Nicoll */ -@RunWith(WebEndpointsRunner.class) +@RunWith(WebEndpointRunners.class) public class StatusEndpointWebIntegrationTests { private static WebTestClient client; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/InfoEndpointTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/info/InfoEndpointTests.java similarity index 96% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/InfoEndpointTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/info/InfoEndpointTests.java index 333fde842b..2a1d85e724 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/InfoEndpointTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/info/InfoEndpointTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.info; import java.util.Arrays; import java.util.Collections; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/InfoEndpointWebIntegrationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/info/InfoEndpointWebIntegrationTests.java similarity index 91% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/InfoEndpointWebIntegrationTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/info/InfoEndpointWebIntegrationTests.java index edd25bf5ad..71e538a78a 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/InfoEndpointWebIntegrationTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/info/InfoEndpointWebIntegrationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint.web; +package org.springframework.boot.actuate.info; import java.util.Arrays; import java.util.LinkedHashMap; @@ -23,8 +23,7 @@ import java.util.Map; import org.junit.Test; import org.junit.runner.RunWith; -import org.springframework.boot.actuate.endpoint.InfoEndpoint; -import org.springframework.boot.actuate.info.InfoContributor; +import org.springframework.boot.actuate.endpoint.web.test.WebEndpointRunners; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.MediaType; @@ -38,7 +37,7 @@ import org.springframework.test.web.reactive.server.WebTestClient; * @author Stephane Nicoll * @author Andy Wilkinson */ -@RunWith(WebEndpointsRunner.class) +@RunWith(WebEndpointRunners.class) @TestPropertySource(properties = { "info.app.name=MyService" }) public class InfoEndpointWebIntegrationTests { diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/DataSourceHealthIndicatorTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/jdbc/DataSourceHealthIndicatorTests.java similarity index 95% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/DataSourceHealthIndicatorTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/jdbc/DataSourceHealthIndicatorTests.java index 619c5a8a22..ba82b30f89 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/DataSourceHealthIndicatorTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/jdbc/DataSourceHealthIndicatorTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.health; +package org.springframework.boot.actuate.jdbc; import java.sql.Connection; @@ -24,6 +24,8 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.Status; import org.springframework.boot.jdbc.EmbeddedDatabaseConnection; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.SingleConnectionDataSource; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/JmsHealthIndicatorTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/jms/JmsHealthIndicatorTests.java similarity index 94% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/JmsHealthIndicatorTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/jms/JmsHealthIndicatorTests.java index 629b69e400..9191775a5f 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/JmsHealthIndicatorTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/jms/JmsHealthIndicatorTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2016 the original author or authors. + * Copyright 2012-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.health; +package org.springframework.boot.actuate.jms; import javax.jms.Connection; import javax.jms.ConnectionFactory; @@ -23,6 +23,9 @@ import javax.jms.JMSException; import org.junit.Test; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.Status; + import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.BDDMockito.given; import static org.mockito.BDDMockito.willThrow; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/LdapHealthIndicatorTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/ldap/LdapHealthIndicatorTests.java similarity index 72% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/LdapHealthIndicatorTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/ldap/LdapHealthIndicatorTests.java index cb25af259a..9df3eb80fa 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/LdapHealthIndicatorTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/ldap/LdapHealthIndicatorTests.java @@ -14,17 +14,14 @@ * limitations under the License. */ -package org.springframework.boot.actuate.health; +package org.springframework.boot.actuate.ldap; import org.junit.After; import org.junit.Before; import org.junit.Test; -import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration; -import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration; -import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; -import org.springframework.boot.autoconfigure.data.ldap.LdapDataAutoConfiguration; -import org.springframework.boot.autoconfigure.ldap.LdapAutoConfiguration; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.Status; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.ldap.CommunicationException; import org.springframework.ldap.core.ContextExecutor; @@ -57,20 +54,6 @@ public class LdapHealthIndicatorTests { } } - @Test - public void indicatorExists() { - this.context.register(LdapAutoConfiguration.class, - LdapDataAutoConfiguration.class, - PropertyPlaceholderAutoConfiguration.class, - EndpointAutoConfiguration.class, HealthIndicatorAutoConfiguration.class); - this.context.refresh(); - LdapTemplate ldapTemplate = this.context.getBean(LdapTemplate.class); - assertThat(ldapTemplate).isNotNull(); - LdapHealthIndicator healthIndicator = this.context - .getBean(LdapHealthIndicator.class); - assertThat(healthIndicator).isNotNull(); - } - @Test @SuppressWarnings("unchecked") public void ldapIsUp() { diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/LiquibaseEndpointTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpointTests.java similarity index 97% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/LiquibaseEndpointTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpointTests.java index ec50144fee..e2bf2b65f0 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/LiquibaseEndpointTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpointTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.liquibase; import java.util.Map; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/LogFileWebEndpointTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/logger/LogFileWebEndpointTests.java similarity index 97% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/LogFileWebEndpointTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/logger/LogFileWebEndpointTests.java index 8b4e428c13..92e14a25fe 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/LogFileWebEndpointTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/logger/LogFileWebEndpointTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint.web; +package org.springframework.boot.actuate.logger; import java.io.File; import java.io.IOException; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/LogFileWebEndpointWebIntegrationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/logger/LogFileWebEndpointWebIntegrationTests.java similarity index 93% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/LogFileWebEndpointWebIntegrationTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/logger/LogFileWebEndpointWebIntegrationTests.java index 42d6d10e94..c1c3d96587 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/LogFileWebEndpointWebIntegrationTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/logger/LogFileWebEndpointWebIntegrationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint.web; +package org.springframework.boot.actuate.logger; import java.io.File; import java.io.IOException; @@ -25,6 +25,7 @@ import org.junit.Test; import org.junit.rules.TemporaryFolder; import org.junit.runner.RunWith; +import org.springframework.boot.actuate.endpoint.web.test.WebEndpointRunners; import org.springframework.boot.test.util.TestPropertyValues; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Bean; @@ -39,7 +40,7 @@ import org.springframework.util.FileCopyUtils; * * @author Andy Wilkinson */ -@RunWith(WebEndpointsRunner.class) +@RunWith(WebEndpointRunners.class) public class LogFileWebEndpointWebIntegrationTests { private static ConfigurableApplicationContext context; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/LoggersEndpointTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/logger/LoggersEndpointTests.java similarity index 94% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/LoggersEndpointTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/logger/LoggersEndpointTests.java index 6146a5f51a..920f9a20cb 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/LoggersEndpointTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/logger/LoggersEndpointTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.logger; import java.util.Collections; import java.util.EnumSet; @@ -23,7 +23,8 @@ import java.util.Set; import org.junit.Test; -import org.springframework.boot.actuate.endpoint.LoggersEndpoint.LoggerLevels; +import org.springframework.boot.actuate.logging.LoggersEndpoint; +import org.springframework.boot.actuate.logging.LoggersEndpoint.LoggerLevels; import org.springframework.boot.logging.LogLevel; import org.springframework.boot.logging.LoggerConfiguration; import org.springframework.boot.logging.LoggingSystem; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/LoggersEndpointWebIntegrationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/logger/LoggersEndpointWebIntegrationTests.java similarity index 91% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/LoggersEndpointWebIntegrationTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/logger/LoggersEndpointWebIntegrationTests.java index a7d9f6dee0..9b8018fc49 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/LoggersEndpointWebIntegrationTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/logger/LoggersEndpointWebIntegrationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint.web; +package org.springframework.boot.actuate.logger; import java.util.Arrays; import java.util.Collections; @@ -23,12 +23,14 @@ import java.util.EnumSet; import net.minidev.json.JSONArray; import org.junit.After; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; -import org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure.ActuatorMediaTypes; -import org.springframework.boot.actuate.endpoint.LoggersEndpoint; +import org.springframework.boot.actuate.endpoint.http.ActuatorMediaType; +import org.springframework.boot.actuate.endpoint.web.test.WebEndpointRunners; +import org.springframework.boot.actuate.logging.LoggersEndpoint; import org.springframework.boot.logging.LogLevel; import org.springframework.boot.logging.LoggerConfiguration; import org.springframework.boot.logging.LoggingSystem; @@ -53,7 +55,8 @@ import static org.mockito.Mockito.verifyZeroInteractions; * @author Stephane Nicoll * @author Andy Wilkinson */ -@RunWith(WebEndpointsRunner.class) +@Ignore +@RunWith(WebEndpointRunners.class) public class LoggersEndpointWebIntegrationTests { private static ConfigurableApplicationContext context; @@ -113,7 +116,7 @@ public class LoggersEndpointWebIntegrationTests { @Test public void setLoggerUsingActuatorV2JsonShouldSetLogLevel() throws Exception { client.post().uri("/application/loggers/ROOT") - .contentType(ActuatorMediaTypes.APPLICATION_ACTUATOR_V2_JSON) + .contentType(ActuatorMediaType.V2_JSON) .syncBody(Collections.singletonMap("configuredLevel", "debug")).exchange() .expectStatus().isNoContent(); verify(this.loggingSystem).setLogLevel("ROOT", LogLevel.DEBUG); @@ -131,7 +134,7 @@ public class LoggersEndpointWebIntegrationTests { @Test public void setLoggerWithNullLogLevel() throws Exception { client.post().uri("/application/loggers/ROOT") - .contentType(ActuatorMediaTypes.APPLICATION_ACTUATOR_V2_JSON) + .contentType(ActuatorMediaType.V2_JSON) .syncBody(Collections.singletonMap("configuredLevel", null)).exchange() .expectStatus().isNoContent(); verify(this.loggingSystem).setLogLevel("ROOT", null); @@ -140,8 +143,8 @@ public class LoggersEndpointWebIntegrationTests { @Test public void setLoggerWithNoLogLevel() throws Exception { client.post().uri("/application/loggers/ROOT") - .contentType(ActuatorMediaTypes.APPLICATION_ACTUATOR_V2_JSON) - .syncBody(Collections.emptyMap()).exchange().expectStatus().isNoContent(); + .contentType(ActuatorMediaType.V2_JSON).syncBody(Collections.emptyMap()) + .exchange().expectStatus().isNoContent(); verify(this.loggingSystem).setLogLevel("ROOT", null); } diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/MailHealthIndicatorTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/mail/MailHealthIndicatorTests.java similarity index 93% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/MailHealthIndicatorTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/mail/MailHealthIndicatorTests.java index 9ee62c4ed1..2a19b922b6 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/MailHealthIndicatorTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/mail/MailHealthIndicatorTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2016 the original author or authors. + * Copyright 2012-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.health; +package org.springframework.boot.actuate.mail; import java.util.Properties; @@ -30,6 +30,8 @@ import javax.mail.URLName; import org.junit.Before; import org.junit.Test; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.Status; import org.springframework.mail.javamail.JavaMailSenderImpl; import static org.assertj.core.api.Assertions.assertThat; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/HeapDumpWebEndpointTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/management/HeapDumpWebEndpointTests.java similarity index 96% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/HeapDumpWebEndpointTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/management/HeapDumpWebEndpointTests.java index 6ee9fda1bb..68de4c9412 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/HeapDumpWebEndpointTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/management/HeapDumpWebEndpointTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint.web; +package org.springframework.boot.actuate.management; import java.util.concurrent.CountDownLatch; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/HeapDumpWebEndpointWebIntegrationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/management/HeapDumpWebEndpointWebIntegrationTests.java similarity index 95% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/HeapDumpWebEndpointWebIntegrationTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/management/HeapDumpWebEndpointWebIntegrationTests.java index 8d88cd7dba..42b41aca7a 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/HeapDumpWebEndpointWebIntegrationTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/management/HeapDumpWebEndpointWebIntegrationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint.web; +package org.springframework.boot.actuate.management; import java.io.File; import java.io.IOException; @@ -24,6 +24,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.springframework.boot.actuate.endpoint.web.test.WebEndpointRunners; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -41,7 +42,7 @@ import static org.assertj.core.api.Assertions.assertThat; * @author Phillip Webb * @author Andy Wilkinson */ -@RunWith(WebEndpointsRunner.class) +@RunWith(WebEndpointRunners.class) public class HeapDumpWebEndpointWebIntegrationTests { private static WebTestClient client; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/ThreadDumpEndpointTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/management/ThreadDumpEndpointTests.java similarity index 94% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/ThreadDumpEndpointTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/management/ThreadDumpEndpointTests.java index ef5ec022fc..29725007fd 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/ThreadDumpEndpointTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/management/ThreadDumpEndpointTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.management; import org.junit.Test; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/MetricsEndpointMvcIntegrationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/MetricsEndpointMvcIntegrationTests.java similarity index 94% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/MetricsEndpointMvcIntegrationTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/MetricsEndpointMvcIntegrationTests.java index 27d8f1fd6e..b05f329f9e 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/MetricsEndpointMvcIntegrationTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/MetricsEndpointMvcIntegrationTests.java @@ -14,15 +14,14 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint.web; +package org.springframework.boot.actuate.metrics; import java.util.Arrays; import org.junit.Test; import org.junit.runner.RunWith; -import org.springframework.boot.actuate.endpoint.MetricsEndpoint; -import org.springframework.boot.actuate.metrics.Metric; +import org.springframework.boot.actuate.endpoint.web.test.WebEndpointRunners; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.test.web.reactive.server.WebTestClient; @@ -33,7 +32,7 @@ import org.springframework.test.web.reactive.server.WebTestClient; * @author Andy Wilkinson * @author Sergei Egorov */ -@RunWith(WebEndpointsRunner.class) +@RunWith(WebEndpointRunners.class) public class MetricsEndpointMvcIntegrationTests { private static WebTestClient client; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/MetricsEndpointTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/MetricsEndpointTests.java similarity index 97% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/MetricsEndpointTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/MetricsEndpointTests.java index 041a852ccd..3a6f7e8f11 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/MetricsEndpointTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/MetricsEndpointTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.metrics; import java.util.Arrays; import java.util.Collection; @@ -24,7 +24,6 @@ import java.util.Map; import org.junit.Test; -import org.springframework.boot.actuate.metrics.Metric; import org.springframework.core.Ordered; import static org.assertj.core.api.Assertions.assertThat; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/SystemPublicMetricsTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/SystemPublicMetricsTests.java similarity index 95% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/SystemPublicMetricsTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/SystemPublicMetricsTests.java index 085cb1c43b..ee11f6f140 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/SystemPublicMetricsTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/SystemPublicMetricsTests.java @@ -14,15 +14,13 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.metrics; import java.util.HashMap; import java.util.Map; import org.junit.Test; -import org.springframework.boot.actuate.metrics.Metric; - import static org.assertj.core.api.Assertions.assertThat; /** diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/TomcatPublicMetricsTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/TomcatPublicMetricsTests.java similarity index 94% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/TomcatPublicMetricsTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/TomcatPublicMetricsTests.java index 9e0f31ee80..5c634e1c32 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/TomcatPublicMetricsTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/TomcatPublicMetricsTests.java @@ -14,13 +14,12 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.metrics; import java.util.Iterator; import org.junit.Test; -import org.springframework.boot.actuate.metrics.Metric; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext; import org.springframework.context.annotation.Bean; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/MetricReaderPublicMetricsTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/reader/MetricReaderPublicMetricsTests.java similarity index 92% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/MetricReaderPublicMetricsTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/reader/MetricReaderPublicMetricsTests.java index 1f6652811c..0f88334fcf 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/MetricReaderPublicMetricsTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/reader/MetricReaderPublicMetricsTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.metrics.reader; import java.util.ArrayList; import java.util.List; @@ -22,7 +22,6 @@ import java.util.List; import org.junit.Test; import org.springframework.boot.actuate.metrics.Metric; -import org.springframework.boot.actuate.metrics.reader.MetricReader; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.BDDMockito.given; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/RichGaugeReaderPublicMetricsTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/rich/RichGaugeReaderPublicMetricsTests.java similarity index 94% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/RichGaugeReaderPublicMetricsTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/rich/RichGaugeReaderPublicMetricsTests.java index 356b5d7334..f42ba5a0b7 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/RichGaugeReaderPublicMetricsTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/rich/RichGaugeReaderPublicMetricsTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.metrics.rich; import java.util.Date; import java.util.HashMap; @@ -23,7 +23,6 @@ import java.util.Map; import org.junit.Test; import org.springframework.boot.actuate.metrics.Metric; -import org.springframework.boot.actuate.metrics.rich.InMemoryRichGaugeRepository; import static org.assertj.core.api.Assertions.assertThat; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/MongoHealthIndicatorTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/mongo/MongoHealthIndicatorTests.java similarity index 71% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/MongoHealthIndicatorTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/mongo/MongoHealthIndicatorTests.java index d3b42692e8..3d391d9d25 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/MongoHealthIndicatorTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/mongo/MongoHealthIndicatorTests.java @@ -14,18 +14,15 @@ * limitations under the License. */ -package org.springframework.boot.actuate.health; +package org.springframework.boot.actuate.mongo; import com.mongodb.MongoException; import org.bson.Document; import org.junit.After; import org.junit.Test; -import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration; -import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration; -import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; -import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration; -import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.Status; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.data.mongodb.core.MongoTemplate; @@ -50,19 +47,6 @@ public class MongoHealthIndicatorTests { } } - @Test - public void indicatorExists() { - this.context = new AnnotationConfigApplicationContext( - PropertyPlaceholderAutoConfiguration.class, MongoAutoConfiguration.class, - MongoDataAutoConfiguration.class, EndpointAutoConfiguration.class, - HealthIndicatorAutoConfiguration.class); - assertThat(this.context.getBeanNamesForType(MongoTemplate.class).length) - .isEqualTo(1); - MongoHealthIndicator healthIndicator = this.context - .getBean(MongoHealthIndicator.class); - assertThat(healthIndicator).isNotNull(); - } - @Test public void mongoIsUp() throws Exception { Document commandResult = mock(Document.class); diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/Neo4jHealthIndicatorTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/neo4j/Neo4jHealthIndicatorTests.java similarity index 94% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/Neo4jHealthIndicatorTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/neo4j/Neo4jHealthIndicatorTests.java index d16442a766..e7e94d35d1 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/Neo4jHealthIndicatorTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/neo4j/Neo4jHealthIndicatorTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.health; +package org.springframework.boot.actuate.neo4j; import java.util.ArrayList; import java.util.Collections; @@ -30,6 +30,9 @@ import org.neo4j.ogm.model.Result; import org.neo4j.ogm.session.Session; import org.neo4j.ogm.session.SessionFactory; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.Status; + import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/RedisHealthIndicatorTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/redis/RedisHealthIndicatorTests.java similarity index 96% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/RedisHealthIndicatorTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/redis/RedisHealthIndicatorTests.java index ed40299df3..836a515d77 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/RedisHealthIndicatorTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/redis/RedisHealthIndicatorTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.health; +package org.springframework.boot.actuate.redis; import java.util.Arrays; import java.util.List; @@ -22,6 +22,8 @@ import java.util.Properties; import org.junit.Test; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.Status; import org.springframework.data.redis.RedisConnectionFailureException; import org.springframework.data.redis.connection.ClusterInfo; import org.springframework.data.redis.connection.RedisClusterConnection; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/RedisReactiveHealthIndicatorTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicatorTests.java similarity index 95% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/RedisReactiveHealthIndicatorTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicatorTests.java index 9aa05acab9..6d90134599 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/RedisReactiveHealthIndicatorTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicatorTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.health; +package org.springframework.boot.actuate.redis; import java.util.Properties; @@ -22,6 +22,8 @@ import org.junit.Test; import reactor.core.publisher.Mono; import reactor.test.StepVerifier; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.Status; import org.springframework.data.redis.RedisConnectionFailureException; import org.springframework.data.redis.connection.ReactiveRedisConnection; import org.springframework.data.redis.connection.ReactiveRedisConnectionFactory; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/SolrHealthIndicatorTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/solr/SolrHealthIndicatorTests.java similarity index 77% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/SolrHealthIndicatorTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/solr/SolrHealthIndicatorTests.java index c85ef952aa..0f554e4d60 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/SolrHealthIndicatorTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/solr/SolrHealthIndicatorTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.health; +package org.springframework.boot.actuate.solr; import java.io.IOException; @@ -24,10 +24,8 @@ import org.apache.solr.common.util.NamedList; import org.junit.After; import org.junit.Test; -import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration; -import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration; -import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; -import org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.Status; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import static org.assertj.core.api.Assertions.assertThat; @@ -52,18 +50,6 @@ public class SolrHealthIndicatorTests { } } - @Test - public void indicatorExists() { - this.context = new AnnotationConfigApplicationContext( - PropertyPlaceholderAutoConfiguration.class, SolrAutoConfiguration.class, - EndpointAutoConfiguration.class, HealthIndicatorAutoConfiguration.class); - assertThat(this.context.getBeanNamesForType(SolrClient.class).length) - .isEqualTo(1); - SolrHealthIndicator healthIndicator = this.context - .getBean(SolrHealthIndicator.class); - assertThat(healthIndicator).isNotNull(); - } - @Test public void solrIsUp() throws Exception { SolrClient solrClient = mock(SolrClient.class); diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/DiskSpaceHealthIndicatorTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/system/DiskSpaceHealthIndicatorTests.java similarity index 85% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/DiskSpaceHealthIndicatorTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/system/DiskSpaceHealthIndicatorTests.java index e77d1f7080..8907cd9f58 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/DiskSpaceHealthIndicatorTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/system/DiskSpaceHealthIndicatorTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.health; +package org.springframework.boot.actuate.system; import java.io.File; @@ -25,6 +25,10 @@ import org.junit.rules.ExpectedException; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.HealthIndicator; +import org.springframework.boot.actuate.health.Status; + import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.BDDMockito.given; @@ -50,8 +54,8 @@ public class DiskSpaceHealthIndicatorTests { MockitoAnnotations.initMocks(this); given(this.fileMock.exists()).willReturn(true); given(this.fileMock.canRead()).willReturn(true); - this.healthIndicator = new DiskSpaceHealthIndicator( - createProperties(this.fileMock, THRESHOLD_BYTES)); + this.healthIndicator = new DiskSpaceHealthIndicator(this.fileMock, + THRESHOLD_BYTES); } @Test @@ -76,12 +80,4 @@ public class DiskSpaceHealthIndicatorTests { assertThat(health.getDetails().get("total")).isEqualTo(THRESHOLD_BYTES * 10); } - private DiskSpaceHealthIndicatorProperties createProperties(File path, - long threshold) { - DiskSpaceHealthIndicatorProperties properties = new DiskSpaceHealthIndicatorProperties(); - properties.setPath(path); - properties.setThreshold(threshold); - return properties; - } - } diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/TraceEndpointTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/trace/TraceEndpointTests.java similarity index 83% rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/TraceEndpointTests.java rename to spring-boot-actuator/src/test/java/org/springframework/boot/actuate/trace/TraceEndpointTests.java index 817772e11e..5d3af1538b 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/TraceEndpointTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/trace/TraceEndpointTests.java @@ -14,16 +14,12 @@ * limitations under the License. */ -package org.springframework.boot.actuate.endpoint; +package org.springframework.boot.actuate.trace; import java.util.Collections; import org.junit.Test; -import org.springframework.boot.actuate.trace.InMemoryTraceRepository; -import org.springframework.boot.actuate.trace.Trace; -import org.springframework.boot.actuate.trace.TraceRepository; - import static org.assertj.core.api.Assertions.assertThat; /** diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/trace/WebRequestTraceFilterTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/trace/WebRequestTraceFilterTests.java index 3859d61bc9..a6fbd41a78 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/trace/WebRequestTraceFilterTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/trace/WebRequestTraceFilterTests.java @@ -29,7 +29,7 @@ import javax.servlet.ServletException; import org.junit.Test; import org.springframework.boot.actuate.trace.TraceProperties.Include; -import org.springframework.boot.autoconfigure.web.servlet.error.DefaultErrorAttributes; +import org.springframework.boot.web.servlet.error.DefaultErrorAttributes; import org.springframework.mock.web.MockFilterChain; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; diff --git a/spring-boot-actuator/src/test/resources/cache/test-ehcache.xml b/spring-boot-actuator/src/test/resources/cache/test-ehcache.xml index 9a50bbab4b..cdee1d0503 100644 --- a/spring-boot-actuator/src/test/resources/cache/test-ehcache.xml +++ b/spring-boot-actuator/src/test/resources/cache/test-ehcache.xml @@ -1,10 +1,6 @@ - - - - - \ No newline at end of file + diff --git a/spring-boot-actuator/src/test/resources/cache/test-hazelcast.xml b/spring-boot-actuator/src/test/resources/cache/test-hazelcast.xml index 81f4b0e933..fe46b433f3 100644 --- a/spring-boot-actuator/src/test/resources/cache/test-hazelcast.xml +++ b/spring-boot-actuator/src/test/resources/cache/test-hazelcast.xml @@ -1,15 +1,12 @@ - - - diff --git a/spring-boot-actuator/src/test/resources/cache/test-infinispan.xml b/spring-boot-actuator/src/test/resources/cache/test-infinispan.xml index 5e82dcde50..741fb6292b 100644 --- a/spring-boot-actuator/src/test/resources/cache/test-infinispan.xml +++ b/spring-boot-actuator/src/test/resources/cache/test-infinispan.xml @@ -1,10 +1,8 @@ - - diff --git a/spring-boot-actuator/src/test/resources/hazelcast.xml b/spring-boot-actuator/src/test/resources/hazelcast.xml index 850ecb91c1..b45ed52520 100644 --- a/spring-boot-actuator/src/test/resources/hazelcast.xml +++ b/spring-boot-actuator/src/test/resources/hazelcast.xml @@ -2,14 +2,11 @@ xsi:schemaLocation="http://www.hazelcast.com/schema/config hazelcast-config-3.8.xsd" xmlns="http://www.hazelcast.com/schema/config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - - - diff --git a/spring-boot-autoconfigure/pom.xml b/spring-boot-autoconfigure/pom.xml index 66fb03bfde..657a83dc45 100755 --- a/spring-boot-autoconfigure/pom.xml +++ b/spring-boot-autoconfigure/pom.xml @@ -768,6 +768,5 @@ tomcat-embed-jasper test - diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration.java index ab84f1de95..ede3c1e193 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration.java @@ -31,6 +31,7 @@ import org.springframework.boot.autoconfigure.condition.SpringBootCondition; import org.springframework.boot.autoconfigure.jdbc.DataSourceInitializerPostProcessor.Registrar; import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvidersConfiguration; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.boot.jdbc.EmbeddedDatabaseConnection; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceInitializer.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceInitializer.java index f62b23806c..e177e9a96c 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceInitializer.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceInitializer.java @@ -27,6 +27,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.boot.context.config.ResourceNotFoundException; +import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationListener; import org.springframework.core.io.Resource; diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceProperties.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceProperties.java index c3c0a0f1a3..33fac74896 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceProperties.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceProperties.java @@ -28,6 +28,7 @@ import org.springframework.beans.factory.BeanClassLoaderAware; import org.springframework.beans.factory.BeanCreationException; import org.springframework.beans.factory.InitializingBean; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.boot.jdbc.DatabaseDriver; import org.springframework.boot.jdbc.EmbeddedDatabaseConnection; import org.springframework.context.EnvironmentAware; diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProvidersConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProvidersConfiguration.java index c5102405ed..88b1afec01 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProvidersConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProvidersConfiguration.java @@ -20,6 +20,10 @@ import com.zaxxer.hikari.HikariDataSource; import org.apache.commons.dbcp2.BasicDataSource; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.jdbc.metadata.CommonsDbcp2DataSourcePoolMetadata; +import org.springframework.boot.jdbc.metadata.DataSourcePoolMetadataProvider; +import org.springframework.boot.jdbc.metadata.HikariDataSourcePoolMetadata; +import org.springframework.boot.jdbc.metadata.TomcatDataSourcePoolMetadata; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration.java index ab08af57ec..9cd04f9e81 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration.java @@ -36,9 +36,9 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.data.jpa.EntityManagerFactoryDependsOnPostProcessor; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder; import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/error/AbstractErrorController.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/error/AbstractErrorController.java index efeb256f2f..1a76f641ac 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/error/AbstractErrorController.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/error/AbstractErrorController.java @@ -23,6 +23,8 @@ import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.springframework.boot.web.servlet.error.ErrorAttributes; +import org.springframework.boot.web.servlet.error.ErrorController; import org.springframework.core.annotation.AnnotationAwareOrderComparator; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Controller; diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/error/BasicErrorController.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/error/BasicErrorController.java index f76710b2c7..ba3616421e 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/error/BasicErrorController.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/error/BasicErrorController.java @@ -25,6 +25,7 @@ import javax.servlet.http.HttpServletResponse; import org.springframework.boot.autoconfigure.web.ErrorProperties; import org.springframework.boot.autoconfigure.web.ErrorProperties.IncludeStacktrace; +import org.springframework.boot.web.servlet.error.ErrorAttributes; import org.springframework.boot.web.servlet.server.AbstractServletWebServerFactory; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/error/ErrorMvcAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/error/ErrorMvcAutoConfiguration.java index c7caf1f4fc..13b63e703a 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/error/ErrorMvcAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/error/ErrorMvcAutoConfiguration.java @@ -51,6 +51,9 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties import org.springframework.boot.web.server.ErrorPage; import org.springframework.boot.web.server.ErrorPageRegistrar; import org.springframework.boot.web.server.ErrorPageRegistry; +import org.springframework.boot.web.servlet.error.DefaultErrorAttributes; +import org.springframework.boot.web.servlet.error.ErrorAttributes; +import org.springframework.boot.web.servlet.error.ErrorController; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ConditionContext; diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfigurationTests.java index 82d59cfcac..09aeb8158f 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfigurationTests.java @@ -38,8 +38,8 @@ import org.mockito.InOrder; import org.springframework.beans.factory.BeanCreationException; import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; -import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder; import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration; +import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.boot.jdbc.SchemaManagement; import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder; import org.springframework.boot.test.util.TestPropertyValues; diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourceInitializerTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourceInitializerTests.java index 380f685e78..8b7d95f5d4 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourceInitializerTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourceInitializerTests.java @@ -35,6 +35,7 @@ import org.springframework.beans.factory.BeanCreationException; import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.boot.test.util.TestPropertyValues; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourceConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourceConfigurationTests.java index a3862737b4..430cfa45e2 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourceConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourceConfigurationTests.java @@ -28,6 +28,7 @@ import org.junit.Test; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.boot.test.util.TestPropertyValues; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jooq/JooqAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jooq/JooqAutoConfigurationTests.java index ba40da1e50..18193bba9d 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jooq/JooqAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jooq/JooqAutoConfigurationTests.java @@ -36,7 +36,7 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; -import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder; +import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.boot.test.util.TestPropertyValues; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfigurationTests.java index d885290546..49a78c0cbf 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfigurationTests.java @@ -32,8 +32,8 @@ import org.junit.rules.TemporaryFolder; import org.springframework.beans.factory.BeanCreationException; import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; -import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder; import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration; +import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.boot.liquibase.CommonsLoggingLiquibaseLogger; import org.springframework.boot.liquibase.LiquibaseServiceLocatorApplicationListener; import org.springframework.boot.test.rule.OutputCapture; diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/transaction/TransactionAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/transaction/TransactionAutoConfigurationTests.java index 76be4ca7db..4ba702cecb 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/transaction/TransactionAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/transaction/TransactionAutoConfigurationTests.java @@ -25,8 +25,8 @@ import org.junit.After; import org.junit.Test; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder; import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration; +import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.boot.test.util.TestPropertyValues; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; diff --git a/spring-boot-dependencies/pom.xml b/spring-boot-dependencies/pom.xml index eae2e7f393..bbe853c231 100644 --- a/spring-boot-dependencies/pom.xml +++ b/spring-boot-dependencies/pom.xml @@ -245,6 +245,11 @@ spring-boot-actuator 2.0.0.BUILD-SNAPSHOT + + org.springframework.boot + spring-boot-actuator-autoconfigure + 2.0.0.BUILD-SNAPSHOT + org.springframework.boot spring-boot-autoconfigure diff --git a/spring-boot-docs/pom.xml b/spring-boot-docs/pom.xml index 84ba8a3fd1..8077ef73a6 100644 --- a/spring-boot-docs/pom.xml +++ b/spring-boot-docs/pom.xml @@ -27,6 +27,10 @@ org.springframework.boot spring-boot-actuator + + org.springframework.boot + spring-boot-actuator-autoconfigure + org.springframework.boot spring-boot-autoconfigure @@ -923,10 +927,10 @@ org.springframework.boot - spring-boot-actuator + spring-boot-actuator-autoconfigure ${project.version} - ${project.build.directory}/auto-config/spring-boot-actuator + ${project.build.directory}/auto-config/spring-boot-actuator-autoconfigure META-INF/spring.factories diff --git a/spring-boot-docs/src/main/asciidoc/appendix-auto-configuration-classes.adoc b/spring-boot-docs/src/main/asciidoc/appendix-auto-configuration-classes.adoc index b720657f58..53e331a3e7 100644 --- a/spring-boot-docs/src/main/asciidoc/appendix-auto-configuration-classes.adoc +++ b/spring-boot-docs/src/main/asciidoc/appendix-auto-configuration-classes.adoc @@ -18,7 +18,7 @@ include::../../../target/generated-resources/auto-configuration-classes-spring-b [[auto-configuration-classes-from-actuator]] -=== From the "`spring-boot-actuator`" module -The following auto-configuration classes are from the `spring-boot-actuator` module: +=== From the "`spring-boot-actuator-autoconfigure`" module +The following auto-configuration classes are from the `spring-boot-actuator-autoconfigure` module: -include::../../../target/generated-resources/auto-configuration-classes-spring-boot-actuator.adoc[] +include::../../../target/generated-resources/auto-configuration-classes-spring-boot-actuator-autoconfigure.adoc[] diff --git a/spring-boot-docs/src/main/java/org/springframework/boot/jdbc/BasicDataSourceExample.java b/spring-boot-docs/src/main/java/org/springframework/boot/jdbc/BasicDataSourceExample.java index 77810befd1..ca1d39d177 100644 --- a/spring-boot-docs/src/main/java/org/springframework/boot/jdbc/BasicDataSourceExample.java +++ b/spring-boot-docs/src/main/java/org/springframework/boot/jdbc/BasicDataSourceExample.java @@ -18,7 +18,6 @@ package org.springframework.boot.jdbc; import javax.sql.DataSource; -import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/spring-boot-docs/src/main/java/org/springframework/boot/jdbc/SimpleDataSourceExample.java b/spring-boot-docs/src/main/java/org/springframework/boot/jdbc/SimpleDataSourceExample.java index cfc47471bd..e8139c86fb 100644 --- a/spring-boot-docs/src/main/java/org/springframework/boot/jdbc/SimpleDataSourceExample.java +++ b/spring-boot-docs/src/main/java/org/springframework/boot/jdbc/SimpleDataSourceExample.java @@ -20,7 +20,6 @@ import javax.sql.DataSource; import com.zaxxer.hikari.HikariDataSource; -import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/spring-boot-docs/src/main/java/org/springframework/boot/jdbc/SimpleTwoDataSourcesExample.java b/spring-boot-docs/src/main/java/org/springframework/boot/jdbc/SimpleTwoDataSourcesExample.java index 27d2fc0365..ba9f55f0cd 100644 --- a/spring-boot-docs/src/main/java/org/springframework/boot/jdbc/SimpleTwoDataSourcesExample.java +++ b/spring-boot-docs/src/main/java/org/springframework/boot/jdbc/SimpleTwoDataSourcesExample.java @@ -20,7 +20,6 @@ import javax.sql.DataSource; import org.apache.commons.dbcp2.BasicDataSource; -import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder; import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; diff --git a/spring-boot-full-build/pom.xml b/spring-boot-full-build/pom.xml index 087437e2d9..73d63206d1 100644 --- a/spring-boot-full-build/pom.xml +++ b/spring-boot-full-build/pom.xml @@ -53,6 +53,7 @@ ../spring-boot-autoconfigure ../spring-boot-test-autoconfigure ../spring-boot-actuator + ../spring-boot-actuator-autoconfigure ../spring-boot-devtools ../spring-boot-starters ../spring-boot-cli diff --git a/spring-boot-parent/src/checkstyle/import-control.xml b/spring-boot-parent/src/checkstyle/import-control.xml index cc52288841..25f0258f8b 100644 --- a/spring-boot-parent/src/checkstyle/import-control.xml +++ b/spring-boot-parent/src/checkstyle/import-control.xml @@ -95,6 +95,9 @@ + + + @@ -125,4 +128,4 @@ - \ No newline at end of file + diff --git a/spring-boot-samples/spring-boot-sample-actuator-custom-security/src/test/java/sample/actuator/customsecurity/InsecureManagementPortAndPathSampleActuatorApplicationTests.java b/spring-boot-samples/spring-boot-sample-actuator-custom-security/src/test/java/sample/actuator/customsecurity/InsecureManagementPortAndPathSampleActuatorApplicationTests.java index 640c44af09..0ec25f7352 100644 --- a/spring-boot-samples/spring-boot-sample-actuator-custom-security/src/test/java/sample/actuator/customsecurity/InsecureManagementPortAndPathSampleActuatorApplicationTests.java +++ b/spring-boot-samples/spring-boot-sample-actuator-custom-security/src/test/java/sample/actuator/customsecurity/InsecureManagementPortAndPathSampleActuatorApplicationTests.java @@ -19,7 +19,7 @@ package sample.actuator.customsecurity; import org.junit.Test; import org.junit.runner.RunWith; -import org.springframework.boot.actuate.web.server.LocalManagementPort; +import org.springframework.boot.actuate.autoconfigure.web.server.LocalManagementPort; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.boot.test.web.client.TestRestTemplate; diff --git a/spring-boot-samples/spring-boot-sample-actuator-noweb/src/test/java/sample/actuator/noweb/SampleActuatorNoWebApplicationTests.java b/spring-boot-samples/spring-boot-sample-actuator-noweb/src/test/java/sample/actuator/noweb/SampleActuatorNoWebApplicationTests.java index 5bba7e412a..0b624a9074 100644 --- a/spring-boot-samples/spring-boot-sample-actuator-noweb/src/test/java/sample/actuator/noweb/SampleActuatorNoWebApplicationTests.java +++ b/spring-boot-samples/spring-boot-sample-actuator-noweb/src/test/java/sample/actuator/noweb/SampleActuatorNoWebApplicationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2016 the original author or authors. + * Copyright 2012-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,7 +20,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.actuate.endpoint.MetricsEndpoint; +import org.springframework.boot.actuate.metrics.MetricsEndpoint; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit4.SpringRunner; diff --git a/spring-boot-samples/spring-boot-sample-actuator-ui/src/test/java/sample/actuator/ui/SampleActuatorUiApplicationPortTests.java b/spring-boot-samples/spring-boot-sample-actuator-ui/src/test/java/sample/actuator/ui/SampleActuatorUiApplicationPortTests.java index 6a5815da1a..63dc25d05c 100644 --- a/spring-boot-samples/spring-boot-sample-actuator-ui/src/test/java/sample/actuator/ui/SampleActuatorUiApplicationPortTests.java +++ b/spring-boot-samples/spring-boot-sample-actuator-ui/src/test/java/sample/actuator/ui/SampleActuatorUiApplicationPortTests.java @@ -21,7 +21,7 @@ import java.util.Map; import org.junit.Test; import org.junit.runner.RunWith; -import org.springframework.boot.actuate.web.server.LocalManagementPort; +import org.springframework.boot.actuate.autoconfigure.web.server.LocalManagementPort; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.boot.test.web.client.TestRestTemplate; diff --git a/spring-boot-samples/spring-boot-sample-actuator/src/test/java/sample/actuator/ManagementAddressActuatorApplicationTests.java b/spring-boot-samples/spring-boot-sample-actuator/src/test/java/sample/actuator/ManagementAddressActuatorApplicationTests.java index 3499b76d7b..8be0f0cb06 100644 --- a/spring-boot-samples/spring-boot-sample-actuator/src/test/java/sample/actuator/ManagementAddressActuatorApplicationTests.java +++ b/spring-boot-samples/spring-boot-sample-actuator/src/test/java/sample/actuator/ManagementAddressActuatorApplicationTests.java @@ -21,7 +21,7 @@ import java.util.Map; import org.junit.Test; import org.junit.runner.RunWith; -import org.springframework.boot.actuate.web.server.LocalManagementPort; +import org.springframework.boot.actuate.autoconfigure.web.server.LocalManagementPort; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.boot.test.web.client.TestRestTemplate; diff --git a/spring-boot-samples/spring-boot-sample-actuator/src/test/java/sample/actuator/ManagementPortAndPathSampleActuatorApplicationTests.java b/spring-boot-samples/spring-boot-sample-actuator/src/test/java/sample/actuator/ManagementPortAndPathSampleActuatorApplicationTests.java index 37260bc76a..90cfb8719c 100644 --- a/spring-boot-samples/spring-boot-sample-actuator/src/test/java/sample/actuator/ManagementPortAndPathSampleActuatorApplicationTests.java +++ b/spring-boot-samples/spring-boot-sample-actuator/src/test/java/sample/actuator/ManagementPortAndPathSampleActuatorApplicationTests.java @@ -21,7 +21,7 @@ import java.util.Map; import org.junit.Test; import org.junit.runner.RunWith; -import org.springframework.boot.actuate.web.server.LocalManagementPort; +import org.springframework.boot.actuate.autoconfigure.web.server.LocalManagementPort; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.boot.test.web.client.TestRestTemplate; diff --git a/spring-boot-samples/spring-boot-sample-actuator/src/test/java/sample/actuator/ManagementPortSampleActuatorApplicationTests.java b/spring-boot-samples/spring-boot-sample-actuator/src/test/java/sample/actuator/ManagementPortSampleActuatorApplicationTests.java index 082d7356ab..769cba76ab 100644 --- a/spring-boot-samples/spring-boot-sample-actuator/src/test/java/sample/actuator/ManagementPortSampleActuatorApplicationTests.java +++ b/spring-boot-samples/spring-boot-sample-actuator/src/test/java/sample/actuator/ManagementPortSampleActuatorApplicationTests.java @@ -21,7 +21,7 @@ import java.util.Map; import org.junit.Test; import org.junit.runner.RunWith; -import org.springframework.boot.actuate.web.server.LocalManagementPort; +import org.springframework.boot.actuate.autoconfigure.web.server.LocalManagementPort; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.boot.test.web.client.TestRestTemplate; diff --git a/spring-boot-samples/spring-boot-sample-metrics-redis/src/main/java/sample/metrics/redis/AggregateMetricsConfiguration.java b/spring-boot-samples/spring-boot-sample-metrics-redis/src/main/java/sample/metrics/redis/AggregateMetricsConfiguration.java index ab098633d4..7ce9da8dd6 100644 --- a/spring-boot-samples/spring-boot-sample-metrics-redis/src/main/java/sample/metrics/redis/AggregateMetricsConfiguration.java +++ b/spring-boot-samples/spring-boot-sample-metrics-redis/src/main/java/sample/metrics/redis/AggregateMetricsConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2016 the original author or authors. + * Copyright 2012-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,11 +16,11 @@ package sample.metrics.redis; -import org.springframework.boot.actuate.endpoint.MetricReaderPublicMetrics; -import org.springframework.boot.actuate.endpoint.PublicMetrics; +import org.springframework.boot.actuate.metrics.PublicMetrics; import org.springframework.boot.actuate.metrics.aggregate.AggregateMetricReader; import org.springframework.boot.actuate.metrics.export.MetricExportProperties; import org.springframework.boot.actuate.metrics.reader.MetricReader; +import org.springframework.boot.actuate.metrics.reader.MetricReaderPublicMetrics; import org.springframework.boot.actuate.metrics.repository.redis.RedisMetricRepository; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/spring-boot-starters/spring-boot-starter-actuator/pom.xml b/spring-boot-starters/spring-boot-starter-actuator/pom.xml index d6dc0fdfe4..6d7df39166 100644 --- a/spring-boot-starters/spring-boot-starter-actuator/pom.xml +++ b/spring-boot-starters/spring-boot-starter-actuator/pom.xml @@ -25,7 +25,7 @@ org.springframework.boot - spring-boot-actuator + spring-boot-actuator-autoconfigure diff --git a/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/web/servlet/WebMvcTypeExcludeFilter.java b/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/web/servlet/WebMvcTypeExcludeFilter.java index c385b3b3e7..0c1eaaa703 100644 --- a/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/web/servlet/WebMvcTypeExcludeFilter.java +++ b/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/web/servlet/WebMvcTypeExcludeFilter.java @@ -21,12 +21,12 @@ import java.util.Collections; import java.util.LinkedHashSet; import java.util.Set; -import org.springframework.boot.autoconfigure.web.servlet.error.ErrorAttributes; import org.springframework.boot.context.TypeExcludeFilter; import org.springframework.boot.jackson.JsonComponent; import org.springframework.boot.test.autoconfigure.filter.AnnotationCustomizableTypeExcludeFilter; import org.springframework.boot.web.servlet.DelegatingFilterProxyRegistrationBean; import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.boot.web.servlet.error.ErrorAttributes; import org.springframework.context.annotation.ComponentScan.Filter; import org.springframework.core.annotation.AnnotatedElementUtils; import org.springframework.http.converter.HttpMessageConverter; diff --git a/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/web/servlet/mockmvc/WebMvcTestAllControllersIntegrationTests.java b/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/web/servlet/mockmvc/WebMvcTestAllControllersIntegrationTests.java index c85a916293..540a2d4d27 100644 --- a/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/web/servlet/mockmvc/WebMvcTestAllControllersIntegrationTests.java +++ b/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/web/servlet/mockmvc/WebMvcTestAllControllersIntegrationTests.java @@ -24,8 +24,8 @@ import org.junit.rules.ExpectedException; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.web.servlet.error.ErrorAttributes; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.web.servlet.error.ErrorAttributes; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; diff --git a/spring-boot-test/src/main/java/org/springframework/boot/test/context/SpringBootTest.java b/spring-boot-test/src/main/java/org/springframework/boot/test/context/SpringBootTest.java index a3198fb6f3..66701d2b1a 100644 --- a/spring-boot-test/src/main/java/org/springframework/boot/test/context/SpringBootTest.java +++ b/spring-boot-test/src/main/java/org/springframework/boot/test/context/SpringBootTest.java @@ -122,10 +122,10 @@ public @interface SpringBootTest { MOCK(false), /** - * Creates a (reactive) web application context and sets a {@code server.port=0} - * {@link Environment} property (which usually triggers listening on a random - * port). Often used in conjunction with a {@link LocalServerPort} injected field - * on the test. + * Creates a web application context (reactive or servlet based) and sets a + * {@code server.port=0} {@link Environment} property (which usually triggers + * listening on a random port). Often used in conjunction with a + * {@link LocalServerPort} injected field on the test. */ RANDOM_PORT(true), diff --git a/spring-boot/pom.xml b/spring-boot/pom.xml index 3ffa2ab15d..9a9fa2fee0 100644 --- a/spring-boot/pom.xml +++ b/spring-boot/pom.xml @@ -74,6 +74,11 @@ sendgrid-java true + + com.zaxxer + HikariCP + true + io.projectreactor.ipc reactor-netty @@ -99,6 +104,11 @@ junit true + + org.apache.commons + commons-dbcp2 + true + org.apache.httpcomponents httpclient @@ -124,6 +134,11 @@ tomcat-embed-jasper true + + org.apache.tomcat + tomcat-jdbc + true + org.assertj assertj-core @@ -159,11 +174,6 @@ jetty-webapp true - - org.glassfish.jersey.core - jersey-server - true - org.hamcrest hamcrest-library @@ -326,21 +336,6 @@ jaybird-jdk18 test - - org.glassfish.jersey.containers - jersey-container-servlet-core - test - - - org.glassfish.jersey.ext - jersey-spring4 - true - - - org.glassfish.jersey.media - jersey-media-json-jackson - test - org.hsqldb hsqldb diff --git a/spring-boot/src/main/java/org/springframework/boot/context/properties/bind/convert/BinderConversionService.java b/spring-boot/src/main/java/org/springframework/boot/context/properties/bind/convert/BinderConversionService.java index 9179579e78..fcdf8be6d5 100644 --- a/spring-boot/src/main/java/org/springframework/boot/context/properties/bind/convert/BinderConversionService.java +++ b/spring-boot/src/main/java/org/springframework/boot/context/properties/bind/convert/BinderConversionService.java @@ -32,7 +32,7 @@ import org.springframework.format.datetime.DateFormatterRegistrar; import org.springframework.format.support.DefaultFormattingConversionService; /** - * Internal {@link ConversionService} used by the {@link Binder}. + * {@link ConversionService} used by the {@link Binder}. * * @author Phillip Webb * @author Stephane Nicoll diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/DefaultEndpointPathResolver.java b/spring-boot/src/main/java/org/springframework/boot/endpoint/DefaultEndpointPathResolver.java deleted file mode 100644 index 919ec4bed6..0000000000 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/DefaultEndpointPathResolver.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2012-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.endpoint; - -/** - * {@link EndpointPathResolver} implementation that does not support resolving endpoint - * paths. - * - * @author Madhura Bhave - * @since 2.0.0 - */ -public class DefaultEndpointPathResolver implements EndpointPathResolver { - - @Override - public String resolvePath(String endpointId) { - throw new UnsupportedOperationException("Not supported: Endpoints not available"); - } - -} diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/web/mvc/package-info.java b/spring-boot/src/main/java/org/springframework/boot/endpoint/web/mvc/package-info.java deleted file mode 100644 index f2874cd1ff..0000000000 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/web/mvc/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2012-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Spring MVC web endpoint support. - */ -package org.springframework.boot.endpoint.web.mvc; diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/web/package-info.java b/spring-boot/src/main/java/org/springframework/boot/endpoint/web/package-info.java deleted file mode 100644 index 8c0c6c9d85..0000000000 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/web/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2012-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Web endpoint support. - */ -package org.springframework.boot.endpoint.web; diff --git a/spring-boot/src/main/java/org/springframework/boot/endpoint/web/reactive/package-info.java b/spring-boot/src/main/java/org/springframework/boot/endpoint/web/reactive/package-info.java deleted file mode 100644 index 98c77dc6f9..0000000000 --- a/spring-boot/src/main/java/org/springframework/boot/endpoint/web/reactive/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2012-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Reactive web endpoint support. - */ -package org.springframework.boot.endpoint.web.reactive; diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceBuilder.java b/spring-boot/src/main/java/org/springframework/boot/jdbc/DataSourceBuilder.java similarity index 97% rename from spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceBuilder.java rename to spring-boot/src/main/java/org/springframework/boot/jdbc/DataSourceBuilder.java index cc1e57fe41..b411959c99 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceBuilder.java +++ b/spring-boot/src/main/java/org/springframework/boot/jdbc/DataSourceBuilder.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.jdbc; +package org.springframework.boot.jdbc; import java.util.HashMap; import java.util.Map; @@ -28,7 +28,6 @@ import org.springframework.boot.context.properties.source.ConfigurationPropertyN import org.springframework.boot.context.properties.source.ConfigurationPropertyNameAliases; import org.springframework.boot.context.properties.source.ConfigurationPropertySource; import org.springframework.boot.context.properties.source.MapConfigurationPropertySource; -import org.springframework.boot.jdbc.DatabaseDriver; import org.springframework.util.ClassUtils; /** @@ -42,7 +41,7 @@ import org.springframework.util.ClassUtils; * * @author Dave Syer * @author Madhura Bhave - * @since 1.1.0 + * @since 2.0.0 */ public class DataSourceBuilder { diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/AbstractDataSourcePoolMetadata.java b/spring-boot/src/main/java/org/springframework/boot/jdbc/metadata/AbstractDataSourcePoolMetadata.java similarity index 91% rename from spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/AbstractDataSourcePoolMetadata.java rename to spring-boot/src/main/java/org/springframework/boot/jdbc/metadata/AbstractDataSourcePoolMetadata.java index e715945ac8..528c3ae0cb 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/AbstractDataSourcePoolMetadata.java +++ b/spring-boot/src/main/java/org/springframework/boot/jdbc/metadata/AbstractDataSourcePoolMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2016 the original author or authors. + * Copyright 2012-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.jdbc.metadata; +package org.springframework.boot.jdbc.metadata; import javax.sql.DataSource; @@ -23,7 +23,7 @@ import javax.sql.DataSource; * * @param the data source type * @author Stephane Nicoll - * @since 1.2.0 + * @since 2.0.0 */ public abstract class AbstractDataSourcePoolMetadata implements DataSourcePoolMetadata { diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/CommonsDbcp2DataSourcePoolMetadata.java b/spring-boot/src/main/java/org/springframework/boot/jdbc/metadata/CommonsDbcp2DataSourcePoolMetadata.java similarity index 90% rename from spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/CommonsDbcp2DataSourcePoolMetadata.java rename to spring-boot/src/main/java/org/springframework/boot/jdbc/metadata/CommonsDbcp2DataSourcePoolMetadata.java index ff33a0c4ab..58e5e29c96 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/CommonsDbcp2DataSourcePoolMetadata.java +++ b/spring-boot/src/main/java/org/springframework/boot/jdbc/metadata/CommonsDbcp2DataSourcePoolMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2015 the original author or authors. + * Copyright 2012-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.jdbc.metadata; +package org.springframework.boot.jdbc.metadata; import javax.sql.DataSource; @@ -24,7 +24,7 @@ import org.apache.commons.dbcp2.BasicDataSource; * {@link DataSourcePoolMetadata} for an Apache Commons DBCP2 {@link DataSource}. * * @author Stephane Nicoll - * @since 1.3.1 + * @since 2.0.0 */ public class CommonsDbcp2DataSourcePoolMetadata extends AbstractDataSourcePoolMetadata { diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadata.java b/spring-boot/src/main/java/org/springframework/boot/jdbc/metadata/DataSourcePoolMetadata.java similarity index 94% rename from spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadata.java rename to spring-boot/src/main/java/org/springframework/boot/jdbc/metadata/DataSourcePoolMetadata.java index d356461247..635cc6b87d 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadata.java +++ b/spring-boot/src/main/java/org/springframework/boot/jdbc/metadata/DataSourcePoolMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2015 the original author or authors. + * Copyright 2012-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.jdbc.metadata; +package org.springframework.boot.jdbc.metadata; import javax.sql.DataSource; @@ -23,7 +23,7 @@ import javax.sql.DataSource; * {@link DataSource} implementations. * * @author Stephane Nicoll - * @since 1.2.0 + * @since 2.0.0 */ public interface DataSourcePoolMetadata { diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProvider.java b/spring-boot/src/main/java/org/springframework/boot/jdbc/metadata/DataSourcePoolMetadataProvider.java similarity index 93% rename from spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProvider.java rename to spring-boot/src/main/java/org/springframework/boot/jdbc/metadata/DataSourcePoolMetadataProvider.java index aac2a816d2..c2ff7da43d 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProvider.java +++ b/spring-boot/src/main/java/org/springframework/boot/jdbc/metadata/DataSourcePoolMetadataProvider.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.jdbc.metadata; +package org.springframework.boot.jdbc.metadata; import javax.sql.DataSource; @@ -22,7 +22,7 @@ import javax.sql.DataSource; * Provide a {@link DataSourcePoolMetadata} based on a {@link DataSource}. * * @author Stephane Nicoll - * @since 1.2.0 + * @since 2.0.0 */ @FunctionalInterface public interface DataSourcePoolMetadataProvider { diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProviders.java b/spring-boot/src/main/java/org/springframework/boot/jdbc/metadata/DataSourcePoolMetadataProviders.java similarity index 96% rename from spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProviders.java rename to spring-boot/src/main/java/org/springframework/boot/jdbc/metadata/DataSourcePoolMetadataProviders.java index ad954f23d0..2d59dfd978 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProviders.java +++ b/spring-boot/src/main/java/org/springframework/boot/jdbc/metadata/DataSourcePoolMetadataProviders.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.jdbc.metadata; +package org.springframework.boot.jdbc.metadata; import java.util.ArrayList; import java.util.Collection; @@ -28,7 +28,7 @@ import javax.sql.DataSource; * {@link DataSourcePoolMetadata} that is found by one of its delegate. * * @author Stephane Nicoll - * @since 1.2.0 + * @since 2.0.0 */ public class DataSourcePoolMetadataProviders implements DataSourcePoolMetadataProvider { diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/HikariDataSourcePoolMetadata.java b/spring-boot/src/main/java/org/springframework/boot/jdbc/metadata/HikariDataSourcePoolMetadata.java similarity index 92% rename from spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/HikariDataSourcePoolMetadata.java rename to spring-boot/src/main/java/org/springframework/boot/jdbc/metadata/HikariDataSourcePoolMetadata.java index f7cd58d73f..251999aa5f 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/HikariDataSourcePoolMetadata.java +++ b/spring-boot/src/main/java/org/springframework/boot/jdbc/metadata/HikariDataSourcePoolMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2014 the original author or authors. + * Copyright 2012-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.jdbc.metadata; +package org.springframework.boot.jdbc.metadata; import javax.sql.DataSource; @@ -27,7 +27,7 @@ import org.springframework.beans.DirectFieldAccessor; * {@link DataSourcePoolMetadata} for a Hikari {@link DataSource}. * * @author Stephane Nicoll - * @since 1.2.0 + * @since 2.0.0 */ public class HikariDataSourcePoolMetadata extends AbstractDataSourcePoolMetadata { diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/TomcatDataSourcePoolMetadata.java b/spring-boot/src/main/java/org/springframework/boot/jdbc/metadata/TomcatDataSourcePoolMetadata.java similarity index 91% rename from spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/TomcatDataSourcePoolMetadata.java rename to spring-boot/src/main/java/org/springframework/boot/jdbc/metadata/TomcatDataSourcePoolMetadata.java index e0e0e031d1..6e495bbe61 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/TomcatDataSourcePoolMetadata.java +++ b/spring-boot/src/main/java/org/springframework/boot/jdbc/metadata/TomcatDataSourcePoolMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2015 the original author or authors. + * Copyright 2012-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.jdbc.metadata; +package org.springframework.boot.jdbc.metadata; import org.apache.tomcat.jdbc.pool.ConnectionPool; import org.apache.tomcat.jdbc.pool.DataSource; @@ -23,6 +23,7 @@ import org.apache.tomcat.jdbc.pool.DataSource; * {@link DataSourcePoolMetadata} for a Tomcat DataSource. * * @author Stephane Nicoll + * @since 2.0.0 */ public class TomcatDataSourcePoolMetadata extends AbstractDataSourcePoolMetadata { diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/error/DefaultErrorAttributes.java b/spring-boot/src/main/java/org/springframework/boot/web/servlet/error/DefaultErrorAttributes.java similarity index 98% rename from spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/error/DefaultErrorAttributes.java rename to spring-boot/src/main/java/org/springframework/boot/web/servlet/error/DefaultErrorAttributes.java index 92c94adb1a..00634fe4ee 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/error/DefaultErrorAttributes.java +++ b/spring-boot/src/main/java/org/springframework/boot/web/servlet/error/DefaultErrorAttributes.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.web.servlet.error; +package org.springframework.boot.web.servlet.error; import java.io.PrintWriter; import java.io.StringWriter; @@ -56,7 +56,7 @@ import org.springframework.web.servlet.ModelAndView; * @author Dave Syer * @author Stephane Nicoll * @author Vedran Pavic - * @since 1.1.0 + * @since 2.0.0 * @see ErrorAttributes */ @Order(Ordered.HIGHEST_PRECEDENCE) diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/error/ErrorAttributes.java b/spring-boot/src/main/java/org/springframework/boot/web/servlet/error/ErrorAttributes.java similarity index 95% rename from spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/error/ErrorAttributes.java rename to spring-boot/src/main/java/org/springframework/boot/web/servlet/error/ErrorAttributes.java index bb6d3de80b..688cffd21f 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/error/ErrorAttributes.java +++ b/spring-boot/src/main/java/org/springframework/boot/web/servlet/error/ErrorAttributes.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.web.servlet.error; +package org.springframework.boot.web.servlet.error; import java.util.Map; @@ -26,7 +26,7 @@ import org.springframework.web.servlet.ModelAndView; * Provides access to error attributes which can be logged or presented to the user. * * @author Phillip Webb - * @since 1.1.0 + * @since 2.0.0 * @see DefaultErrorAttributes */ public interface ErrorAttributes { diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/error/ErrorController.java b/spring-boot/src/main/java/org/springframework/boot/web/servlet/error/ErrorController.java similarity index 93% rename from spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/error/ErrorController.java rename to spring-boot/src/main/java/org/springframework/boot/web/servlet/error/ErrorController.java index a903cb4580..55e835e983 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/error/ErrorController.java +++ b/spring-boot/src/main/java/org/springframework/boot/web/servlet/error/ErrorController.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.web.servlet.error; +package org.springframework.boot.web.servlet.error; import org.springframework.stereotype.Controller; @@ -23,6 +23,7 @@ import org.springframework.stereotype.Controller; * render errors. Primarily used to know the error paths that will not need to be secured. * * @author Phillip Webb + * @since 2.0.0 */ @FunctionalInterface public interface ErrorController { diff --git a/spring-boot/src/test/java/org/springframework/boot/endpoint/DefaultEndpointPathResolverTests.java b/spring-boot/src/test/java/org/springframework/boot/endpoint/DefaultEndpointPathResolverTests.java deleted file mode 100644 index 1ead8ffb1f..0000000000 --- a/spring-boot/src/test/java/org/springframework/boot/endpoint/DefaultEndpointPathResolverTests.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright 2012-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.endpoint; - -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; - -/** - * Tests for {@link DefaultEndpointPathResolver}. - * - * @author Madhura Bhave - */ -public class DefaultEndpointPathResolverTests { - - private DefaultEndpointPathResolver resolver = new DefaultEndpointPathResolver(); - - @Rule - public ExpectedException thrown = ExpectedException.none(); - - @Test - public void resolveShouldThrowException() throws Exception { - this.thrown.expect(UnsupportedOperationException.class); - this.resolver.resolvePath("my-id"); - } -} diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourceBuilderTests.java b/spring-boot/src/test/java/org/springframework/boot/jdbc/DataSourceBuilderTests.java similarity index 74% rename from spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourceBuilderTests.java rename to spring-boot/src/test/java/org/springframework/boot/jdbc/DataSourceBuilderTests.java index f80d8f6dd2..4a0a4d7db0 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourceBuilderTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/jdbc/DataSourceBuilderTests.java @@ -14,10 +14,13 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.jdbc; +package org.springframework.boot.jdbc; import java.io.Closeable; import java.io.IOException; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.Arrays; import javax.sql.DataSource; @@ -26,8 +29,6 @@ import org.apache.commons.dbcp2.BasicDataSource; import org.junit.After; import org.junit.Test; -import org.springframework.boot.test.context.HidePackagesClassLoader; - import static org.assertj.core.api.Assertions.assertThat; /** @@ -70,4 +71,24 @@ public class DataSourceBuilderTests { assertThat(this.dataSource).isInstanceOf(BasicDataSource.class); } + final class HidePackagesClassLoader extends URLClassLoader { + + private final String[] hiddenPackages; + + HidePackagesClassLoader(String... hiddenPackages) { + super(new URL[0], HidePackagesClassLoader.class.getClassLoader()); + this.hiddenPackages = hiddenPackages; + } + + @Override + protected Class loadClass(String name, boolean resolve) + throws ClassNotFoundException { + if (Arrays.stream(this.hiddenPackages).anyMatch(name::startsWith)) { + throw new ClassNotFoundException(); + } + return super.loadClass(name, resolve); + } + + } + } diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/AbstractDataSourcePoolMetadataTests.java b/spring-boot/src/test/java/org/springframework/boot/jdbc/metadata/AbstractDataSourcePoolMetadataTests.java similarity index 95% rename from spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/AbstractDataSourcePoolMetadataTests.java rename to spring-boot/src/test/java/org/springframework/boot/jdbc/metadata/AbstractDataSourcePoolMetadataTests.java index 4e53224ef3..473b457918 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/AbstractDataSourcePoolMetadataTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/jdbc/metadata/AbstractDataSourcePoolMetadataTests.java @@ -14,11 +14,11 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.jdbc.metadata; +package org.springframework.boot.jdbc.metadata; import org.junit.Test; -import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder; +import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.jdbc.core.ConnectionCallback; import org.springframework.jdbc.core.JdbcTemplate; diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/CommonsDbcp2DataSourcePoolMetadataTests.java b/spring-boot/src/test/java/org/springframework/boot/jdbc/metadata/CommonsDbcp2DataSourcePoolMetadataTests.java similarity index 95% rename from spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/CommonsDbcp2DataSourcePoolMetadataTests.java rename to spring-boot/src/test/java/org/springframework/boot/jdbc/metadata/CommonsDbcp2DataSourcePoolMetadataTests.java index fa9ced6e7a..99f273a480 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/CommonsDbcp2DataSourcePoolMetadataTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/jdbc/metadata/CommonsDbcp2DataSourcePoolMetadataTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2016 the original author or authors. + * Copyright 2012-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.jdbc.metadata; +package org.springframework.boot.jdbc.metadata; import org.apache.commons.dbcp2.BasicDataSource; import org.junit.Before; diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProvidersTests.java b/spring-boot/src/test/java/org/springframework/boot/jdbc/metadata/DataSourcePoolMetadataProvidersTests.java similarity index 94% rename from spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProvidersTests.java rename to spring-boot/src/test/java/org/springframework/boot/jdbc/metadata/DataSourcePoolMetadataProvidersTests.java index 98b27c0a01..257ce3945b 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProvidersTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/jdbc/metadata/DataSourcePoolMetadataProvidersTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2016 the original author or authors. + * Copyright 2012-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.jdbc.metadata; +package org.springframework.boot.jdbc.metadata; import java.util.Arrays; diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/HikariDataSourcePoolMetadataTests.java b/spring-boot/src/test/java/org/springframework/boot/jdbc/metadata/HikariDataSourcePoolMetadataTests.java similarity index 93% rename from spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/HikariDataSourcePoolMetadataTests.java rename to spring-boot/src/test/java/org/springframework/boot/jdbc/metadata/HikariDataSourcePoolMetadataTests.java index 49ce2cf370..19bf651296 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/HikariDataSourcePoolMetadataTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/jdbc/metadata/HikariDataSourcePoolMetadataTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2016 the original author or authors. + * Copyright 2012-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.jdbc.metadata; +package org.springframework.boot.jdbc.metadata; import com.zaxxer.hikari.HikariDataSource; import org.junit.Before; diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/TomcatDataSourcePoolMetadataTests.java b/spring-boot/src/test/java/org/springframework/boot/jdbc/metadata/TomcatDataSourcePoolMetadataTests.java similarity index 94% rename from spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/TomcatDataSourcePoolMetadataTests.java rename to spring-boot/src/test/java/org/springframework/boot/jdbc/metadata/TomcatDataSourcePoolMetadataTests.java index aeae3baae1..0b162c0af7 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/TomcatDataSourcePoolMetadataTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/jdbc/metadata/TomcatDataSourcePoolMetadataTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2016 the original author or authors. + * Copyright 2012-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.jdbc.metadata; +package org.springframework.boot.jdbc.metadata; import org.apache.tomcat.jdbc.pool.DataSource; import org.junit.Before; diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/servlet/error/DefaultErrorAttributesTests.java b/spring-boot/src/test/java/org/springframework/boot/web/servlet/error/DefaultErrorAttributesTests.java similarity index 99% rename from spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/servlet/error/DefaultErrorAttributesTests.java rename to spring-boot/src/test/java/org/springframework/boot/web/servlet/error/DefaultErrorAttributesTests.java index bdf9abe1a0..91eda18a01 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/servlet/error/DefaultErrorAttributesTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/web/servlet/error/DefaultErrorAttributesTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.web.servlet.error; +package org.springframework.boot.web.servlet.error; import java.util.Collections; import java.util.Date;