Spring Boot实战学习笔记3
来源:互联网 发布:程序员经典面试题目 编辑:程序博客网 时间:2024/05/16 13:40
title: Spring Boot实战学习笔记3
tags:Spring Boot实战
grammar_cjkRuby: true
摘要
本文为学习Spring Boot实战的学习笔记,学习了一遍,但是好记性不如烂笔头,所以文章记录下来。图书购买地址为: https://item.jd.com/11894632.html.
Spring Boot实战学习笔记1
Spring Boot实战学习笔记2
Spring Boot实战学习笔记3
Spring Boot实战学习笔记4
Spring Boot实战学习笔记5
1.Spring 基础
2.Spring 常用配置
3.Spring 高级话题
4.Spring mvc基础
5.Spring Boot基础
5.1 Spring boot概述
5.1.1 什么是spring boot
使用习惯优于配置的理念.不用或者只需要很少的spring配置.
5.1.2 Spring boot核心功能
- 1.独立运行的Spring 项目
支持用jar包的形式运行. - 2.内嵌Servlet容器
内嵌Tomcat,jetty - 3.提供starter,简化maven配置.
- 4.自动配置Spring
- 5.准生产的应用监控
http,ssh,telnet对运行时的项目进行监控 - 6.无代码生产和XML配置
5.1.3 Spring boot优缺点
优点
- 1)快速构建项目
- 2)对主流开发框架的无配置集成
- 3)项目可以独立运行,无须外部依赖servlet容器
- 4)提供运行时的应用监控
- 5)机极大的提高了开发,部署效率
- 6)与云计算的天然集成.
缺点
- 1)书籍文档少
- 2)不认可spring,可能不习惯
5.1.4 关于本书Spring boot版本
Spring boot 1.3.0
5.2 Spring boot快速搭建
5.2.1 http://start.spring.io
进入该页面能协助创建spring boot项目.
5.2.2 Spring Tool Suite
工具不错.
5.2.3 Intellij IDEA
工具口碑好
5.2.4 Spring boot CLI
下载链接
查看10.2章节.
5.2.5 maven 手工构建
5.2.6 简单演示
@SpringBootApplication :开启自动配置.
通过maven命令: mvn spring-boot:run
6.Spring Boot核心
6.1 基本配置
6.1.1 入口类和@SpringBootApplicaion
@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@Configuration@EnableAutoConfiguration@ComponentScanpublic @interface SpringBootApplication {}
@EnableAutoConfiguration让Spring boot根据类路径中的jar包依赖为当前项目进行自动配置.
Spring Boot启动类要放在groupId+arctifactID目录下.
@EnableAutoConfiguration详解
6.1.2 关闭特定的自动配置
@SpringBootApplication(exclude={DateSourceAutoConfiguration.class})
6.1.3 定制Banner
1) 修改banner内容
/src/main/resources目录下创建一个banner.txt文件,然后将ASCII字符画复制进去,就能替换默认的banner了.
字符画生成地址
2)属性设置.
3)关闭banner方法1
SpringApplication application = new SpringApplication(App.class); /* * Banner.Mode.OFF:关闭; * Banner.Mode.CONSOLE:控制台输出,默认方式; * Banner.Mode.LOG:日志输出方式; */ application.setBannerMode(Banner.Mode.OFF); application.run(args);
4)关闭banner方法2
在application.proerpties进行banner的显示和关闭:
是否显示banner,可选值[true|false]
spring.main.show-banner=false
spring boot banner
6.1.4 Spring Boot的配置文件
application.properties或application.yml
//举几个例子:server.port=9090server.context-path=/hellobootserver: port: 9090 contextPath:/hellobootspring.redis.cluster.nodes[0]=192.168.0.1:6379 spring.redis.cluster.nodes[1]=192.168.0.2:6379 spring: redis: cluster: nodes: - 192.168.0.1:6379 - 192.168.0.2:6379
Spring Boot application.properties或application.yml相关配置
application.properties 改成 application.yml
6.1.5 Start pom
Spring Boot application starters 下面的应用程序starters是Spring Boot在org.springframework.boot组下提供的
Spring Boot生产准备的starters
Spring Boot technical starters
可用于排除或交换具体技术方面的starters。
springboot starter pom详解
6.1.6 使用XML
@ImportResource 应用XML
@ImportResource({“classpath:some-context.xml”,”classpath:another-context.xml”})
Java 的配置元数据 @ImportResource
6.2 外部配置
6.2.1 命令行参数配置
java -jar xx.jarjava -jar xx.jar --server.port=9090
6.2.2 常规属性配置
配置文件自动绑定到vo,属性上.
afsReqURL=http://192.168.2.80:8888/msDprAF088?@Servicepublic class AfsVerifyBean { @Value("${afsReqURL}") private String reqURL;}
6.2.3 类型安全的配置(基于properties)
这种还是蛮实用的.
application.properties中包含:author.name=wyfauthor.age=32package com.wisely.ch6_2_3.config;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.stereotype.Component;@Component@ConfigurationProperties(prefix = "author") //1 public class AuthorSettings { private String name; private Long age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Long getAge() { return age; } public void setAge(Long age) { this.age = age; }}
6.3 日志配置
支持java util logging,log4j,log4j2,logback,默认logback.
logback详解
6.4 Profile配置
spring.profiles.active=dev//tomcat中的配置方法export JAVA_OPTS="-Djava.library.path=/usr/local/lib -server -Xms1024m -Xmx1024m -XX:MaxPermSize=256m -Djava.awt.headless=true -Dsun.net.client.defaultConnectTimeout=60000 -Dsun.net.client.defaultReadTimeout=60000 -Djmagick.systemclassloader=no -Dnetworkaddress.cache.ttl=300 -Dsun.net.inetaddr.ttl=300 -Dspring.profiles.active=sit-vc"export JAVA_HOME JAVA_BIN PATH CLASSPATH JAVA_OPTS$CATALINA_HOME/bin/startup.sh -config $CATALINA_BASE/conf/server.xml
实战
6.5 Spring Boot运行原理
spring-boot-autoconfigure-1.3.0.x.jar中包含所有所有的自动配置.
自动配置有如下:
启动时控制台会有显示开启的配置和关闭的日志,日志如下
“`
=========================
AUTO-CONFIGURATION REPORT
Positive matches:
AopAutoConfiguration matched
- @ConditionalOnClass classes found: org.springframework.context.annotation.EnableAspectJAutoProxy,org.aspectj.lang.annotation.Aspect,org.aspectj.lang.reflect.Advice (OnClassCondition)
- matched (OnPropertyCondition)
AopAutoConfiguration.JdkDynamicAutoProxyConfiguration matched
- matched (OnPropertyCondition)
AuditAutoConfiguration.AuditEventRepositoryConfiguration matched
- @ConditionalOnMissingBean (types: org.springframework.boot.actuate.audit.AuditEventRepository; SearchStrategy: all) found no beans (OnBeanCondition)
DataSourceAutoConfiguration matched
- @ConditionalOnClass classes found: javax.sql.DataSource,org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType (OnClassCondition)
DataSourceAutoConfiguration.DataSourceInitializerConfiguration matched
- @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.jdbc.DataSourceInitializer; SearchStrategy: all) found no beans (OnBeanCondition)
DataSourceAutoConfiguration.JdbcTemplateConfiguration matched
- existing auto database detected (DataSourceAutoConfiguration.DataSourceAvailableCondition)
DataSourceAutoConfiguration.JdbcTemplateConfiguration#jdbcTemplate matched
- @ConditionalOnMissingBean (types: org.springframework.jdbc.core.JdbcOperations; SearchStrategy: all) found no beans (OnBeanCondition)
DataSourceAutoConfiguration.JdbcTemplateConfiguration#namedParameterJdbcTemplate matched
- @ConditionalOnMissingBean (types: org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations; SearchStrategy: all) found no beans (OnBeanCondition)
DataSourceAutoConfiguration.NonEmbeddedConfiguration matched
- supported DataSource class found (DataSourceAutoConfiguration.NonEmbeddedDataSourceCondition)
- @ConditionalOnMissingBean (types: javax.sql.DataSource,javax.sql.XADataSource; SearchStrategy: all) found no beans (OnBeanCondition)
DataSourcePoolMetadataProvidersConfiguration.TomcatDataSourcePoolMetadataProviderConfiguration matched
- @ConditionalOnClass classes found: org.apache.tomcat.jdbc.pool.DataSource (OnClassCondition)
DataSourceTransactionManagerAutoConfiguration matched
- @ConditionalOnClass classes found: org.springframework.jdbc.core.JdbcTemplate,org.springframework.transaction.PlatformTransactionManager (OnClassCondition)
DataSourceTransactionManagerAutoConfiguration#transactionManager matched
- @ConditionalOnBean (types: javax.sql.DataSource; SearchStrategy: all) found the following [dataSource] @ConditionalOnMissingBean (types: org.springframework.transaction.PlatformTransactionManager; SearchStrategy: all) found no beans (OnBeanCondition)
DataSourceTransactionManagerAutoConfiguration.TransactionManagementConfiguration matched
- @ConditionalOnMissingBean (types: org.springframework.transaction.annotation.AbstractTransactionManagementConfiguration; SearchStrategy: all) found no beans (OnBeanCondition)
DispatcherServletAutoConfiguration matched
- @ConditionalOnClass classes found: org.springframework.web.servlet.DispatcherServlet (OnClassCondition)
- found web application StandardServletEnvironment (OnWebApplicationCondition)
DispatcherServletAutoConfiguration.DispatcherServletConfiguration matched
- @ConditionalOnClass classes found: javax.servlet.ServletRegistration (OnClassCondition)
- no ServletRegistrationBean found (DispatcherServletAutoConfiguration.DefaultDispatcherServletCondition)
EmbeddedServletContainerAutoConfiguration matched
- found web application StandardServletEnvironment (OnWebApplicationCondition)
EmbeddedServletContainerAutoConfiguration.EmbeddedTomcat matched
- @ConditionalOnClass classes found: javax.servlet.Servlet,org.apache.catalina.startup.Tomcat (OnClassCondition)
- @ConditionalOnMissingBean (types: org.springframework.boot.context.embedded.EmbeddedServletContainerFactory; SearchStrategy: current) found no beans (OnBeanCondition)
EndpointAutoConfiguration#autoConfigurationReportEndpoint matched
- @ConditionalOnBean (types: org.springframework.boot.autoconfigure.condition.ConditionEvaluationReport; SearchStrategy: all) found the following [autoConfigurationReport] @ConditionalOnMissingBean (types: org.springframework.boot.actuate.endpoint.AutoConfigurationReportEndpoint; SearchStrategy: current) found no beans (OnBeanCondition)
EndpointAutoConfiguration#beansEndpoint matched
- @ConditionalOnMissingBean (types: org.springframework.boot.actuate.endpoint.BeansEndpoint; SearchStrategy: all) found no beans (OnBeanCondition)
EndpointAutoConfiguration#configurationPropertiesReportEndpoint matched
- @ConditionalOnMissingBean (types: org.springframework.boot.actuate.endpoint.ConfigurationPropertiesReportEndpoint; SearchStrategy: all) found no beans (OnBeanCondition)
EndpointAutoConfiguration#dumpEndpoint matched
- @ConditionalOnMissingBean (types: org.springframework.boot.actuate.endpoint.DumpEndpoint; SearchStrategy: all) found no beans (OnBeanCondition)
EndpointAutoConfiguration#environmentEndpoint matched
- @ConditionalOnMissingBean (types: org.springframework.boot.actuate.endpoint.EnvironmentEndpoint; SearchStrategy: all) found no beans (OnBeanCondition)
EndpointAutoConfiguration#healthEndpoint matched
- @ConditionalOnMissingBean (types: org.springframework.boot.actuate.endpoint.HealthEndpoint; SearchStrategy: all) found no beans (OnBeanCondition)
EndpointAutoConfiguration#infoEndpoint matched
- @ConditionalOnMissingBean (types: org.springframework.boot.actuate.endpoint.InfoEndpoint; SearchStrategy: all) found no beans (OnBeanCondition)
EndpointAutoConfiguration#metricsEndpoint matched
- @ConditionalOnMissingBean (types: org.springframework.boot.actuate.endpoint.MetricsEndpoint; SearchStrategy: all) found no beans (OnBeanCondition)
EndpointAutoConfiguration#shutdownEndpoint matched
- @ConditionalOnMissingBean (types: org.springframework.boot.actuate.endpoint.ShutdownEndpoint; SearchStrategy: all) found no beans (OnBeanCondition)
EndpointAutoConfiguration#traceEndpoint matched
- @ConditionalOnMissingBean (types: org.springframework.boot.actuate.endpoint.TraceEndpoint; SearchStrategy: all) found no beans (OnBeanCondition)
EndpointAutoConfiguration.RequestMappingEndpointConfiguration matched
- @ConditionalOnClass classes found: org.springframework.web.servlet.handler.AbstractHandlerMethodMapping (OnClassCondition)
EndpointAutoConfiguration.RequestMappingEndpointConfiguration#requestMappingEndpoint matched
- @ConditionalOnMissingBean (types: org.springframework.boot.actuate.endpoint.RequestMappingEndpoint; SearchStrategy: all) found no beans (OnBeanCondition)
EndpointMBeanExportAutoConfiguration matched
- JMX Endpoints (EndpointMBeanExportAutoConfiguration.JmxEnabledCondition)
EndpointWebMvcAutoConfiguration matched
- @ConditionalOnClass classes found: javax.servlet.Servlet,org.springframework.web.servlet.DispatcherServlet (OnClassCondition)
- found web application StandardServletEnvironment (OnWebApplicationCondition)
EndpointWebMvcAutoConfiguration.EndpointWebMvcConfiguration matched
- Management context (EndpointWebMvcAutoConfiguration.OnManagementMvcCondition)
EndpointWebMvcManagementContextConfiguration#endpointHandlerMapping matched
- @ConditionalOnMissingBean (types: org.springframework.boot.actuate.endpoint.mvc.EndpointHandlerMapping; SearchStrategy: all) found no beans (OnBeanCondition)
EndpointWebMvcManagementContextConfiguration#environmentMvcEndpoint matched
- @ConditionalOnBean (types: org.springframework.boot.actuate.endpoint.EnvironmentEndpoint; SearchStrategy: all) found the following [environmentEndpoint] (OnBeanCondition)
- All endpoints are enabled by default (OnEnabledEndpointCondition)
EndpointWebMvcManagementContextConfiguration#healthMvcEndpoint matched
- @ConditionalOnBean (types: org.springframework.boot.actuate.endpoint.HealthEndpoint; SearchStrategy: all) found the following [healthEndpoint] (OnBeanCondition)
- All endpoints are enabled by default (OnEnabledEndpointCondition)
EndpointWebMvcManagementContextConfiguration#logfileMvcEndpoint matched
- Found logging.path: logs (EndpointWebMvcManagementContextConfiguration.LogFileCondition)
- All endpoints are enabled by default (OnEnabledEndpointCondition)
EndpointWebMvcManagementContextConfiguration#metricsMvcEndpoint matched
- @ConditionalOnBean (types: org.springframework.boot.actuate.endpoint.MetricsEndpoint; SearchStrategy: all) found the following [metricsEndpoint] (OnBeanCondition)
- All endpoints are enabled by default (OnEnabledEndpointCondition)
EndpointWebMvcManagementContextConfiguration#mvcEndpoints matched
- @ConditionalOnMissingBean (types: org.springframework.boot.actuate.endpoint.mvc.MvcEndpoints; SearchStrategy: all) found no beans (OnBeanCondition)
EndpointWebMvcManagementContextConfiguration#shutdownMvcEndpoint matched
- @ConditionalOnBean (types: org.springframework.boot.actuate.endpoint.ShutdownEndpoint; SearchStrategy: all) found the following [shutdownEndpoint] (OnBeanCondition)
- The endpoint shutdown is enabled (OnEnabledEndpointCondition)
ErrorMvcAutoConfiguration matched
- @ConditionalOnClass classes found: javax.servlet.Servlet,org.springframework.web.servlet.DispatcherServlet (OnClassCondition)
- found web application StandardServletEnvironment (OnWebApplicationCondition)
ErrorMvcAutoConfiguration#basicErrorController matched
- @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.web.ErrorController; SearchStrategy: current) found no beans (OnBeanCondition)
ErrorMvcAutoConfiguration#errorAttributes matched
- @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.web.ErrorAttributes; SearchStrategy: current) found no beans (OnBeanCondition)
ErrorMvcAutoConfiguration.WhitelabelErrorViewConfiguration matched
- No error template view detected (ErrorMvcAutoConfiguration.ErrorTemplateMissingCondition)
- matched (OnPropertyCondition)
ErrorMvcAutoConfiguration.WhitelabelErrorViewConfiguration#beanNameViewResolver matched
- @ConditionalOnMissingBean (types: org.springframework.web.servlet.view.BeanNameViewResolver; SearchStrategy: all) found no beans (OnBeanCondition)
ErrorMvcAutoConfiguration.WhitelabelErrorViewConfiguration#defaultErrorView matched
- @ConditionalOnMissingBean (names: error; SearchStrategy: all) found no beans (OnBeanCondition)
GenericCacheConfiguration matched
- Automatic cache type (CacheCondition)
GuavaCacheConfiguration matched
- @ConditionalOnClass classes found: com.google.common.cache.CacheBuilder,org.springframework.cache.guava.GuavaCacheManager (OnClassCondition)
- Automatic cache type (CacheCondition)
HealthIndicatorAutoConfiguration#healthAggregator matched
- @ConditionalOnMissingBean (types: org.springframework.boot.actuate.health.HealthAggregator; SearchStrategy: all) found no beans (OnBeanCondition)
HealthIndicatorAutoConfiguration.DataSourcesHealthIndicatorConfiguration matched
- @ConditionalOnClass classes found: org.springframework.jdbc.core.JdbcTemplate (OnClassCondition)
- All default health indicators are enabled by default (OnEnabledHealthIndicatorCondition)
- @ConditionalOnBean (types: javax.sql.DataSource; SearchStrategy: all) found the following [dataSource] (OnBeanCondition)
HealthIndicatorAutoConfiguration.DataSourcesHealthIndicatorConfiguration#dbHealthIndicator matched
- @ConditionalOnMissingBean (names: dbHealthIndicator; SearchStrategy: all) found no beans (OnBeanCondition)
HealthIndicatorAutoConfiguration.DiskSpaceHealthIndicatorConfiguration matched
- All default health indicators are enabled by default (OnEnabledHealthIndicatorCondition)
HealthIndicatorAutoConfiguration.DiskSpaceHealthIndicatorConfiguration#diskSpaceHealthIndicator matched
- @ConditionalOnMissingBean (names: diskSpaceHealthIndicator; SearchStrategy: all) found no beans (OnBeanCondition)
HealthIndicatorAutoConfiguration.RabbitHealthIndicatorConfiguration matched
- All default health indicators are enabled by default (OnEnabledHealthIndicatorCondition)
- @ConditionalOnBean (types: org.springframework.amqp.rabbit.core.RabbitTemplate; SearchStrategy: all) found the following [rabbitTemplate] (OnBeanCondition)
HealthIndicatorAutoConfiguration.RabbitHealthIndicatorConfiguration#rabbitHealthIndicator matched
- @ConditionalOnMissingBean (names: rabbitHealthIndicator; SearchStrategy: all) found no beans (OnBeanCondition)
HttpEncodingAutoConfiguration matched
- @ConditionalOnClass classes found: org.springframework.web.filter.CharacterEncodingFilter (OnClassCondition)
- matched (OnPropertyCondition)
HttpEncodingAutoConfiguration#characterEncodingFilter matched
- @ConditionalOnMissingBean (types: org.springframework.web.filter.CharacterEncodingFilter; SearchStrategy: all) found no beans (OnBeanCondition)
HttpMessageConvertersAutoConfiguration matched
- @ConditionalOnClass classes found: org.springframework.http.converter.HttpMessageConverter (OnClassCondition)
HttpMessageConvertersAutoConfiguration#messageConverters matched
- @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.web.HttpMessageConverters; SearchStrategy: all) found no beans (OnBeanCondition)
HttpMessageConvertersAutoConfiguration.StringHttpMessageConverterConfiguration matched
- @ConditionalOnClass classes found: org.springframework.http.converter.StringHttpMessageConverter (OnClassCondition)
HttpMessageConvertersAutoConfiguration.StringHttpMessageConverterConfiguration#stringHttpMessageConverter matched
- @ConditionalOnMissingBean (types: org.springframework.http.converter.StringHttpMessageConverter; SearchStrategy: all) found no beans (OnBeanCondition)
JacksonAutoConfiguration matched
- @ConditionalOnClass classes found: com.fasterxml.jackson.databind.ObjectMapper (OnClassCondition)
JacksonAutoConfiguration.JacksonObjectMapperBuilderConfiguration matched
- @ConditionalOnClass classes found: com.fasterxml.jackson.databind.ObjectMapper,org.springframework.http.converter.json.Jackson2ObjectMapperBuilder (OnClassCondition)
JacksonAutoConfiguration.JacksonObjectMapperBuilderConfiguration#jacksonObjectMapperBuilder matched
- @ConditionalOnMissingBean (types: org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; SearchStrategy: all) found no beans (OnBeanCondition)
JacksonAutoConfiguration.JacksonObjectMapperConfiguration matched
- @ConditionalOnClass classes found: com.fasterxml.jackson.databind.ObjectMapper,org.springframework.http.converter.json.Jackson2ObjectMapperBuilder (OnClassCondition)
JacksonAutoConfiguration.JacksonObjectMapperConfiguration#jacksonObjectMapper matched
- @ConditionalOnMissingBean (types: com.fasterxml.jackson.databind.ObjectMapper; SearchStrategy: all) found no beans (OnBeanCondition)
JacksonHttpMessageConvertersConfiguration.MappingJackson2HttpMessageConverterConfiguration matched
- @ConditionalOnClass classes found: com.fasterxml.jackson.databind.ObjectMapper (OnClassCondition)
- matched (OnPropertyCondition)
- @ConditionalOnBean (types: com.fasterxml.jackson.databind.ObjectMapper; SearchStrategy: all) found the following [jacksonObjectMapper] (OnBeanCondition)
JacksonHttpMessageConvertersConfiguration.MappingJackson2HttpMessageConverterConfiguration#mappingJackson2HttpMessageConverter matched
- @ConditionalOnMissingBean (types: org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; SearchStrategy: all) found no beans (OnBeanCondition)
JmxAutoConfiguration matched
- @ConditionalOnClass classes found: org.springframework.jmx.export.MBeanExporter (OnClassCondition)
- matched (OnPropertyCondition)
JmxAutoConfiguration#mbeanExporter matched
- @ConditionalOnMissingBean (types: org.springframework.jmx.export.MBeanExporter; SearchStrategy: current) found no beans (OnBeanCondition)
JmxAutoConfiguration#mbeanServer matched
- @ConditionalOnMissingBean (types: javax.management.MBeanServer; SearchStrategy: all) found no beans (OnBeanCondition)
JmxAutoConfiguration#objectNamingStrategy matched
- @ConditionalOnMissingBean (types: org.springframework.jmx.export.naming.ObjectNamingStrategy; SearchStrategy: current) found no beans (OnBeanCondition)
ManagementServerPropertiesAutoConfiguration#managementServerProperties matched
- @ConditionalOnMissingBean (types: org.springframework.boot.actuate.autoconfigure.ManagementServerProperties; SearchStrategy: all) found no beans (OnBeanCondition)
MetricExportAutoConfiguration matched
- matched (OnPropertyCondition)
MetricExportAutoConfiguration#metricWritersMetricExporter matched
- @ConditionalOnMissingBean (names: metricWritersMetricExporter; SearchStrategy: all) found no beans (OnBeanCondition)
MetricExportAutoConfiguration.MetricExportPropertiesConfiguration#metricExportProperties matched
- @ConditionalOnMissingBean (types: org.springframework.boot.actuate.metrics.export.MetricExportProperties; SearchStrategy: all) found no beans (OnBeanCondition)
MetricFilterAutoConfiguration matched
- @ConditionalOnClass classes found: javax.servlet.Servlet,javax.servlet.ServletRegistration,org.springframework.web.filter.OncePerRequestFilter,org.springframework.web.servlet.HandlerMapping (OnClassCondition)
- matched (OnPropertyCondition)
- @ConditionalOnBean (types: org.springframework.boot.actuate.metrics.CounterService,org.springframework.boot.actuate.metrics.GaugeService; SearchStrategy: all) found the following [dropwizardMetricServices, dropwizardMetricServices] (OnBeanCondition)
MetricRepositoryAutoConfiguration.LegacyMetricRepositoryConfiguration matched
- Required JVM version older than 1.8 found 1.7 (OnJavaCondition)
- @ConditionalOnMissingBean (names: actuatorMetricRepository; SearchStrategy: all) found no beans (OnBeanCondition)
MetricsDropwizardAutoConfiguration matched
- @ConditionalOnClass classes found: com.codahale.metrics.MetricRegistry (OnClassCondition)
MetricsDropwizardAutoConfiguration#dropwizardMetricServices matched
- @ConditionalOnMissingBean (types: org.springframework.boot.actuate.metrics.dropwizard.DropwizardMetricServices,org.springframework.boot.actuate.metrics.CounterService,org.springframework.boot.actuate.metrics.GaugeService; SearchStrategy: all) found no beans (OnBeanCondition)
MultipartAutoConfiguration matched
- @ConditionalOnClass classes found: javax.servlet.Servlet,org.springframework.web.multipart.support.StandardServletMultipartResolver,javax.servlet.MultipartConfigElement (OnClassCondition)
- matched (OnPropertyCondition)
MultipartAutoConfiguration#multipartConfigElement matched
- @ConditionalOnMissingBean (types: javax.servlet.MultipartConfigElement; SearchStrategy: all) found no beans (OnBeanCondition)
MultipartAutoConfiguration#multipartResolver matched
- @ConditionalOnMissingBean (types: org.springframework.web.multipart.MultipartResolver; SearchStrategy: all) found no beans (OnBeanCondition)
MybatisAutoConfiguration matched
- @ConditionalOnClass classes found: org.apache.ibatis.session.SqlSessionFactory,org.mybatis.spring.SqlSessionFactoryBean (OnClassCondition)
- @ConditionalOnBean (types: javax.sql.DataSource; SearchStrategy: all) found the following [dataSource] (OnBeanCondition)
MybatisAutoConfiguration#sqlSessionFactory matched
- @ConditionalOnMissingBean (types: org.apache.ibatis.session.SqlSessionFactory; SearchStrategy: all) found no beans (OnBeanCondition)
MybatisAutoConfiguration#sqlSessionTemplate matched
- @ConditionalOnMissingBean (types: org.mybatis.spring.SqlSessionTemplate; SearchStrategy: all) found no beans (OnBeanCondition)
MybatisAutoConfiguration.MapperScannerRegistrarNotFoundConfiguration matched
- @ConditionalOnMissingBean (types: org.mybatis.spring.mapper.MapperFactoryBean; SearchStrategy: all) found no beans (OnBeanCondition)
NoOpCacheConfiguration matched
- Automatic cache type (CacheCondition)
PersistenceExceptionTranslationAutoConfiguration matched
- @ConditionalOnClass classes found: org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor (OnClassCondition)
PersistenceExceptionTranslationAutoConfiguration#persistenceExceptionTranslationPostProcessor matched
- @ConditionalOnMissingBean (types: org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor; SearchStrategy: all) found no beans (OnBeanCondition)
- matched (OnPropertyCondition)
PropertyPlaceholderAutoConfiguration#propertySourcesPlaceholderConfigurer matched
- @ConditionalOnMissingBean (types: org.springframework.context.support.PropertySourcesPlaceholderConfigurer; SearchStrategy: current) found no beans (OnBeanCondition)
PublicMetricsAutoConfiguration.DataSourceMetricsConfiguration matched
- @ConditionalOnClass classes found: javax.sql.DataSource (OnClassCondition)
- @ConditionalOnBean (types: javax.sql.DataSource; SearchStrategy: all) found the following [dataSource] (OnBeanCondition)
PublicMetricsAutoConfiguration.DataSourceMetricsConfiguration#dataSourcePublicMetrics matched
- @ConditionalOnBean (types: org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvider; SearchStrategy: all) found the following [tomcatPoolDataSourceMetadataProvider] @ConditionalOnMissingBean (types: org.springframework.boot.actuate.endpoint.DataSourcePublicMetrics; SearchStrategy: all) found no beans (OnBeanCondition)
PublicMetricsAutoConfiguration.TomcatMetricsConfiguration matched
- @ConditionalOnClass classes found: javax.servlet.Servlet,org.apache.catalina.startup.Tomcat (OnClassCondition)
- found web application StandardServletEnvironment (OnWebApplicationCondition)
PublicMetricsAutoConfiguration.TomcatMetricsConfiguration#tomcatPublicMetrics matched
- @ConditionalOnMissingBean (types: org.springframework.boot.actuate.endpoint.TomcatPublicMetrics; SearchStrategy: all) found no beans (OnBeanCondition)
RabbitAnnotationDrivenConfiguration matched
- @ConditionalOnClass classes found: org.springframework.amqp.rabbit.annotation.EnableRabbit (OnClassCondition)
RabbitAnnotationDrivenConfiguration#rabbitListenerContainerFactory matched
- @ConditionalOnMissingBean (names: rabbitListenerContainerFactory; SearchStrategy: all) found no beans (OnBeanCondition)
RabbitAnnotationDrivenConfiguration.EnableRabbitConfiguration matched
- @ConditionalOnMissingBean (names: org.springframework.amqp.rabbit.config.internalRabbitListenerAnnotationProcessor; SearchStrategy: all) found no beans (OnBeanCondition)
RabbitAutoConfiguration matched
- @ConditionalOnClass classes found: org.springframework.amqp.rabbit.core.RabbitTemplate,com.rabbitmq.client.Channel (OnClassCondition)
RabbitAutoConfiguration#amqpAdmin matched
- matched (OnPropertyCondition)
- @ConditionalOnMissingBean (types: org.springframework.amqp.core.AmqpAdmin; SearchStrategy: all) found no beans (OnBeanCondition)
RabbitAutoConfiguration#rabbitTemplate matched
- @ConditionalOnMissingBean (types: org.springframework.amqp.rabbit.core.RabbitTemplate; SearchStrategy: all) found no beans (OnBeanCondition)
RabbitAutoConfiguration.MessagingTemplateConfiguration matched
- @ConditionalOnClass classes found: org.springframework.amqp.rabbit.core.RabbitMessagingTemplate (OnClassCondition)
- @ConditionalOnMissingBean (types: org.springframework.amqp.rabbit.core.RabbitMessagingTemplate; SearchStrategy: all) found no beans (OnBeanCondition)
RabbitAutoConfiguration.RabbitConnectionFactoryCreator matched
- @ConditionalOnMissingBean (types: org.springframework.amqp.rabbit.connection.ConnectionFactory; SearchStrategy: all) found no beans (OnBeanCondition)
RedisCacheConfiguration matched
- Automatic cache type (CacheCondition)
RedisClusterConfig matched
- @ConditionalOnClass classes found: redis.clients.jedis.JedisCluster (OnClassCondition)
RestTemplateAutoConfiguration matched
- @ConditionalOnClass classes found: org.springframework.web.client.RestTemplate,org.apache.http.client.HttpClient (OnClassCondition)
RestTemplateAutoConfiguration#getRestTemplate matched
- @ConditionalOnMissingBean (types: org.springframework.web.client.RestTemplate; SearchStrategy: all) found no beans (OnBeanCondition)
ServerPropertiesAutoConfiguration matched
- found web application StandardServletEnvironment (OnWebApplicationCondition)
ServerPropertiesAutoConfiguration#serverProperties matched
- @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.web.ServerProperties; SearchStrategy: current) found no beans (OnBeanCondition)
SimpleCacheConfiguration matched
- Automatic cache type (CacheCondition)
TraceRepositoryAutoConfiguration#traceRepository matched
- @ConditionalOnMissingBean (types: org.springframework.boot.actuate.trace.TraceRepository; SearchStrategy: all) found no beans (OnBeanCondition)
TraceWebFilterAutoConfiguration matched
- @ConditionalOnClass classes found: javax.servlet.Servlet,org.springframework.web.servlet.DispatcherServlet,javax.servlet.ServletRegistration (OnClassCondition)
TransactionAutoConfiguration matched
- @ConditionalOnClass classes found: org.springframework.transaction.support.TransactionTemplate,org.springframework.transaction.PlatformTransactionManager (OnClassCondition)
- @ConditionalOnSingleCandidate (types: org.springframework.transaction.PlatformTransactionManager; SearchStrategy: all) found a primary candidate amongst the following [transactionManager] (OnBeanCondition)
TransactionAutoConfiguration#transactionTemplate matched
- @ConditionalOnMissingBean (types: org.springframework.transaction.support.TransactionTemplate; SearchStrategy: all) found no beans (OnBeanCondition)
WebMvcAutoConfiguration matched
- @ConditionalOnClass classes found: javax.servlet.Servlet,org.springframework.web.servlet.DispatcherServlet,org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter (OnClassCondition)
- found web application StandardServletEnvironment (OnWebApplicationCondition)
- @ConditionalOnMissingBean (types: org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; SearchStrategy: all) found no beans (OnBeanCondition)
WebMvcAutoConfiguration#hiddenHttpMethodFilter matched
- @ConditionalOnMissingBean (types: org.springframework.web.filter.HiddenHttpMethodFilter; SearchStrategy: all) found no beans (OnBeanCondition)
WebMvcAutoConfiguration#httpPutFormContentFilter matched
- @ConditionalOnMissingBean (types: org.springframework.web.filter.HttpPutFormContentFilter; SearchStrategy: all) found no beans (OnBeanCondition)
WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#beanNameViewResolver matched
- @ConditionalOnBean (types: org.springframework.web.servlet.View; SearchStrategy: all) found the following [error] (OnBeanCondition)
WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#defaultViewResolver matched
- @ConditionalOnMissingBean (types: org.springframework.web.servlet.view.InternalResourceViewResolver; SearchStrategy: all) found no beans (OnBeanCondition)
WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#requestContextFilter matched
- @ConditionalOnMissingBean (types: org.springframework.web.context.request.RequestContextListener,org.springframework.web.filter.RequestContextFilter; SearchStrategy: all) found no beans (OnBeanCondition)
WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#viewResolver matched
- @ConditionalOnBean (types: org.springframework.web.servlet.ViewResolver; SearchStrategy: all) found the following [beanNameViewResolver, mvcViewResolver, defaultViewResolver] @ConditionalOnMissingBean (names: viewResolver; types: org.springframework.web.servlet.view.ContentNegotiatingViewResolver; SearchStrategy: all) found no beans (OnBeanCondition)
WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter.FaviconConfiguration matched
- matched (OnPropertyCondition)
WebSocketAutoConfiguration matched
- @ConditionalOnClass classes found: javax.servlet.Servlet,javax.websocket.server.ServerContainer (OnClassCondition)
- found web application StandardServletEnvironment (OnWebApplicationCondition)
WebSocketAutoConfiguration.TomcatWebSocketConfiguration matched
- @ConditionalOnClass classes found: org.apache.catalina.startup.Tomcat,org.apache.tomcat.websocket.server.WsSci (OnClassCondition)
WebSocketAutoConfiguration.TomcatWebSocketConfiguration#websocketContainerCustomizer matched
- @ConditionalOnMissingBean (names: websocketContainerCustomizer; SearchStrategy: all) found no beans (OnBeanCondition)
Negative matches:
ActiveMQAutoConfiguration did not match
- required @ConditionalOnClass classes not found: javax.jms.ConnectionFactory,org.apache.activemq.ActiveMQConnectionFactory (OnClassCondition)
AopAutoConfiguration.CglibAutoProxyConfiguration did not match
- @ConditionalOnProperty missing required properties spring.aop.proxy-target-class (OnPropertyCondition)
ArtemisAutoConfiguration did not match
- required @ConditionalOnClass classes not found: javax.jms.ConnectionFactory,org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory (OnClassCondition)
AuditAutoConfiguration#authenticationAuditListener did not match
- required @ConditionalOnClass classes not found: org.springframework.security.authentication.event.AbstractAuthenticationEvent (OnClassCondition)
AuditAutoConfiguration#authorizationAuditListener did not match
- required @ConditionalOnClass classes not found: org.springframework.security.access.event.AbstractAuthorizationEvent (OnClassCondition)
BatchAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.springframework.batch.core.launch.JobLauncher (OnClassCondition)
CacheAutoConfiguration did not match
- @ConditionalOnClass classes found: org.springframework.cache.CacheManager (OnClassCondition)
- @ConditionalOnBean (types: org.springframework.cache.interceptor.CacheAspectSupport; SearchStrategy: all) found no beans (OnBeanCondition)
CacheAutoConfiguration.CacheManagerJpaDependencyConfiguration did not match
- required @ConditionalOnClass classes not found: org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean (OnClassCondition)
- Ancestor ‘org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration’ did not match (ConditionEvaluationReport.AncestorsMatchedCondition)
CacheStatisticsAutoConfiguration did not match
- @ConditionalOnBean (types: org.springframework.cache.CacheManager; SearchStrategy: all) found no beans (OnBeanCondition)
CacheStatisticsAutoConfiguration.ConcurrentMapCacheStatisticsConfiguration did not match
- @ConditionalOnClass classes found: org.springframework.cache.concurrent.ConcurrentMapCache (OnClassCondition)
- Ancestor ‘org.springframework.boot.actuate.autoconfigure.CacheStatisticsAutoConfiguration’ did not match (ConditionEvaluationReport.AncestorsMatchedCondition)
CacheStatisticsAutoConfiguration.EhCacheCacheStatisticsProviderConfiguration did not match
- required @ConditionalOnClass classes not found: net.sf.ehcache.Ehcache (OnClassCondition)
- Ancestor ‘org.springframework.boot.actuate.autoconfigure.CacheStatisticsAutoConfiguration’ did not match (ConditionEvaluationReport.AncestorsMatchedCondition)
CacheStatisticsAutoConfiguration.GuavaCacheStatisticsConfiguration did not match
- @ConditionalOnClass classes found: com.google.common.cache.Cache,org.springframework.cache.guava.GuavaCache (OnClassCondition)
- Ancestor ‘org.springframework.boot.actuate.autoconfigure.CacheStatisticsAutoConfiguration’ did not match (ConditionEvaluationReport.AncestorsMatchedCondition)
CacheStatisticsAutoConfiguration.HazelcastCacheStatisticsConfiguration did not match
- required @ConditionalOnClass classes not found: com.hazelcast.core.IMap,com.hazelcast.spring.cache.HazelcastCache (OnClassCondition)
- Ancestor ‘org.springframework.boot.actuate.autoconfigure.CacheStatisticsAutoConfiguration’ did not match (ConditionEvaluationReport.AncestorsMatchedCondition)
CacheStatisticsAutoConfiguration.InfinispanCacheStatisticsProviderConfiguration did not match
- required @ConditionalOnClass classes not found: org.infinispan.spring.provider.SpringCache (OnClassCondition)
- Ancestor ‘org.springframework.boot.actuate.autoconfigure.CacheStatisticsAutoConfiguration’ did not match (ConditionEvaluationReport.AncestorsMatchedCondition)
CacheStatisticsAutoConfiguration.JCacheCacheStatisticsProviderConfiguration did not match
- required @ConditionalOnClass classes not found: javax.cache.Caching (OnClassCondition)
- Ancestor ‘org.springframework.boot.actuate.autoconfigure.CacheStatisticsAutoConfiguration’ did not match (ConditionEvaluationReport.AncestorsMatchedCondition)
CacheStatisticsAutoConfiguration.NoOpCacheStatisticsConfiguration did not match
- @ConditionalOnClass classes found: org.springframework.cache.support.NoOpCacheManager (OnClassCondition)
- Ancestor ‘org.springframework.boot.actuate.autoconfigure.CacheStatisticsAutoConfiguration’ did not match (ConditionEvaluationReport.AncestorsMatchedCondition)
CassandraAutoConfiguration did not match
- required @ConditionalOnClass classes not found: com.datastax.driver.core.Cluster (OnClassCondition)
CassandraDataAutoConfiguration did not match
- required @ConditionalOnClass classes not found: com.datastax.driver.core.Cluster,org.springframework.data.cassandra.core.CassandraAdminOperations (OnClassCondition)
CassandraRepositoriesAutoConfiguration did not match
- required @ConditionalOnClass classes not found: com.datastax.driver.core.Session,org.springframework.data.cassandra.repository.CassandraRepository (OnClassCondition)
CloudAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.springframework.cloud.config.java.CloudScanConfiguration (OnClassCondition)
CrshAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.crsh.plugin.PluginLifeCycle (OnClassCondition)
DataSourceAutoConfiguration.EmbeddedConfiguration did not match
- existing non-embedded database detected (DataSourceAutoConfiguration.EmbeddedDataSourceCondition)
DataSourceAutoConfiguration.TomcatDataSourceJmxConfiguration did not match
- @ConditionalOnClass classes found: org.apache.tomcat.jdbc.pool.DataSourceProxy (OnClassCondition)
- existing auto database detected (DataSourceAutoConfiguration.DataSourceAvailableCondition)
- @ConditionalOnProperty missing required properties spring.datasource.jmx-enabled (OnPropertyCondition)
DataSourcePoolMetadataProvidersConfiguration.CommonsDbcpPoolDataSourceMetadataProviderConfiguration did not match
- required @ConditionalOnClass classes not found: org.apache.commons.dbcp.BasicDataSource (OnClassCondition)
DataSourcePoolMetadataProvidersConfiguration.HikariPoolDataSourceMetadataProviderConfiguration did not match
- required @ConditionalOnClass classes not found: com.zaxxer.hikari.HikariDataSource (OnClassCondition)
DeviceDelegatingViewResolverAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.springframework.mobile.device.view.LiteDeviceDelegatingViewResolver (OnClassCondition)
DeviceResolverAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.springframework.mobile.device.DeviceResolverHandlerInterceptor,org.springframework.mobile.device.DeviceHandlerMethodArgumentResolver (OnClassCondition)
DispatcherServletAutoConfiguration.DispatcherServletConfiguration#multipartResolver did not match
- @ConditionalOnBean (types: org.springframework.web.multipart.MultipartResolver; SearchStrategy: all) found no beans (OnBeanCondition)
EhCacheCacheConfiguration did not match
- required @ConditionalOnClass classes not found: net.sf.ehcache.Cache (OnClassCondition)
ElasticsearchAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.elasticsearch.client.Client,org.springframework.data.elasticsearch.client.TransportClientFactoryBean,org.springframework.data.elasticsearch.client.NodeClientFactoryBean (OnClassCondition)
ElasticsearchDataAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.elasticsearch.client.Client,org.springframework.data.elasticsearch.core.ElasticsearchTemplate (OnClassCondition)
ElasticsearchRepositoriesAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.elasticsearch.client.Client,org.springframework.data.elasticsearch.repository.ElasticsearchRepository (OnClassCondition)
EmbeddedMongoAutoConfiguration did not match
- required @ConditionalOnClass classes not found: com.mongodb.Mongo,de.flapdoodle.embed.mongo.MongodStarter (OnClassCondition)
EmbeddedServletContainerAutoConfiguration.EmbeddedJetty did not match
- required @ConditionalOnClass classes not found: org.eclipse.jetty.server.Server,org.eclipse.jetty.util.Loader,org.eclipse.jetty.webapp.WebAppContext (OnClassCondition)
EmbeddedServletContainerAutoConfiguration.EmbeddedUndertow did not match
- required @ConditionalOnClass classes not found: io.undertow.Undertow,org.xnio.SslClientAuthMode (OnClassCondition)
EncryptAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.jasypt.encryption.StringEncryptor (OnClassCondition)
EndpointAutoConfiguration.FlywayEndpointConfiguration did not match
- required @ConditionalOnClass classes not found: org.flywaydb.core.Flyway (OnClassCondition)
EndpointAutoConfiguration.LiquibaseEndpointConfiguration did not match
- required @ConditionalOnClass classes not found: liquibase.integration.spring.SpringLiquibase (OnClassCondition)
EndpointMBeanExportAutoConfiguration#mbeanServer did not match
- @ConditionalOnMissingBean (types: javax.management.MBeanServer; SearchStrategy: all) found the following [mbeanServer] (OnBeanCondition)
EndpointWebMvcHypermediaManagementContextConfiguration did not match
- required @ConditionalOnClass classes not found: org.springframework.hateoas.Link (OnClassCondition)
FacebookAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.springframework.social.config.annotation.SocialConfigurerAdapter,org.springframework.social.facebook.connect.FacebookConnectionFactory (OnClassCondition)
FallbackWebSecurityAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.springframework.security.config.annotation.web.configuration.EnableWebSecurity (OnClassCondition)
FlywayAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.flywaydb.core.Flyway (OnClassCondition)
FreeMarkerAutoConfiguration did not match
- required @ConditionalOnClass classes not found: freemarker.template.Configuration (OnClassCondition)
GroovyTemplateAutoConfiguration did not match
- required @ConditionalOnClass classes not found: groovy.text.markup.MarkupTemplateEngine (OnClassCondition)
GsonAutoConfiguration did not match
- required @ConditionalOnClass classes not found: com.google.gson.Gson (OnClassCondition)
GsonHttpMessageConvertersConfiguration did not match
- required @ConditionalOnClass classes not found: com.google.gson.Gson (OnClassCondition)
H2ConsoleAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.h2.server.web.WebServlet (OnClassCondition)
HazelcastAutoConfiguration did not match
- required @ConditionalOnClass classes not found: com.hazelcast.core.HazelcastInstance (OnClassCondition)
HazelcastCacheConfiguration did not match
- required @ConditionalOnClass classes not found: com.hazelcast.core.HazelcastInstance,com.hazelcast.spring.cache.HazelcastCacheManager (OnClassCondition)
HazelcastJpaDependencyAutoConfiguration did not match
- required @ConditionalOnClass classes not found: com.hazelcast.core.HazelcastInstance,org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean (OnClassCondition)
HealthIndicatorAutoConfiguration#applicationHealthIndicator did not match
- @ConditionalOnMissingBean (types: org.springframework.boot.actuate.health.HealthIndicator; SearchStrategy: all) found the following [rabbitHealthIndicator, dbHealthIndicator, diskSpaceHealthIndicator] (OnBeanCondition)
HealthIndicatorAutoConfiguration.CassandraHealthIndicatorConfiguration did not match
- required @ConditionalOnClass classes not found: org.springframework.data.cassandra.core.CassandraOperations,com.datastax.driver.core.Cluster (OnClassCondition)
HealthIndicatorAutoConfiguration.ElasticsearchHealthIndicatorConfiguration did not match
- All default health indicators are enabled by default (OnEnabledHealthIndicatorCondition)
- @ConditionalOnBean (types: org.elasticsearch.client.Client; SearchStrategy: all) found no beans (OnBeanCondition)
HealthIndicatorAutoConfiguration.JmsHealthIndicatorConfiguration did not match
- All default health indicators are enabled by default (OnEnabledHealthIndicatorCondition)
- @ConditionalOnBean (types: javax.jms.ConnectionFactory; SearchStrategy: all) found no beans (OnBeanCondition)
HealthIndicatorAutoConfiguration.MailHealthIndicatorConfiguration did not match
- All default health indicators are enabled by default (OnEnabledHealthIndicatorCondition)
- @ConditionalOnBean (types: org.springframework.mail.javamail.JavaMailSenderImpl; SearchStrategy: all) found no beans (OnBeanCondition)
HealthIndicatorAutoConfiguration.MongoHealthIndicatorConfiguration did not match
- All default health indicators are enabled by default (OnEnabledHealthIndicatorCondition)
- @ConditionalOnBean (types: org.springframework.data.mongodb.core.MongoTemplate; SearchStrategy: all) found no beans (OnBeanCondition)
HealthIndicatorAutoConfiguration.RedisHealthIndicatorConfiguration did not match
- All default health indicators are enabled by default (OnEnabledHealthIndicatorCondition)
- @ConditionalOnBean (types: org.springframework.data.redis.connection.RedisConnectionFactory; SearchStrategy: all) found no beans (OnBeanCondition)
HealthIndicatorAutoConfiguration.SolrHealthIndicatorConfiguration did not match
- All default health indicators are enabled by default (OnEnabledHealthIndicatorCondition)
- @ConditionalOnBean (types: org.apache.solr.client.solrj.SolrServer; SearchStrategy: all) found no beans (OnBeanCondition)
HibernateJpaAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean,javax.persistence.EntityManager (OnClassCondition)
HornetQAutoConfiguration did not match
- required @ConditionalOnClass classes not found: javax.jms.ConnectionFactory,org.hornetq.api.jms.HornetQJMSClient (OnClassCondition)
HypermediaAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.springframework.hateoas.Resource,org.springframework.plugin.core.Plugin (OnClassCondition)
InfinispanCacheConfiguration did not match
- required @ConditionalOnClass classes not found: org.infinispan.spring.provider.SpringEmbeddedCacheManager (OnClassCondition)
IntegrationAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.springframework.integration.config.EnableIntegration (OnClassCondition)
JCacheCacheConfiguration did not match
- required @ConditionalOnClass classes not found: javax.cache.Caching (OnClassCondition)
JacksonAutoConfiguration.JodaDateTimeJacksonConfiguration did not match
- required @ConditionalOnClass classes not found: org.joda.time.DateTime,com.fasterxml.jackson.datatype.joda.ser.DateTimeSerializer,com.fasterxml.jackson.datatype.joda.cfg.JacksonJodaDateFormat (OnClassCondition)
JacksonAutoConfiguration.ParameterNamesModuleConfiguration did not match
- required @ConditionalOnClass classes not found: com.fasterxml.jackson.module.paramnames.ParameterNamesModule (OnClassCondition)
JacksonHttpMessageConvertersConfiguration.MappingJackson2XmlHttpMessageConverterConfiguration did not match
- required @ConditionalOnClass classes not found: com.fasterxml.jackson.dataformat.xml.XmlMapper (OnClassCondition)
JerseyAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.glassfish.jersey.server.spring.SpringComponentProvider (OnClassCondition)
JmsAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.springframework.jms.core.JmsTemplate (OnClassCondition)
JndiConnectionFactoryAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.springframework.jms.core.JmsTemplate (OnClassCondition)
JndiDataSourceAutoConfiguration did not match
- @ConditionalOnClass classes found: javax.sql.DataSource,org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType (OnClassCondition)
- @ConditionalOnProperty missing required properties spring.datasource.jndi-name (OnPropertyCondition)
JolokiaAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.jolokia.http.AgentServlet (OnClassCondition)
JooqAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.jooq.DSLContext (OnClassCondition)
JpaRepositoriesAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.springframework.data.jpa.repository.JpaRepository (OnClassCondition)
JtaAutoConfiguration did not match
- required @ConditionalOnClass classes not found: javax.transaction.Transaction (OnClassCondition)
LinkedInAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.springframework.social.config.annotation.SocialConfigurerAdapter,org.springframework.social.linkedin.connect.LinkedInConnectionFactory (OnClassCondition)
LiquibaseAutoConfiguration did not match
- required @ConditionalOnClass classes not found: liquibase.integration.spring.SpringLiquibase (OnClassCondition)
MailSenderAutoConfiguration did not match
- required @ConditionalOnClass classes not found: javax.mail.internet.MimeMessage (OnClassCondition)
MailSenderValidatorAutoConfiguration did not match
- @ConditionalOnProperty missing required properties spring.mail.test-connection (OnPropertyCondition)
ManagementServerPropertiesAutoConfiguration#securityProperties did not match
- required @ConditionalOnClass classes not found: org.springframework.security.config.annotation.web.configuration.EnableWebSecurity (OnClassCondition)
ManagementServerPropertiesAutoConfiguration#serverProperties did not match
- found web application StandardServletEnvironment (OnWebApplicationCondition)
- @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.web.ServerProperties; SearchStrategy: all) found the following [serverProperties] (OnBeanCondition)
ManagementWebSecurityAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.springframework.security.config.annotation.web.configuration.EnableWebSecurity (OnClassCondition)
MessageSourceAutoConfiguration did not match
- No bundle found for spring.messages.basename: messages (MessageSourceAutoConfiguration.ResourceBundleCondition)
MetricExportAutoConfiguration#statsdMetricWriter did not match
- @ConditionalOnMissingBean (types: org.springframework.boot.actuate.metrics.statsd.StatsdMetricWriter; SearchStrategy: all) found no beans (OnBeanCondition)
- @ConditionalOnProperty missing required properties spring.metrics.export.statsd.host (OnPropertyCondition)
MetricRepositoryAutoConfiguration.FastMetricServicesConfiguration did not match
- Required JVM version 1.8 or newer found 1.7 (OnJavaCondition)
MetricRepositoryAutoConfiguration.LegacyMetricServicesConfiguration did not match
- Required JVM version older than 1.8 found 1.7 (OnJavaCondition)
- @ConditionalOnMissingBean (types: org.springframework.boot.actuate.metrics.GaugeService; SearchStrategy: all) found the following [dropwizardMetricServices] (OnBeanCondition)
MetricsChannelAutoConfiguration did not match
- @ConditionalOnClass classes found: org.springframework.messaging.MessageChannel (OnClassCondition)
- @ConditionalOnBean (names: metricsChannel; SearchStrategy: all) found no beans (OnBeanCondition)
MetricsDropwizardAutoConfiguration#metricRegistry did not match
- @ConditionalOnMissingBean (types: com.codahale.metrics.MetricRegistry; SearchStrategy: all) found the following [getMetricRegistry] (OnBeanCondition)
MongoAutoConfiguration did not match
- required @ConditionalOnClass classes not found: com.mongodb.MongoClient (OnClassCondition)
MongoDataAutoConfiguration did not match
- required @ConditionalOnClass classes not found: com.mongodb.Mongo,org.springframework.data.mongodb.core.MongoTemplate (OnClassCondition)
MongoRepositoriesAutoConfiguration did not match
- required @ConditionalOnClass classes not found: com.mongodb.Mongo,org.springframework.data.mongodb.repository.MongoRepository (OnClassCondition)
MustacheAutoConfiguration did not match
- required @ConditionalOnClass classes not found: com.samskivert.mustache.Mustache (OnClassCondition)
OAuth2AutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.springframework.security.oauth2.common.OAuth2AccessToken (OnClassCondition)
PublicMetricsAutoConfiguration#richGaugePublicMetrics did not match
- @ConditionalOnBean (types: org.springframework.boot.actuate.metrics.rich.RichGaugeReader; SearchStrategy: all) found no beans (OnBeanCondition)
PublicMetricsAutoConfiguration.CacheStatisticsConfiguration did not match
- @ConditionalOnClass classes found: org.springframework.cache.CacheManager (OnClassCondition)
- @ConditionalOnBean (types: org.springframework.cache.CacheManager; SearchStrategy: all) found no beans (OnBeanCondition)
PublicMetricsAutoConfiguration.IntegrationMetricsConfiguration did not match
- required @ConditionalOnClass classes not found: org.springframework.integration.monitor.IntegrationMBeanExporter (OnClassCondition)
ReactorAutoConfiguration did not match
- required @ConditionalOnClass classes not found: reactor.spring.context.config.EnableReactor,reactor.Environment (OnClassCondition)
RedisAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.springframework.data.redis.connection.jedis.JedisConnection,org.springframework.data.redis.core.RedisOperations (OnClassCondition)
RepositoryRestMvcAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration (OnClassCondition)
SecurityAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.springframework.security.authentication.AuthenticationManager,org.springframework.security.config.annotation.authentication.configurers.GlobalAuthenticationConfigurerAdapter (OnClassCondition)
SecurityFilterAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer (OnClassCondition)
SendGridAutoConfiguration did not match
- required @ConditionalOnClass classes not found: com.sendgrid.SendGrid (OnClassCondition)
SessionAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.springframework.session.Session (OnClassCondition)
SitePreferenceAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.springframework.mobile.device.site.SitePreferenceHandlerInterceptor,org.springframework.mobile.device.site.SitePreferenceHandlerMethodArgumentResolver (OnClassCondition)
SocialWebAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.springframework.social.connect.web.ConnectController,org.springframework.social.config.annotation.SocialConfigurerAdapter (OnClassCondition)
SolrAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.apache.solr.client.solrj.impl.HttpSolrServer,org.apache.solr.client.solrj.impl.CloudSolrServer,org.apache.solr.common.cloud.HashPartitioner (OnClassCondition)
SolrRepositoriesAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.apache.solr.client.solrj.SolrServer,org.springframework.data.solr.repository.SolrRepository (OnClassCondition)
SpringApplicationAdminJmxAutoConfiguration did not match
- @ConditionalOnProperty missing required properties spring.application.admin.enabled (OnPropertyCondition)
SpringDataWebAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.springframework.data.web.PageableHandlerMethodArgumentResolver (OnClassCondition)
ThymeleafAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.thymeleaf.spring4.SpringTemplateEngine (OnClassCondition)
TwitterAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.springframework.social.config.annotation.SocialConfigurerAdapter,org.springframework.social.twitter.connect.TwitterConnectionFactory (OnClassCondition)
VelocityAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.apache.velocity.app.VelocityEngine (OnClassCondition)
WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#dateFormatter did not match
- @ConditionalOnProperty missing required properties spring.mvc.date-format (OnPropertyCondition)
WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#localeResolver did not match
- @ConditionalOnMissingBean (types: org.springframework.web.servlet.LocaleResolver; SearchStrategy: all) found no beans (OnBeanCondition)
- @ConditionalOnProperty missing required properties spring.mvc.locale (OnPropertyCondition)
WebSocketAutoConfiguration.JettyWebSocketConfiguration did not match
- required @ConditionalOnClass classes not found: org.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer (OnClassCondition)
WebSocketAutoConfiguration.UndertowWebSocketConfiguration did not match
- required @ConditionalOnClass classes not found: io.undertow.websockets.jsr.Bootstrap (OnClassCondition)
WebSocketMessagingAutoConfiguration did not match
- required @ConditionalOnClass classes not found: org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer (OnClassCondition)
XADataSourceAutoConfiguration did not match
- required @ConditionalOnClass classes not found: javax.transaction.TransactionManager (OnClassCondition)
Exclusions:
None
Unconditional classes:
org.springframework.boot.actuate.autoconfigure.TraceRepositoryAutoConfiguration
org.springframework.boot.actuate.autoconfigure.PublicMetricsAutoConfiguration
org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration
org.springframework.boot.actuate.autoconfigure.AuditAutoConfiguration
org.springframework.boot.actuate.autoconfigure.MetricRepositoryAutoConfiguration
org.springframework.boot.actuate.autoconfigure.EndpointAutoConfiguration
org.springframework.boot.actuate.autoconfigure.ManagementServerPropertiesAutoConfiguration
org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration
org.springframework.boot.actuate.autoconfigure.HealthIndicatorAutoConfiguration
2017-07-03 22:57:31.994
“`
启动日志附件
6.5.1 运行原理
6.1.1 中的
@SpringBootApplication中有一个核心注解为@EnableAutoConfiguration
@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@AutoConfigurationPackage@Import(EnableAutoConfigurationImportSelector.class)public @interface EnableAutoConfiguration { /** * Exclude specific auto-configuration classes such that they will never be applied. * @return the classes to exclude */ Class<?>[] exclude() default {}; /** * Exclude specific auto-configuration class names such that they will never be * applied. * @return the class names to exclude * @since 1.3.0 */ String[] excludeName() default {};}
而EnableAutoConfiguration的关键功能为@Import注解导入EnableAutoConfigurationImportSelector的配置功能,EnableAutoConfigurationImportSelector使用SpringFactoriesLoader.loadFactoryNames方法来扫描META-INF/spring.factories文件中的jar包,而spring-boot-autoconfigure-1.3.0.x.jar中就有spring.factories.
//摘取核心代码package org.springframework.core.io.supportpublic abstract class SpringFactoriesLoader {public static final String FACTORIES_RESOURCE_LOCATION = "META-INF/spring.factories";public static List<String> loadFactoryNames(Class<?> factoryClass, ClassLoader classLoader) { String factoryClassName = factoryClass.getName(); try { Enumeration<URL> urls = (classLoader != null ? classLoader.getResources(FACTORIES_RESOURCE_LOCATION) : ClassLoader.getSystemResources(FACTORIES_RESOURCE_LOCATION)); List<String> result = new ArrayList<String>(); while (urls.hasMoreElements()) { URL url = urls.nextElement(); Properties properties = PropertiesLoaderUtils.loadProperties(new UrlResource(url)); String factoryClassNames = properties.getProperty(factoryClassName); result.addAll(Arrays.asList(StringUtils.commaDelimitedListToStringArray(factoryClassNames))); } return result; } catch (IOException ex) { throw new IllegalArgumentException("Unable to load [" + factoryClass.getName() + "] factories from location [" + FACTORIES_RESOURCE_LOCATION + "]", ex); } } }
spring.factories在spring-boot-autoconfigure\META-INF\目录下
# Initializersorg.springframework.context.ApplicationContextInitializer=\org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializer# Application Listenersorg.springframework.context.ApplicationListener=\org.springframework.boot.autoconfigure.BackgroundPreinitializer# Auto Configureorg.springframework.boot.autoconfigure.EnableAutoConfiguration=\org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\org.springframework.boot.autoconfigure.MessageSourceAutoConfiguration,\org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration,\org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\org.springframework.boot.autoconfigure.cloud.CloudAutoConfiguration,\org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,\org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration,\org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration,\org.springframework.boot.autoconfigure.data.cassandra.CassandraRepositoriesAutoConfiguration,\org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration,\org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration,\org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration,\org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration,\org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration,\org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration,\org.springframework.boot.autoconfigure.data.solr.SolrRepositoriesAutoConfiguration,\org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration,\org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration,\org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration,\org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration,\org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration,\org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration,\org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration,\org.springframework.boot.autoconfigure.hazelcast.HazelcastAutoConfiguration,\org.springframework.boot.autoconfigure.hazelcast.HazelcastJpaDependencyAutoConfiguration,\org.springframework.boot.autoconfigure.integration.IntegrationAutoConfiguration,\org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration,\org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\org.springframework.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration,\org.springframework.boot.autoconfigure.jdbc.XADataSourceAutoConfiguration,\org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,\org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration,\org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration,\org.springframework.boot.autoconfigure.jms.JndiConnectionFactoryAutoConfiguration,\org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration,\org.springframework.boot.autoconfigure.jms.artemis.ArtemisAutoConfiguration,\org.springframework.boot.autoconfigure.jms.hornetq.HornetQAutoConfiguration,\org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration,\org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration,\org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration,\org.springframework.boot.autoconfigure.jooq.JooqAutoConfiguration,\org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration,\org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration,\org.springframework.boot.autoconfigure.mail.MailSenderValidatorAutoConfiguration,\org.springframework.boot.autoconfigure.mobile.DeviceResolverAutoConfiguration,\org.springframework.boot.autoconfigure.mobile.DeviceDelegatingViewResolverAutoConfiguration,\org.springframework.boot.autoconfigure.mobile.SitePreferenceAutoConfiguration,\org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration,\org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,\org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration,\org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,\org.springframework.boot.autoconfigure.reactor.ReactorAutoConfiguration,\org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration,\org.springframework.boot.autoconfigure.security.SecurityFilterAutoConfiguration,\org.springframework.boot.autoconfigure.security.FallbackWebSecurityAutoConfiguration,\org.springframework.boot.autoconfigure.security.oauth2.OAuth2AutoConfiguration,\org.springframework.boot.autoconfigure.sendgrid.SendGridAutoConfiguration,\org.springframework.boot.autoconfigure.session.SessionAutoConfiguration,\org.springframework.boot.autoconfigure.social.SocialWebAutoConfiguration,\org.springframework.boot.autoconfigure.social.FacebookAutoConfiguration,\org.springframework.boot.autoconfigure.social.LinkedInAutoConfiguration,\org.springframework.boot.autoconfigure.social.TwitterAutoConfiguration,\org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration,\org.springframework.boot.autoconfigure.velocity.VelocityAutoConfiguration,\org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration,\org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration,\org.springframework.boot.autoconfigure.transaction.jta.JtaAutoConfiguration,\org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration,\org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration,\org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration,\org.springframework.boot.autoconfigure.web.HttpEncodingAutoConfiguration,\org.springframework.boot.autoconfigure.web.HttpMessageConvertersAutoConfiguration,\org.springframework.boot.autoconfigure.web.MultipartAutoConfiguration,\org.springframework.boot.autoconfigure.web.ServerPropertiesAutoConfiguration,\org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration,\org.springframework.boot.autoconfigure.websocket.WebSocketAutoConfiguration,\org.springframework.boot.autoconfigure.websocket.WebSocketMessagingAutoConfiguration# Template availability providersorg.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider=\org.springframework.boot.autoconfigure.freemarker.FreeMarkerTemplateAvailabilityProvider,\org.springframework.boot.autoconfigure.mustache.MustacheTemplateAvailabilityProvider,\org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAvailabilityProvider,\org.springframework.boot.autoconfigure.thymeleaf.ThymeleafTemplateAvailabilityProvider,\org.springframework.boot.autoconfigure.velocity.VelocityTemplateAvailabilityProvider,\org.springframework.boot.autoconfigure.web.JspTemplateAvailabilityProvider
6.5.2 核心注解
打开spring.factories中的任意一个AutoConfiguration文件,一般都有下面的条件注解,在spring-boot-autoconfigure-1.3.0.x.jar的org.springframework.boot.autoconfigure.condition包下,条件注解如下.
ConditionalOnWebApplication 源码如下:
@Target({ ElementType.TYPE, ElementType.METHOD })@Retention(RetentionPolicy.RUNTIME)@Documented@Conditional(OnWebApplicationCondition.class)public @interface ConditionalOnWebApplication {}
其中@Conditional是OnWebApplicationCondition.class
OnWebApplicationCondition源码如下
@Order(Ordered.HIGHEST_PRECEDENCE + 20)class OnWebApplicationCondition extends SpringBootCondition { private static final String WEB_CONTEXT_CLASS = "org.springframework.web.context." + "support.GenericWebApplicationContext"; @Override public ConditionOutcome getMatchOutcome(ConditionContext context, AnnotatedTypeMetadata metadata) { boolean webApplicationRequired = metadata .isAnnotated(ConditionalOnWebApplication.class.getName()); ConditionOutcome webApplication = isWebApplication(context, metadata); if (webApplicationRequired && !webApplication.isMatch()) { return ConditionOutcome.noMatch(webApplication.getMessage()); } if (!webApplicationRequired && webApplication.isMatch()) { return ConditionOutcome.noMatch(webApplication.getMessage()); } return ConditionOutcome.match(webApplication.getMessage()); } private ConditionOutcome isWebApplication(ConditionContext context, AnnotatedTypeMetadata metadata) { if (!ClassUtils.isPresent(WEB_CONTEXT_CLASS, context.getClassLoader())) { return ConditionOutcome.noMatch("web application classes not found"); } if (context.getBeanFactory() != null) { String[] scopes = context.getBeanFactory().getRegisteredScopeNames(); if (ObjectUtils.containsElement(scopes, "session")) { return ConditionOutcome.match("found web application 'session' scope"); } } if (context.getEnvironment() instanceof StandardServletEnvironment) { return ConditionOutcome .match("found web application StandardServletEnvironment"); } if (context.getResourceLoader() instanceof WebApplicationContext) { return ConditionOutcome.match("found web application WebApplicationContext"); } return ConditionOutcome.noMatch("not a web application"); }}
有方法isWebApplication和getMatchOutcome.
isWebApplication是判断是否为webApplication.
getMatchOutcome 实现是abstract class SpringBootCondition的getMatchOutcome.
matches是实现了接口Condition的boolean matches,
SpringBootCondition中matches有调用了自身的getMatchOutcome方法.
捋捋核心原理1-关于Condition:
1.顶级接口 public interface Condition,方法matches
2.抽象类 abstract class SpringBootCondition,实现matches,同时调用自己的抽象方法 getMatchOutcome
3.具体类 class OnWebApplicationCondition extends SpringBootCondition,继承的同时重写getMatchOutcome,里面有判断.最终实现了被顶级接口matches是实现了接口Condition的boolean的matches判断现象..
class OnWebApplicationCondition extends SpringBootCondition{}//摘选部分代码public abstract class SpringBootCondition implements Condition { @Override public final boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { String classOrMethodName = getClassOrMethodName(metadata); try { ConditionOutcome outcome = getMatchOutcome(context, metadata); logOutcome(classOrMethodName, outcome); recordEvaluation(context, classOrMethodName, outcome); return outcome.isMatch(); } catch (NoClassDefFoundError ex) { throw new IllegalStateException("Could not evaluate condition on " + classOrMethodName + " due to internal class not found. " + "This can happen if you are @ComponentScanning a " + "springframework package (e.g. if you put a @ComponentScan " + "in the default package by mistake)", ex); } catch (RuntimeException ex) { throw new IllegalStateException( "Error processing condition on " + getName(metadata), ex); } } public abstract ConditionOutcome getMatchOutcome(ConditionContext context, AnnotatedTypeMetadata metadata);}public interface Condition { /** * Determine if the condition matches. * @param context the condition context * @param metadata metadata of the {@link org.springframework.core.type.AnnotationMetadata class} * or {@link org.springframework.core.type.MethodMetadata method} being checked. * @return {@code true} if the condition matches and the component can be registered * or {@code false} to veto registration. */ boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata);}
Spring @Conditional注解的使用
Spring Boot自动配置详解(有例子),自己模拟写一个
6.5.3 实例分析
分析一个简单的SpringBoot内置的自动配置功能:http编码配置.
@ConfigurationProperties(prefix = "spring.http.encoding")//application.properties和配置的前缀是spring.http.encoding public class HttpEncodingProperties { //默认配置UTF-8,如果要修改用配置 spring.http.encoding.Charset=GBK public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8"); //默认配置是UTF-8 /** * Charset of HTTP requests and responses. Added to the "Content-Type" header if not * set explicitly. */ private Charset charset = DEFAULT_CHARSET; /** * Force the encoding to the configured charset on HTTP requests and responses. */ //设置forceEncoding 默认true,如果要修改用配置 spring.http.encoding.force=false private boolean force = true; public Charset getCharset() { return this.charset; } public void setCharset(Charset charset) { this.charset = charset; } public boolean isForce() { return this.force; } public void setForce(boolean force) { this.force = force; }}@Configuration@EnableConfigurationProperties(HttpEncodingProperties.class)//对上面配置类HttpEncodingProperties.开启属性注入,通过EnableConfigurationProperties,使用@Autowired注入.@ConditionalOnClass(CharacterEncodingFilter.class)//当CharacterEncodingFilter在类路径的条件下//当设置spring.http.encoding=enabled的情况下,如果么有设置则默认true.@ConditionalOnProperty(prefix = "spring.http.encoding", value = "enabled", matchIfMissing = true)public class HttpEncodingAutoConfiguration { @Autowired private HttpEncodingProperties httpEncodingProperties; @Bean//使用java配置的方式配置CharacterEncodingFilter这Bean @ConditionalOnMissingBean(CharacterEncodingFilter.class)//当容器中没有的时候则新建这个Bean public CharacterEncodingFilter characterEncodingFilter() { CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter(); filter.setEncoding(this.httpEncodingProperties.getCharset().name()); filter.setForceEncoding(this.httpEncodingProperties.isForce()); return filter; }}
捋捋核心原理2-自动配置
有配置参数属性Bean-HttpEncodingProperties.java,有使用的配置前缀名称及配置属性名称
然后有一个配置Bean-HttpEncodingAutoConfiguration.java,这个里面用到了配置参数属性类,但是里面会用到捋捋核心原理1中的各种Condition.
核心原理总理解:
@SpringBootApplication–核心注解–>@EnableAutoConfiguration—->@Import(EnableAutoConfigurationImportSelector.class)–使用–>
SpringFactoriesLoader.loadFactoryNames–方法来扫描–>META-INF/spring.factories(spring-boot-autoconfigure-1.3.0.x.jar中,记录有哪些自动配置)–关于配置,举例HttpEncoding–>参数配置HttpEncodingProperties,自动配置HttpEncodingAutoConfiguration(spring..factories有记录,被loadFactoryNames扫走)—->HttpEncodingAutoConfiguration用Condition来判断参数配置值来启用符合条件的功能.
还有一点注意理解 想查看某个自动配置有哪些配置属性,到其对应的Properties.java累中查看即可!!
比如说spring-boot-autoconfigure-1.3.0.RELEASE解压后META-INF目录下有spring.factories,里面有Redis相关的自动配置类:springorg.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration.打开该源码
//节选源码@Configuration@ConditionalOnClass({ JedisConnection.class, RedisOperations.class, Jedis.class })@EnableConfigurationPropertiespublic class RedisAutoConfiguration { @Bean(name = "org.springframework.autoconfigure.redis.RedisProperties") @ConditionalOnMissingBean public RedisProperties redisProperties() { return new RedisProperties(); }
里面提到:RedisProperties,查看就知道配置有database,host,password,port,timeout,pool等
package org.springframework.boot.autoconfigure.data.redis;import org.springframework.boot.context.properties.ConfigurationProperties;@ConfigurationProperties(prefix = "spring.redis")public class RedisProperties { /** * Database index used by the connection factory. */ private int database = 0; /** * Redis server host. */ private String host = "localhost"; /** * Login password of the redis server. */ private String password; /** * Redis server port. */ private int port = 6379; /** * Connection timeout in milliseconds. */ private int timeout; private Pool pool; private Sentinel sentinel; public int getDatabase() { return this.database; } public void setDatabase(int database) { this.database = database; } public String getHost() { return this.host; } public void setHost(String host) { this.host = host; } public String getPassword() { return this.password; } public void setPassword(String password) { this.password = password; } public int getPort() { return this.port; } public void setPort(int port) { this.port = port; } public void setTimeout(int timeout) { this.timeout = timeout; } public int getTimeout() { return this.timeout; } public Sentinel getSentinel() { return this.sentinel; } public void setSentinel(Sentinel sentinel) { this.sentinel = sentinel; } public Pool getPool() { return this.pool; } public void setPool(Pool pool) { this.pool = pool; } /** * Pool properties. */ public static class Pool { /** * Max number of "idle" connections in the pool. Use a negative value to indicate * an unlimited number of idle connections. */ private int maxIdle = 8; /** * Target for the minimum number of idle connections to maintain in the pool. This * setting only has an effect if it is positive. */ private int minIdle = 0; /** * Max number of connections that can be allocated by the pool at a given time. * Use a negative value for no limit. */ private int maxActive = 8; /** * Maximum amount of time (in milliseconds) a connection allocation should block * before throwing an exception when the pool is exhausted. Use a negative value * to block indefinitely. */ private int maxWait = -1; public int getMaxIdle() { return this.maxIdle; } public void setMaxIdle(int maxIdle) { this.maxIdle = maxIdle; } public int getMinIdle() { return this.minIdle; } public void setMinIdle(int minIdle) { this.minIdle = minIdle; } public int getMaxActive() { return this.maxActive; } public void setMaxActive(int maxActive) { this.maxActive = maxActive; } public int getMaxWait() { return this.maxWait; } public void setMaxWait(int maxWait) { this.maxWait = maxWait; } } /** * Redis sentinel properties. */ public static class Sentinel { /** * Name of Redis server. */ private String master; /** * Comma-separated list of host:port pairs. */ private String nodes; public String getMaster() { return this.master; } public void setMaster(String master) { this.master = master; } public String getNodes() { return this.nodes; } public void setNodes(String nodes) { this.nodes = nodes; } }}
6.5.4 实战
自己写一个starter pom例子
//源码代码附件中没有,书中有,或者参考网上例子.HelloServiceProperties.javaHelloService.javaHelloServiceAutoConfiguration.java在spring.factories中追加配置文件.
Spring Boot自动配置详解(有例子),作者模拟写了一个
7.Spring Boot的Web开发
8.Spring Boot的数据访问
9.Spring Boot的企业级开发
10.Spring Boot开发部署与测试
11.Spring 应用监控
Spring Boot有四大神器,分别是auto-configuration、starters、cli、actuator
12.分布式系统开发
- Spring Boot实战学习笔记3
- Spring Boot实战学习笔记1
- Spring Boot实战学习笔记2
- Spring Boot实战学习笔记4
- Spring Boot实战学习笔记5
- spring boot实战笔记
- Spring Boot实战笔记
- spring-boot学习笔记3
- spring-boot学习笔记
- Spring Boot学习笔记
- Spring Boot学习笔记
- spring boot 学习笔记
- Spring Boot学习笔记
- Spring Boot学习笔记
- Spring Boot 学习笔记
- spring boot学习笔记
- Spring Boot 学习笔记
- Spring Boot 学习笔记(-)
- B
- 时间管理十个最重要的观点
- oracle function用法
- Request Respone
- Android自定义控件实现多行文字自动向上滚动轮播效果(伪文字轮播)
- Spring Boot实战学习笔记3
- Mybatis初级应用——实现增删查改
- java基础之集合
- Python 系统监控管理模块psutil学习
- android developer tiny share-20170708
- vc mfc Edit SetFocus 设置焦点 无效 失败
- 7月记录贴
- UVA
- 18.自定义UI(画布)-单点触摸-多点触摸