Spring Boot 运行原理之自动配置

来源:互联网 发布:二维字符串数组赋值 编辑:程序博客网 时间:2024/05/29 07:26

   

  我们知道Springboot提倡的是零配置,但是在我们开发工作中又是不可避免出现第三方软件的结合,需要我们对这些第三方的软件进行一些结合性或必要的属性进行赋值,而这时Spring boot会帮我们自动进行默认值的配置,避免我们亲自操刀。

 

   SpringBoot关于自动配置的源码在Spring-boot-autoconfigure-1.3,可以在项目中直接查看:


                              


    我们可以通过在application.properties属性中输入:

Debug=true


   这个属性来使Spring Boot运行时打印出所有的配置属性,比如我有一个ORM使用Mybaite的项目,其中

全局文件中定义的属性为:

mybatis.type-aliases-package=com.neo.entity spring.datasource.driverClassName=com.mysql.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf-8spring.datasource.username=rootspring.datasource.password=root//运行时输出自动配置信息debug=true


 

    运行项目,在Console中打印出多余信息:

 

*****************************************************************************************

启动的自动配置

*****************************************************************************************

=========================AUTO-CONFIGURATIONREPORT=========================  Positive matches:-----------------    DataSourceAutoConfiguration matched      - @ConditionalOnClass found requiredclasses 'javax.sql.DataSource','org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType'(OnClassCondition)   DataSourceAutoConfiguration#dataSourceInitializer matched      - @ConditionalOnMissingBean (types:org.springframework.boot.autoconfigure.jdbc.DataSourceInitializer;SearchStrategy: all) did not find any beans (OnBeanCondition)   DataSourceAutoConfiguration.PooledDataSourceConfiguration matched      - AnyNestedCondition 1 matched 1 did not;NestedCondition onDataSourceAutoConfiguration.PooledDataSourceCondition.PooledDataSourceAvailablePooledDataSource found supported DataSource; NestedCondition on DataSourceAutoConfiguration.PooledDataSourceCondition.ExplicitType@ConditionalOnProperty (spring.datasource.type) did not find property 'type'(DataSourceAutoConfiguration.PooledDataSourceCondition)      - @ConditionalOnMissingBean (types:javax.sql.DataSource,javax.sql.XADataSource; SearchStrategy: all) did not findany beans (OnBeanCondition)    DataSourceConfiguration.Tomcat matched      - @ConditionalOnClass found requiredclass 'org.apache.tomcat.jdbc.pool.DataSource' (OnClassCondition)      - @ConditionalOnProperty(spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource) matched(OnPropertyCondition)   DataSourcePoolMetadataProvidersConfiguration.TomcatDataSourcePoolMetadataProviderConfigurationmatched      - @ConditionalOnClass found requiredclass 'org.apache.tomcat.jdbc.pool.DataSource' (OnClassCondition)   DataSourceTransactionManagerAutoConfiguration matched      - @ConditionalOnClass found requiredclasses 'org.springframework.jdbc.core.JdbcTemplate','org.springframework.transaction.PlatformTransactionManager' (OnClassCondition)   DataSourceTransactionManagerAutoConfiguration.DataSourceTransactionManagerConfigurationmatched      - @ConditionalOnSingleCandidate (types:javax.sql.DataSource; SearchStrategy: all) found a primary bean from beans'dataSource' (OnBeanCondition)   DataSourceTransactionManagerAutoConfiguration.DataSourceTransactionManagerConfiguration#transactionManagermatched      - @ConditionalOnMissingBean (types:org.springframework.transaction.PlatformTransactionManager; SearchStrategy:all) did not find any beans (OnBeanCondition)   DataSourceTransactionManagerAutoConfiguration.TransactionManagementConfigurationmatched      - @ConditionalOnMissingBean (types:org.springframework.transaction.annotation.AbstractTransactionManagementConfiguration;SearchStrategy: all) did not find any beans (OnBeanCondition)    DevToolsDataSourceAutoConfiguration matched      - DevTools DataSource Condition foundauto-configured DataSource(DevToolsDataSourceAutoConfiguration.DevToolsDataSourceCondition)    DispatcherServletAutoConfiguration matched      - @ConditionalOnClass found requiredclass 'org.springframework.web.servlet.DispatcherServlet' (OnClassCondition)      - @ConditionalOnWebApplication (required)found StandardServletEnvironment (OnWebApplicationCondition)   DispatcherServletAutoConfiguration.DispatcherServletConfigurationmatched      - @ConditionalOnClass found requiredclass 'javax.servlet.ServletRegistration' (OnClassCondition)      - Default DispatcherServlet did not finddispatcher servlet beans(DispatcherServletAutoConfiguration.DefaultDispatcherServletCondition)   DispatcherServletAutoConfiguration.DispatcherServletRegistrationConfigurationmatched      - @ConditionalOnClass found requiredclass 'javax.servlet.ServletRegistration' (OnClassCondition)      - DispatcherServlet Registration did notfind servlet registration bean(DispatcherServletAutoConfiguration.DispatcherServletRegistrationCondition)   DispatcherServletAutoConfiguration.DispatcherServletRegistrationConfiguration#dispatcherServletRegistrationmatched      - @ConditionalOnBean (names:dispatcherServlet; types: org.springframework.web.servlet.DispatcherServlet;SearchStrategy: all) found beans 'dispatcherServlet', 'dispatcherServlet'(OnBeanCondition)    EmbeddedServletContainerAutoConfigurationmatched      - @ConditionalOnWebApplication (required)found StandardServletEnvironment (OnWebApplicationCondition)   EmbeddedServletContainerAutoConfiguration.EmbeddedTomcat matched      - @ConditionalOnClass found requiredclasses 'javax.servlet.Servlet', 'org.apache.catalina.startup.Tomcat'(OnClassCondition)      - @ConditionalOnMissingBean (types:org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;SearchStrategy: current) did not find any beans (OnBeanCondition)    ErrorMvcAutoConfiguration matched      - @ConditionalOnClass found requiredclasses 'javax.servlet.Servlet','org.springframework.web.servlet.DispatcherServlet' (OnClassCondition)      - @ConditionalOnWebApplication (required)found StandardServletEnvironment (OnWebApplicationCondition)   ErrorMvcAutoConfiguration#basicErrorController matched      - @ConditionalOnMissingBean (types:org.springframework.boot.autoconfigure.web.ErrorController; SearchStrategy:current) did not find any beans (OnBeanCondition)   ErrorMvcAutoConfiguration#conventionErrorViewResolver matched      - @ConditionalOnBean (types:org.springframework.web.servlet.DispatcherServlet; SearchStrategy: all) foundbean 'dispatcherServlet'; @ConditionalOnMissingBean (types:org.springframework.boot.autoconfigure.web.DefaultErrorViewResolver;SearchStrategy: all) did not find any beans (OnBeanCondition)    ErrorMvcAutoConfiguration#errorAttributesmatched      - @ConditionalOnMissingBean (types:org.springframework.boot.autoconfigure.web.ErrorAttributes; SearchStrategy:current) did not find any beans (OnBeanCondition)   ErrorMvcAutoConfiguration.WhitelabelErrorViewConfiguration matched      - ErrorTemplate Missing did not finderror template view (ErrorMvcAutoConfiguration.ErrorTemplateMissingCondition)      - @ConditionalOnProperty(server.error.whitelabel.enabled) matched (OnPropertyCondition)   ErrorMvcAutoConfiguration.WhitelabelErrorViewConfiguration#beanNameViewResolvermatched      - @ConditionalOnMissingBean (types:org.springframework.web.servlet.view.BeanNameViewResolver; SearchStrategy: all)did not find any beans (OnBeanCondition)   ErrorMvcAutoConfiguration.WhitelabelErrorViewConfiguration#defaultErrorViewmatched      - @ConditionalOnMissingBean (names:error; SearchStrategy: all) did not find any beans (OnBeanCondition)    GenericCacheConfiguration matched      - Cacheorg.springframework.boot.autoconfigure.cache.GenericCacheConfigurationautomatic cache type (CacheCondition)    HttpEncodingAutoConfiguration matched      - @ConditionalOnClass found requiredclass 'org.springframework.web.filter.CharacterEncodingFilter'(OnClassCondition)      - @ConditionalOnWebApplication (required)found StandardServletEnvironment (OnWebApplicationCondition)      - @ConditionalOnProperty(spring.http.encoding.enabled) matched (OnPropertyCondition)   HttpEncodingAutoConfiguration#characterEncodingFilter matched      - @ConditionalOnMissingBean (types:org.springframework.web.filter.CharacterEncodingFilter; SearchStrategy: all)did not find any beans (OnBeanCondition)    HttpMessageConvertersAutoConfigurationmatched      - @ConditionalOnClass found requiredclass 'org.springframework.http.converter.HttpMessageConverter'(OnClassCondition)   HttpMessageConvertersAutoConfiguration#messageConverters matched      - @ConditionalOnMissingBean (types:org.springframework.boot.autoconfigure.web.HttpMessageConverters;SearchStrategy: all) did not find any beans (OnBeanCondition)   HttpMessageConvertersAutoConfiguration.StringHttpMessageConverterConfigurationmatched      - @ConditionalOnClass found requiredclass 'org.springframework.http.converter.StringHttpMessageConverter'(OnClassCondition)   HttpMessageConvertersAutoConfiguration.StringHttpMessageConverterConfiguration#stringHttpMessageConvertermatched      - @ConditionalOnMissingBean (types:org.springframework.http.converter.StringHttpMessageConverter; SearchStrategy:all) did not find any beans (OnBeanCondition)    JacksonAutoConfiguration matched      - @ConditionalOnClass found requiredclass 'com.fasterxml.jackson.databind.ObjectMapper' (OnClassCondition)   JacksonAutoConfiguration.Jackson2ObjectMapperBuilderCustomizerConfigurationmatched      - @ConditionalOnClass found requiredclasses 'com.fasterxml.jackson.databind.ObjectMapper','org.springframework.http.converter.json.Jackson2ObjectMapperBuilder'(OnClassCondition)   JacksonAutoConfiguration.JacksonObjectMapperBuilderConfiguration matched      - @ConditionalOnClass found requiredclasses 'com.fasterxml.jackson.databind.ObjectMapper','org.springframework.http.converter.json.Jackson2ObjectMapperBuilder'(OnClassCondition)   JacksonAutoConfiguration.JacksonObjectMapperBuilderConfiguration#jacksonObjectMapperBuildermatched      - @ConditionalOnMissingBean (types:org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;SearchStrategy: all) did not find any beans (OnBeanCondition)   JacksonAutoConfiguration.JacksonObjectMapperConfiguration matched      - @ConditionalOnClass found requiredclasses 'com.fasterxml.jackson.databind.ObjectMapper','org.springframework.http.converter.json.Jackson2ObjectMapperBuilder'(OnClassCondition)   JacksonAutoConfiguration.JacksonObjectMapperConfiguration#jacksonObjectMappermatched      - @ConditionalOnMissingBean (types:com.fasterxml.jackson.databind.ObjectMapper; SearchStrategy: all) did not findany beans (OnBeanCondition)   JacksonHttpMessageConvertersConfiguration.MappingJackson2HttpMessageConverterConfigurationmatched      - @ConditionalOnClass found requiredclass 'com.fasterxml.jackson.databind.ObjectMapper' (OnClassCondition)      - @ConditionalOnProperty(spring.http.converters.preferred-json-mapper=jackson) matched(OnPropertyCondition)      - @ConditionalOnBean (types:com.fasterxml.jackson.databind.ObjectMapper; SearchStrategy: all) found bean'jacksonObjectMapper' (OnBeanCondition)   JacksonHttpMessageConvertersConfiguration.MappingJackson2HttpMessageConverterConfiguration#mappingJackson2HttpMessageConvertermatched      - @ConditionalOnMissingBean (types:org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;SearchStrategy: all) did not find any beans (OnBeanCondition)    JdbcTemplateAutoConfiguration matched      - @ConditionalOnClass found requiredclasses 'javax.sql.DataSource', 'org.springframework.jdbc.core.JdbcTemplate'(OnClassCondition)      - @ConditionalOnSingleCandidate (types:javax.sql.DataSource; SearchStrategy: all) found a primary bean from beans'dataSource' (OnBeanCondition)    JdbcTemplateAutoConfiguration#jdbcTemplatematched      - @ConditionalOnMissingBean (types:org.springframework.jdbc.core.JdbcOperations; SearchStrategy: all) did not findany beans (OnBeanCondition)   JdbcTemplateAutoConfiguration#namedParameterJdbcTemplate matched      - @ConditionalOnMissingBean (types:org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations;SearchStrategy: all) did not find any beans (OnBeanCondition)    JmxAutoConfiguration matched      - @ConditionalOnClass found requiredclass 'org.springframework.jmx.export.MBeanExporter' (OnClassCondition)      - @ConditionalOnProperty(spring.jmx.enabled=true) matched (OnPropertyCondition)    JmxAutoConfiguration#mbeanExporter matched      - @ConditionalOnMissingBean (types:org.springframework.jmx.export.MBeanExporter; SearchStrategy: current) did notfind any beans (OnBeanCondition)    JmxAutoConfiguration#mbeanServer matched      - @ConditionalOnMissingBean (types:javax.management.MBeanServer; SearchStrategy: all) did not find any beans(OnBeanCondition)    JmxAutoConfiguration#objectNamingStrategymatched      - @ConditionalOnMissingBean (types:org.springframework.jmx.export.naming.ObjectNamingStrategy; SearchStrategy:current) did not find any beans (OnBeanCondition)    LocalDevToolsAutoConfiguration matched      - Initializer Restarter Conditionavailable and initialized (OnInitializedRestarterCondition)   LocalDevToolsAutoConfiguration.LiveReloadConfiguration matched      - @ConditionalOnProperty(spring.devtools.livereload.enabled) matched (OnPropertyCondition)   LocalDevToolsAutoConfiguration.LiveReloadConfiguration#liveReloadServermatched      - @ConditionalOnMissingBean (types:org.springframework.boot.devtools.livereload.LiveReloadServer; SearchStrategy:all) did not find any beans (OnBeanCondition)   LocalDevToolsAutoConfiguration.RestartConfiguration matched      - @ConditionalOnProperty(spring.devtools.restart.enabled) matched (OnPropertyCondition)   LocalDevToolsAutoConfiguration.RestartConfiguration#classPathFileSystemWatchermatched      - @ConditionalOnMissingBean (types:org.springframework.boot.devtools.classpath.ClassPathFileSystemWatcher;SearchStrategy: all) did not find any beans (OnBeanCondition)   LocalDevToolsAutoConfiguration.RestartConfiguration#classPathRestartStrategymatched      - @ConditionalOnMissingBean (types:org.springframework.boot.devtools.classpath.ClassPathRestartStrategy;SearchStrategy: all) did not find any beans (OnBeanCondition)    MultipartAutoConfiguration matched      - @ConditionalOnClass found requiredclasses 'javax.servlet.Servlet','org.springframework.web.multipart.support.StandardServletMultipartResolver','javax.servlet.MultipartConfigElement' (OnClassCondition)      - @ConditionalOnProperty(spring.http.multipart.enabled) matched (OnPropertyCondition)   MultipartAutoConfiguration#multipartConfigElement matched      - @ConditionalOnMissingBean (types:javax.servlet.MultipartConfigElement; SearchStrategy: all) did not find anybeans (OnBeanCondition)    MultipartAutoConfiguration#multipartResolvermatched      - @ConditionalOnMissingBean (types:org.springframework.web.multipart.MultipartResolver; SearchStrategy: all) didnot find any beans (OnBeanCondition)    MybatisAutoConfiguration matched      - @ConditionalOnClass found requiredclasses 'org.apache.ibatis.session.SqlSessionFactory','org.mybatis.spring.SqlSessionFactoryBean' (OnClassCondition)      - @ConditionalOnBean (types:javax.sql.DataSource; SearchStrategy: all) found bean 'dataSource'(OnBeanCondition)    MybatisAutoConfiguration#sqlSessionFactorymatched      - @ConditionalOnMissingBean (types:org.apache.ibatis.session.SqlSessionFactory; SearchStrategy: all) did not findany beans (OnBeanCondition)    MybatisAutoConfiguration#sqlSessionTemplatematched      - @ConditionalOnMissingBean (types:org.mybatis.spring.SqlSessionTemplate; SearchStrategy: all) did not find anybeans (OnBeanCondition)    NoOpCacheConfiguration matched      - Cacheorg.springframework.boot.autoconfigure.cache.NoOpCacheConfiguration automaticcache type (CacheCondition)   PersistenceExceptionTranslationAutoConfiguration matched      - @ConditionalOnClass found requiredclass'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor'(OnClassCondition)   PersistenceExceptionTranslationAutoConfiguration#persistenceExceptionTranslationPostProcessormatched      - @ConditionalOnMissingBean (types:org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor;SearchStrategy: all) did not find any beans (OnBeanCondition)      - @ConditionalOnProperty(spring.dao.exceptiontranslation.enabled) matched (OnPropertyCondition)   PropertyPlaceholderAutoConfiguration#propertySourcesPlaceholderConfigurermatched      - @ConditionalOnMissingBean (types:org.springframework.context.support.PropertySourcesPlaceholderConfigurer;SearchStrategy: current) did not find any beans (OnBeanCondition)    RedisCacheConfiguration matched      - Cacheorg.springframework.boot.autoconfigure.cache.RedisCacheConfiguration automaticcache type (CacheCondition)    ServerPropertiesAutoConfiguration matched      - @ConditionalOnWebApplication (required)found StandardServletEnvironment (OnWebApplicationCondition)   ServerPropertiesAutoConfiguration#serverProperties matched      - @ConditionalOnMissingBean (types:org.springframework.boot.autoconfigure.web.ServerProperties; SearchStrategy:current) did not find any beans (OnBeanCondition)    SimpleCacheConfiguration matched      - Cacheorg.springframework.boot.autoconfigure.cache.SimpleCacheConfiguration automaticcache type (CacheCondition)    TransactionAutoConfiguration matched      - @ConditionalOnClass found requiredclasses 'org.springframework.transaction.support.TransactionTemplate','org.springframework.transaction.PlatformTransactionManager' (OnClassCondition)      - @ConditionalOnSingleCandidate (types:org.springframework.transaction.PlatformTransactionManager; SearchStrategy:all) found a primary bean from beans 'transactionManager' (OnBeanCondition)   TransactionAutoConfiguration#transactionTemplate matched      - @ConditionalOnMissingBean (types:org.springframework.transaction.support.TransactionTemplate; SearchStrategy:all) did not find any beans (OnBeanCondition)   WebClientAutoConfiguration.RestTemplateConfiguration matched      - @ConditionalOnClass found requiredclass 'org.springframework.web.client.RestTemplate' (OnClassCondition)   WebClientAutoConfiguration.RestTemplateConfiguration#restTemplateBuildermatched      - @ConditionalOnMissingBean (types:org.springframework.boot.web.client.RestTemplateBuilder; SearchStrategy: all)did not find any beans (OnBeanCondition)    WebMvcAutoConfiguration matched      - @ConditionalOnClass found requiredclasses 'javax.servlet.Servlet','org.springframework.web.servlet.DispatcherServlet','org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter'(OnClassCondition)      - @ConditionalOnWebApplication (required)found StandardServletEnvironment (OnWebApplicationCondition)      - @ConditionalOnMissingBean (types:org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;SearchStrategy: all) did not find any beans (OnBeanCondition)   WebMvcAutoConfiguration#hiddenHttpMethodFilter matched      - @ConditionalOnMissingBean (types:org.springframework.web.filter.HiddenHttpMethodFilter; SearchStrategy: all) didnot find any beans (OnBeanCondition)   WebMvcAutoConfiguration#httpPutFormContentFilter matched      - @ConditionalOnMissingBean (types:org.springframework.web.filter.HttpPutFormContentFilter; SearchStrategy: all)did not find any beans (OnBeanCondition)      - @ConditionalOnProperty(spring.mvc.formcontent.putfilter.enabled) matched (OnPropertyCondition)   WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#defaultViewResolvermatched      - @ConditionalOnMissingBean (types:org.springframework.web.servlet.view.InternalResourceViewResolver;SearchStrategy: all) did not find any beans (OnBeanCondition)   WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#requestContextFiltermatched      - @ConditionalOnMissingBean (types:org.springframework.web.context.request.RequestContextListener,org.springframework.web.filter.RequestContextFilter;SearchStrategy: all) did not find any beans (OnBeanCondition)   WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#viewResolvermatched      - @ConditionalOnBean (types:org.springframework.web.servlet.ViewResolver; SearchStrategy: all) found beans'defaultViewResolver', 'beanNameViewResolver', 'mvcViewResolver';@ConditionalOnMissingBean (names: viewResolver; types:org.springframework.web.servlet.view.ContentNegotiatingViewResolver;SearchStrategy: all) did not find any beans (OnBeanCondition)   WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter.FaviconConfigurationmatched      - @ConditionalOnProperty(spring.mvc.favicon.enabled) matched (OnPropertyCondition)    WebSocketAutoConfiguration matched      - @ConditionalOnClass found requiredclasses 'javax.servlet.Servlet', 'javax.websocket.server.ServerContainer'(OnClassCondition)      - @ConditionalOnWebApplication (required)found StandardServletEnvironment (OnWebApplicationCondition)   WebSocketAutoConfiguration.TomcatWebSocketConfiguration matched      - @ConditionalOnClass found requiredclasses 'org.apache.catalina.startup.Tomcat','org.apache.tomcat.websocket.server.WsSci' (OnClassCondition)   WebSocketAutoConfiguration.TomcatWebSocketConfiguration#websocketContainerCustomizermatched      - @ConditionalOnJava (1.7 or newer) found1.8 (OnJavaCondition)      - @ConditionalOnMissingBean (names:websocketContainerCustomizer; SearchStrategy: all) did not find any beans(OnBeanCondition) *************************************************************************************************未启动的配置*************************************************************************************************Negative matches:-----------------    ActiveMQAutoConfiguration did not match      - @ConditionalOnClass did not findrequired classes 'javax.jms.ConnectionFactory','org.apache.activemq.ActiveMQConnectionFactory' (OnClassCondition)    AopAutoConfiguration did not match      - @ConditionalOnClass did not findrequired classes 'org.aspectj.lang.annotation.Aspect','org.aspectj.lang.reflect.Advice' (OnClassCondition)    ArtemisAutoConfiguration did not match      - @ConditionalOnClass did not findrequired classes 'javax.jms.ConnectionFactory','org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory'(OnClassCondition)    BatchAutoConfiguration did not match      - @ConditionalOnClass did not findrequired class 'org.springframework.batch.core.launch.JobLauncher'(OnClassCondition)    CacheAutoConfiguration did not match      - @ConditionalOnClass found requiredclass 'org.springframework.cache.CacheManager' (OnClassCondition)      - @ConditionalOnBean (types:org.springframework.cache.interceptor.CacheAspectSupport; SearchStrategy: all)did not find any beans (OnBeanCondition)   CacheAutoConfiguration.CacheManagerJpaDependencyConfiguration did notmatch      - @ConditionalOnClass did not findrequired class'org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean'(OnClassCondition)      - Ancestororg.springframework.boot.autoconfigure.cache.CacheAutoConfiguration did notmatch (ConditionEvaluationReport.AncestorsMatchedCondition)    CaffeineCacheConfiguration did not match      - @ConditionalOnClass did not findrequired classes 'com.github.benmanes.caffeine.cache.Caffeine','org.springframework.cache.caffeine.CaffeineCacheManager' (OnClassCondition)    CassandraAutoConfiguration did not match      - @ConditionalOnClass did not findrequired class 'com.datastax.driver.core.Cluster' (OnClassCondition)    CassandraDataAutoConfiguration did not match      - @ConditionalOnClass did not findrequired classes 'com.datastax.driver.core.Cluster','org.springframework.data.cassandra.core.CassandraAdminOperations'(OnClassCondition)    CassandraRepositoriesAutoConfiguration didnot match      - @ConditionalOnClass did not findrequired classes 'com.datastax.driver.core.Session','org.springframework.data.cassandra.repository.CassandraRepository'(OnClassCondition)    CloudAutoConfiguration did not match      - @ConditionalOnClass did not findrequired class 'org.springframework.cloud.config.java.CloudScanConfiguration'(OnClassCondition)    CouchbaseAutoConfiguration did not match      - @ConditionalOnClass did not findrequired classes 'com.couchbase.client.java.CouchbaseBucket','com.couchbase.client.java.Cluster' (OnClassCondition)    CouchbaseCacheConfiguration did not match      - @ConditionalOnClass did not findrequired classes 'com.couchbase.client.java.Bucket','com.couchbase.client.spring.cache.CouchbaseCacheManager' (OnClassCondition)    CouchbaseDataAutoConfiguration did not match      - @ConditionalOnClass did not findrequired classes 'com.couchbase.client.java.Bucket','org.springframework.data.couchbase.repository.CouchbaseRepository'(OnClassCondition)    CouchbaseRepositoriesAutoConfiguration didnot match      - @ConditionalOnClass did not findrequired classes 'com.couchbase.client.java.Bucket','org.springframework.data.couchbase.repository.CouchbaseRepository'(OnClassCondition)   DataSourceAutoConfiguration.EmbeddedDatabaseConfiguration did not match      - EmbeddedDataSource found supportedpooled data source (DataSourceAutoConfiguration.EmbeddedDatabaseCondition)   DataSourceAutoConfiguration.TomcatDataSourceJmxConfiguration did notmatch      - @ConditionalOnClass found requiredclass 'org.apache.tomcat.jdbc.pool.DataSourceProxy' (OnClassCondition)      - EmbeddedDataAvailable found existingauto-configured database(DataSourceAutoConfiguration.DataSourceAvailableCondition)      - @ConditionalOnProperty(spring.datasource.jmx-enabled) did not find property 'jmx-enabled'(OnPropertyCondition)    DataSourceConfiguration.Dbcp did not match      - @ConditionalOnClass did not findrequired class 'org.apache.commons.dbcp.BasicDataSource' (OnClassCondition)    DataSourceConfiguration.Dbcp2 did not match      - @ConditionalOnClass did not findrequired class 'org.apache.commons.dbcp2.BasicDataSource' (OnClassCondition)    DataSourceConfiguration.Generic did notmatch      - @ConditionalOnProperty(spring.datasource.type) did not find property 'spring.datasource.type'(OnPropertyCondition)    DataSourceConfiguration.Hikari did not match      - @ConditionalOnClass did not findrequired class 'com.zaxxer.hikari.HikariDataSource' (OnClassCondition)   DataSourcePoolMetadataProvidersConfiguration.CommonsDbcp2PoolDataSourceMetadataProviderConfigurationdid not match      - @ConditionalOnClass did not findrequired class 'org.apache.commons.dbcp2.BasicDataSource' (OnClassCondition)   DataSourcePoolMetadataProvidersConfiguration.CommonsDbcpPoolDataSourceMetadataProviderConfigurationdid not match      - @ConditionalOnClass did not findrequired class 'org.apache.commons.dbcp.BasicDataSource' (OnClassCondition)   DataSourcePoolMetadataProvidersConfiguration.HikariPoolDataSourceMetadataProviderConfigurationdid not match      - @ConditionalOnClass did not findrequired class 'com.zaxxer.hikari.HikariDataSource' (OnClassCondition)   DevToolsDataSourceAutoConfiguration.DatabaseShutdownExecutorJpaDependencyConfigurationdid not match      - @ConditionalOnClass did not findrequired class'org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean'(OnClassCondition)   DeviceDelegatingViewResolverAutoConfiguration did not match      - @ConditionalOnClass did not findrequired class'org.springframework.mobile.device.view.LiteDeviceDelegatingViewResolver'(OnClassCondition)    DeviceResolverAutoConfiguration did notmatch      - @ConditionalOnClass did not findrequired classes'org.springframework.mobile.device.DeviceResolverHandlerInterceptor','org.springframework.mobile.device.DeviceHandlerMethodArgumentResolver'(OnClassCondition)   DispatcherServletAutoConfiguration.DispatcherServletConfiguration#multipartResolverdid not match      - @ConditionalOnBean (types:org.springframework.web.multipart.MultipartResolver; SearchStrategy: all) didnot find any beans (OnBeanCondition)    EhCacheCacheConfiguration did not match      - @ConditionalOnClass did not findrequired classes 'net.sf.ehcache.Cache','org.springframework.cache.ehcache.EhCacheCacheManager' (OnClassCondition)    ElasticsearchAutoConfiguration did not match      - @ConditionalOnClass did not findrequired classes 'org.elasticsearch.client.Client','org.springframework.data.elasticsearch.client.TransportClientFactoryBean','org.springframework.data.elasticsearch.client.NodeClientFactoryBean'(OnClassCondition)    ElasticsearchDataAutoConfiguration did notmatch      - @ConditionalOnClass did not findrequired classes 'org.elasticsearch.client.Client','org.springframework.data.elasticsearch.core.ElasticsearchTemplate'(OnClassCondition)    ElasticsearchRepositoriesAutoConfigurationdid not match      - @ConditionalOnClass did not findrequired classes 'org.elasticsearch.client.Client','org.springframework.data.elasticsearch.repository.ElasticsearchRepository'(OnClassCondition)    EmbeddedMongoAutoConfiguration did not match      - @ConditionalOnClass did not findrequired classes 'com.mongodb.Mongo', 'de.flapdoodle.embed.mongo.MongodStarter'(OnClassCondition)   EmbeddedServletContainerAutoConfiguration.EmbeddedJetty did not match      - @ConditionalOnClass did not findrequired classes 'org.eclipse.jetty.server.Server','org.eclipse.jetty.util.Loader', 'org.eclipse.jetty.webapp.WebAppContext'(OnClassCondition)   EmbeddedServletContainerAutoConfiguration.EmbeddedUndertow did not match      - @ConditionalOnClass did not findrequired classes 'io.undertow.Undertow', 'org.xnio.SslClientAuthMode'(OnClassCondition)    FacebookAutoConfiguration did not match      - @ConditionalOnClass did not findrequired classes'org.springframework.social.config.annotation.SocialConfigurerAdapter','org.springframework.social.facebook.connect.FacebookConnectionFactory'(OnClassCondition)    FallbackWebSecurityAutoConfiguration did notmatch      - @ConditionalOnClass did not findrequired class'org.springframework.security.config.annotation.web.configuration.EnableWebSecurity'(OnClassCondition)    FlywayAutoConfiguration did not match      - @ConditionalOnClass did not findrequired class 'org.flywaydb.core.Flyway' (OnClassCondition)    FreeMarkerAutoConfiguration did not match      - @ConditionalOnClass did not findrequired classes 'freemarker.template.Configuration','org.springframework.ui.freemarker.FreeMarkerConfigurationFactory'(OnClassCondition)    GroovyTemplateAutoConfiguration did notmatch      - @ConditionalOnClass did not findrequired class 'groovy.text.markup.MarkupTemplateEngine' (OnClassCondition)    GsonAutoConfiguration did not match      - @ConditionalOnClass did not findrequired class 'com.google.gson.Gson' (OnClassCondition)    GsonHttpMessageConvertersConfiguration didnot match      - @ConditionalOnClass did not findrequired class 'com.google.gson.Gson' (OnClassCondition)    GuavaCacheConfiguration did not match      - @ConditionalOnClass did not findrequired classes 'com.google.common.cache.CacheBuilder','org.springframework.cache.guava.GuavaCacheManager' (OnClassCondition)    H2ConsoleAutoConfiguration did not match      - @ConditionalOnClass did not findrequired class 'org.h2.server.web.WebServlet' (OnClassCondition)    HazelcastAutoConfiguration did not match      - @ConditionalOnClass did not findrequired class 'com.hazelcast.core.HazelcastInstance' (OnClassCondition)    HazelcastCacheConfiguration did not match      - @ConditionalOnClass did not findrequired classes 'com.hazelcast.core.HazelcastInstance','com.hazelcast.spring.cache.HazelcastCacheManager' (OnClassCondition)    HazelcastJpaDependencyAutoConfiguration didnot match      - @ConditionalOnClass did not findrequired classes 'com.hazelcast.core.HazelcastInstance','org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean'(OnClassCondition)    HibernateJpaAutoConfiguration did not match      - @ConditionalOnClass did not findrequired classes'org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean','javax.persistence.EntityManager' (OnClassCondition)    HornetQAutoConfiguration did not match      - @ConditionalOnClass did not findrequired classes 'javax.jms.ConnectionFactory','org.hornetq.api.jms.HornetQJMSClient' (OnClassCondition)    HypermediaAutoConfiguration did not match      - @ConditionalOnClass did not findrequired classes 'org.springframework.hateoas.Resource','org.springframework.plugin.core.Plugin' (OnClassCondition)    InfinispanCacheConfiguration did not match      - @ConditionalOnClass did not findrequired class 'org.infinispan.spring.provider.SpringEmbeddedCacheManager'(OnClassCondition)    IntegrationAutoConfiguration did not match      - @ConditionalOnClass did not findrequired class 'org.springframework.integration.config.EnableIntegration'(OnClassCondition)    JCacheCacheConfiguration did not match      - @ConditionalOnClass did not findrequired classes 'javax.cache.Caching','org.springframework.cache.jcache.JCacheCacheManager' (OnClassCondition)   JacksonAutoConfiguration.JodaDateTimeJacksonConfiguration did not match      - @ConditionalOnClass did not findrequired classes 'org.joda.time.DateTime','com.fasterxml.jackson.datatype.joda.ser.DateTimeSerializer','com.fasterxml.jackson.datatype.joda.cfg.JacksonJodaDateFormat' (OnClassCondition)   JacksonAutoConfiguration.ParameterNamesModuleConfiguration did not match      - @ConditionalOnClass did not findrequired class 'com.fasterxml.jackson.module.paramnames.ParameterNamesModule'(OnClassCondition)   JacksonHttpMessageConvertersConfiguration.MappingJackson2XmlHttpMessageConverterConfigurationdid not match      - @ConditionalOnClass did not findrequired class 'com.fasterxml.jackson.dataformat.xml.XmlMapper'(OnClassCondition)    JerseyAutoConfiguration did not match      - @ConditionalOnClass did not findrequired class 'org.glassfish.jersey.server.spring.SpringComponentProvider'(OnClassCondition)    JestAutoConfiguration did not match      - @ConditionalOnClass did not findrequired class 'io.searchbox.client.JestClient' (OnClassCondition)    JmsAutoConfiguration did not match      - @ConditionalOnClass did not findrequired class 'org.springframework.jms.core.JmsTemplate' (OnClassCondition)    JndiConnectionFactoryAutoConfiguration didnot match      - @ConditionalOnClass did not findrequired class 'org.springframework.jms.core.JmsTemplate' (OnClassCondition)    JndiDataSourceAutoConfiguration did notmatch      - @ConditionalOnClass found requiredclasses 'javax.sql.DataSource','org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType'(OnClassCondition)      - @ConditionalOnProperty(spring.datasource.jndi-name) did not find property 'jndi-name'(OnPropertyCondition)    JooqAutoConfiguration did not match      - @ConditionalOnClass did not findrequired class 'org.jooq.DSLContext' (OnClassCondition)    JpaRepositoriesAutoConfiguration did notmatch      - @ConditionalOnClass did not findrequired class 'org.springframework.data.jpa.repository.JpaRepository'(OnClassCondition)    JtaAutoConfiguration did not match      - @ConditionalOnClass did not findrequired class 'javax.transaction.Transaction' (OnClassCondition)    LinkedInAutoConfiguration did not match      - @ConditionalOnClass did not findrequired classes'org.springframework.social.config.annotation.SocialConfigurerAdapter','org.springframework.social.linkedin.connect.LinkedInConnectionFactory'(OnClassCondition)    LiquibaseAutoConfiguration did not match      - @ConditionalOnClass did not findrequired class 'liquibase.integration.spring.SpringLiquibase'(OnClassCondition)    MailSenderAutoConfiguration did not match      - @ConditionalOnClass did not findrequired class 'javax.mail.internet.MimeMessage' (OnClassCondition)    MailSenderValidatorAutoConfiguration did notmatch      - @ConditionalOnProperty(spring.mail.test-connection) did not find property 'test-connection'(OnPropertyCondition)    MessageSourceAutoConfiguration did not match      - ResourceBundle did not find bundle withbasename messages (MessageSourceAutoConfiguration.ResourceBundleCondition)    MongoAutoConfiguration did not match      - @ConditionalOnClass did not findrequired class 'com.mongodb.MongoClient' (OnClassCondition)    MongoDataAutoConfiguration did not match      - @ConditionalOnClass did not findrequired classes 'com.mongodb.Mongo','org.springframework.data.mongodb.core.MongoTemplate' (OnClassCondition)    MongoRepositoriesAutoConfiguration did notmatch      - @ConditionalOnClass did not findrequired classes 'com.mongodb.Mongo','org.springframework.data.mongodb.repository.MongoRepository'(OnClassCondition)    MustacheAutoConfiguration did not match      - @ConditionalOnClass did not findrequired class 'com.samskivert.mustache.Mustache' (OnClassCondition)   MybatisAutoConfiguration.MapperScannerRegistrarNotFoundConfiguration didnot match      - @ConditionalOnMissingBean (types:org.mybatis.spring.mapper.MapperFactoryBean; SearchStrategy: all) found bean'&userMapper' (OnBeanCondition)    Neo4jDataAutoConfiguration did not match      - @ConditionalOnClass did not findrequired classes 'org.neo4j.ogm.session.Neo4jSession','org.springframework.data.neo4j.template.Neo4jOperations' (OnClassCondition)    Neo4jRepositoriesAutoConfiguration did notmatch      - @ConditionalOnClass did not findrequired classes 'org.neo4j.ogm.session.Neo4jSession','org.springframework.data.neo4j.repository.GraphRepository' (OnClassCondition)    OAuth2AutoConfiguration did not match      - @ConditionalOnClass did not findrequired class 'org.springframework.security.oauth2.common.OAuth2AccessToken'(OnClassCondition)    ProjectInfoAutoConfiguration#buildPropertiesdid not match      - @ConditionalOnResource did not findresource'${spring.info.build.location:classpath:META-INF/build-info.properties}'(OnResourceCondition)    ProjectInfoAutoConfiguration#gitPropertiesdid not match      - GitResource did not find git info atclasspath:git.properties(ProjectInfoAutoConfiguration.GitResourceAvailableCondition)    RabbitAutoConfiguration did not match      - @ConditionalOnClass did not findrequired classes 'org.springframework.amqp.rabbit.core.RabbitTemplate','com.rabbitmq.client.Channel' (OnClassCondition)    ReactorAutoConfiguration did not match      - @ConditionalOnClass did not findrequired classes 'reactor.spring.context.config.EnableReactor','reactor.Environment' (OnClassCondition)    RedisAutoConfiguration did not match      - @ConditionalOnClass did not findrequired classes'org.springframework.data.redis.connection.jedis.JedisConnection','org.springframework.data.redis.core.RedisOperations','redis.clients.jedis.Jedis' (OnClassCondition)    RedisRepositoriesAutoConfiguration did notmatch      - @ConditionalOnClass did not findrequired classes 'redis.clients.jedis.Jedis','org.springframework.data.redis.repository.configuration.EnableRedisRepositories'(OnClassCondition)    RemoteDevToolsAutoConfiguration did notmatch      - @ConditionalOnClass found requiredclasses 'javax.servlet.Filter','org.springframework.http.server.ServerHttpRequest' (OnClassCondition)      - @ConditionalOnProperty(spring.devtools.remote.secret) did not find property 'secret'(OnPropertyCondition)    RepositoryRestMvcAutoConfiguration did notmatch      - @ConditionalOnClass did not findrequired class'org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration'(OnClassCondition)    SecurityAutoConfiguration did not match      - @ConditionalOnClass did not findrequired classes'org.springframework.security.authentication.AuthenticationManager','org.springframework.security.config.annotation.authentication.configurers.GlobalAuthenticationConfigurerAdapter'(OnClassCondition)    SecurityFilterAutoConfiguration did notmatch      - @ConditionalOnClass did not findrequired classes'org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer','org.springframework.security.config.http.SessionCreationPolicy' (OnClassCondition)    SendGridAutoConfiguration did not match      - @ConditionalOnClass did not findrequired class 'com.sendgrid.SendGrid' (OnClassCondition)    SessionAutoConfiguration did not match      - @ConditionalOnClass did not findrequired class 'org.springframework.session.Session' (OnClassCondition)    SitePreferenceAutoConfiguration did notmatch      - @ConditionalOnClass did not findrequired classes'org.springframework.mobile.device.site.SitePreferenceHandlerInterceptor','org.springframework.mobile.device.site.SitePreferenceHandlerMethodArgumentResolver'(OnClassCondition)    SocialWebAutoConfiguration did not match      - @ConditionalOnClass did not findrequired classes 'org.springframework.social.connect.web.ConnectController','org.springframework.social.config.annotation.SocialConfigurerAdapter'(OnClassCondition)    SolrAutoConfiguration did not match      - @ConditionalOnClass did not findrequired classes 'org.apache.solr.client.solrj.impl.HttpSolrClient','org.apache.solr.client.solrj.impl.CloudSolrClient' (OnClassCondition)    SolrRepositoriesAutoConfiguration did notmatch      - @ConditionalOnClass did not findrequired classes 'org.apache.solr.client.solrj.SolrClient','org.springframework.data.solr.repository.SolrRepository' (OnClassCondition)    SpringApplicationAdminJmxAutoConfigurationdid not match      - @ConditionalOnProperty(spring.application.admin.enabled=true) did not find property 'enabled'(OnPropertyCondition)    SpringDataWebAutoConfiguration did not match      - @ConditionalOnClass did not findrequired class'org.springframework.data.web.PageableHandlerMethodArgumentResolver'(OnClassCondition)    ThymeleafAutoConfiguration did not match      - @ConditionalOnClass did not findrequired class 'org.thymeleaf.spring4.SpringTemplateEngine' (OnClassCondition)    TwitterAutoConfiguration did not match      - @ConditionalOnClass did not findrequired classes'org.springframework.social.config.annotation.SocialConfigurerAdapter','org.springframework.social.twitter.connect.TwitterConnectionFactory'(OnClassCondition)    VelocityAutoConfiguration did not match      - @ConditionalOnClass did not findrequired classes 'org.apache.velocity.app.VelocityEngine','org.springframework.ui.velocity.VelocityEngineFactory' (OnClassCondition)   WebMvcAutoConfiguration.ResourceChainCustomizerConfiguration did notmatch      - @ConditionalOnEnabledResourceChain didnot find class org.webjars.WebJarAssetLocator (OnEnabledResourceChainCondition)   WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#beanNameViewResolverdid not match      - @ConditionalOnMissingBean (types:org.springframework.web.servlet.view.BeanNameViewResolver; SearchStrategy: all)found bean 'beanNameViewResolver' (OnBeanCondition)   WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#dateFormatter didnot match      - @ConditionalOnProperty(spring.mvc.date-format) did not find property 'date-format'(OnPropertyCondition)   WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#localeResolverdid not match      - @ConditionalOnMissingBean (types:org.springframework.web.servlet.LocaleResolver; SearchStrategy: all) did notfind any beans (OnBeanCondition)      - @ConditionalOnProperty(spring.mvc.locale) did not find property 'locale' (OnPropertyCondition)    WebServicesAutoConfiguration did not match      - @ConditionalOnClass did not findrequired class 'org.springframework.ws.transport.http.MessageDispatcherServlet'(OnClassCondition)   WebSocketAutoConfiguration.JettyWebSocketConfiguration did not match      - @ConditionalOnClass did not findrequired class'org.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer'(OnClassCondition)   WebSocketAutoConfiguration.UndertowWebSocketConfiguration did not match      - @ConditionalOnClass did not findrequired class 'io.undertow.websockets.jsr.Bootstrap' (OnClassCondition)    WebSocketMessagingAutoConfiguration did notmatch      - @ConditionalOnClass did not findrequired class'org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer'(OnClassCondition)    XADataSourceAutoConfiguration did not match      - @ConditionalOnClass did not findrequired class 'javax.transaction.TransactionManager' (OnClassCondition)


 

 

 

   可以看出在Spring-boot-autoconfigure-1.3自动配置包拥有着全而多的配置项,可以说是包罗所有开发所需,我启动的项目属于标准的SSM配置,无其他中间件。且我的properteis中添加了对datasource的属性赋值,在自动配置中可以看出关于DataSource的配置注解为”OnClassCondition“,意思是是当类的路径下有指定类的条件。

 

   关于SpringBoot的运行原理,需要继续分析它的核心注解类:@SpringBootApplication,这是个组合注解,它的核心功能是@EableAutoConfiguration它的源码如下:

@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@AutoConfigurationPackage@Import({EnableAutoConfigurationImportSelector.class})Public @interface EnableAutoConfiguration{String ENABLED_OVERRIDE_PROPERTY="spring.boot.enableautoconfiguration"; Class<?>[]exclude()default{}; String[]excludeName()default{};}


 

 这里有个关键的注解类@Import---它具有导入配置的功能。@Import注解使用EnableAutoConfigurationImportSelector用类中的方法SpringFactoriesLoader.loadFactoryNames来扫描具有META-INF/sping.factories文件的jar包,而在Spring-boot-autoconfigure自动配置包中有这个spring.factories文件,这个文件中声明了有哪些自动配置。

 


 

 

源码如下:

 

EnableAutoConfigurationImportSelector:

 

public classEnableAutoConfigurationImportSelector implements DeferredImportSelector,BeanClassLoaderAware,ResourceLoaderAware,BeanFactoryAware,EnvironmentAware,Ordered{……省略 protectedList<String>getCandidateConfigurations(AnnotationMetadatametadata,AnnotationAttributesattributes){Listconfigurations=SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(),this.getBeanClassLoader());Assert.notEmpty(configurations,"NoautoconfigurationclassesfoundinMETA-INF/spring.factories.Ifyouareusingacustompackaging,makesurethatfileiscorrect.");returnconfigurations;}  ……省略 }


 

loadFactoryNames源码:

 

public static List<String> loadFactoryNames(Class<?>factoryClass,ClassLoaderclassLoader){
StringfactoryClassName=factoryClass.getName(); try{Enumerationex=classLoader!=null?classLoader.getResources("META-INF/spring.factories"):ClassLoader.getSystemResources("META-INF/spring.factories");ArrayListresult=newArrayList(); while(ex.hasMoreElements()){URLurl=(URL)ex.nextElement();Propertiesproperties=PropertiesLoaderUtils.loadProperties(newUrlResource(url));StringfactoryClassNames=properties.getProperty(factoryClassName);result.addAll(Arrays.asList(StringUtils.commaDelimitedListToStringArray(factoryClassNames)));} returnresult;}catch(IOExceptionvar8){thrownewIllegalArgumentException("Unabletoload["+factoryClass.getName()+"]factoriesfromlocation["+"META-INF/spring.factories"+"]",var8);}}


  如此,Spring-Boot就帮我们开启了自动配置,当我们需要集成第三方软件时,只要在application.properties中写上,Spring Boot就会自动覆盖相应的信息。






原创粉丝点击