IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring Boot:(七)自动配置原理 -> 正文阅读

[Java知识库]Spring Boot:(七)自动配置原理

1.可以查看HttpEncodingAutoConfiguration
2.通用模式

  • xxxAutoConfiguration:自动配置类
  • xxxProperties:属性配置类
  • yaml/properties文件中能配置的值就来源于【属性配置类】

3.几个重要注解

  • @Bean
  • @Conditional

4.--debug查看详细的自动配置报告

1. Spring Boot官网完整配置文件

# REDIS (Redis 配置)
# 连接工厂使用的数据库索引
spring.redis.database= 0
# Redis服务器主机
spring.redis.host= localhost
# 登录redis服务器的密码
spring.redis.password= 
# 给定时间池可以分配的最大连接数 使用负值为无限制
spring.redis.pool.max-active= 8
# 池中“空闲”连接的最大数量 使用负值来表示无限数量的空闲连接
spring.redis.pool.max-idle= 8
# 连接分配在池耗尽之前在抛出异常之前应阻止的最大时间量(以毫秒为单位) 使用负值无限期地阻止
spring.redis.pool.max-wait= -1
# 定义池中维护的最小空闲连接数 此设置只有在正值时才有效果
spring.redis.pool.min-idle= 0
# redis服务器端口
spring.redis.port= 6379
# redis服务器名称
spring.redis.sentinel.master=
# 
spring.redis.sentinel.nodes= 
# 连接超时(毫秒)
spring.redis.timeout= 0
 
 
 
# spring 视图分解器 配置
# 启用后退解析支持
spring.mobile.devicedelegatingviewresolver.enable-fallback= false
# 启用设备视图解析器
spring.mobile.devicedelegatingviewresolver.enabled= false
# 前缀,用于查看移动设备的名称
spring.mobile.devicedelegatingviewresolver.mobile-prefix= mobile/
# 后缀,附加到查看移动设备的名称
spring.mobile.devicedelegatingviewresolver.mobile-suffix= 
# 前缀,用于查看普通设备的名称
spring.mobile.devicedelegatingviewresolver.normal-prefix= 
# 后缀,附加到查看普通设备的名称
spring.mobile.devicedelegatingviewresolver.normal-suffix= 
# 前缀,用于查看平板设备的名称
spring.mobile.devicedelegatingviewresolver.tablet-prefix= tablet/
# 后缀,附加到查看平板电脑设备的名称
spring.mobile.devicedelegatingviewresolver.tablet-suffix= 
 
 
# 移动网站首选项 (站点首选项自动配置)
# 启用SitePreferenceHandler
spring.mobile.sitepreference.enabled= true
 
 
# MUSTACHE模板(Mustache AutoConfiguration)
# 启用模板缓存
spring.mustache.cache= false
# 模板编码
spring.mustache.charset= UTF-8
# 检查模板位置是否存在
spring.mustache.check-template-location= true
# Content-Type值
spring.mustache.content-type= text/html
# 启用此技术的MVC视图分辨率
spring.mustache.enabled= true
# 前缀应用于模板名称
spring.mustache.prefix= classpath:/templates/
# 后缀应用于模板名称
spring.mustache.suffix= .html
# 可以解决的视图名称的白名单
spring.mustache.view-names= 
 
 
# SPRING MVC (Web Mvc 配置)
# 异步请求处理超时之前的时间量(以毫秒为单位)
spring.mvc.async.request-timeout= 
# 要使用的日期格式 例如`dd / MM / yyyy`
spring.mvc.date-format= 
# 发送TRACE请求到FrameworkServlet doService方法
spring.mvc.dispatch-trace-request= false
# 发送OPTIONS请求到FrameworkServlet doService方法
spring.mvc.dispatch-options-request= false
# 启用favicon.ico的解析
spring.mvc.favicon.enabled= true
# 如果在重定向方案期间应该忽略“默认”模型的内容
spring.mvc.ignore-default-model-on-redirect= true
# 要使用的区域设置
spring.mvc.locale= 
# 将文件扩展名映射到内容协商的媒体类型
spring.mvc.media-types.*= 
# 消息代码格式策略 例如`PREFIX_ERROR_CODE`
spring.mvc.message-codes-resolver-format= 
# 用于静态资源的路径模式
spring.mvc.static-path-pattern= /**
# 如果没有发现处理程序来处理请求,则应抛出“NoHandlerFoundException”
spring.mvc.throw-exception-if-no-handler-found= false
# Spring MVC视图前缀
spring.mvc.view.prefix= 
# Spring MVC视图后缀
spring.mvc.view.suffix= 
 
 
 #SPRING RESOURCES HANDLING(ResourceProperties)资源处理
spring.resources.add-mappings = true #启用默认资源处理
spring.resources.cache-period = #由资源处理程序提供的资源的缓存期,以秒为单位
spring.resources.chain.cache = true #在资源链中启用缓存
spring.resources.chain.enabled = #启用Spring资源处理链默认情况下禁用,除非启用了至少一个策略
spring.resources.chain.html-application-cache = false #启用HTML5应用程序缓存清单重写
spring.resources.chain.strategy.content.enabled = false #启用内容版本策略
spring.resources.chain.strategy.content.paths = / ** #应用于版本策略的模式的逗号分隔列表
spring.resources.chain.strategy.fixed.enabled = false #启用固定版本策略
spring.resources.chain.strategy.fixed.paths = #应用于版本策略的逗号分隔的模式列表
spring.resources.chain.strategy.fixed.version = #用于版本策略的版本字符串
spring.resources.static-locations = classpath:/ META-INF / resources /,classpath:/ resources /,classpath:/ static /,classpath:/ public / #静态资源的位置
 
 
 #SPRING SOCIAL(SocialWebAutoConfiguration)集群
spring.social.auto-connection-views = false #启用支持的提供程序的连接状态视图
 
 
 #SPRING SOCIAL FACEBOOK(FacebookAutoConfiguration)
spring.social.facebook.app-id = #您的应用程序的Facebook应用程序ID
spring.social.facebook.app-secret = #你的应用程序的Facebook应用程序密码
 
 
 #SPRING SOCIAL LINKEDIN(LinkedInAutoConfiguration)
spring.social.linkedin.app-id = #您的应用程序的LinkedIn应用程序ID
spring.social.linkedin.app-secret = #您的应用程序的LinkedIn App Secret
 
 
 #SPRING SOCIAL TWITTER(TwitterAutoConfiguration)
spring.social.twitter.app-id = #你的应用程序的Twitter应用程序ID
spring.social.twitter.app-secret = #你的应用程序的Twitter App Secret
 
 
 #THYMELEAF Thymeleaf模板引擎配置
spring.thymeleaf.cache = true #启用模板缓存
spring.thymeleaf.check-template-location = true #检查模板位置是否存在
spring.thymeleaf.content-type = text / html #Content-Type值
spring.thymeleaf.enabled = true #启用MVC Thymeleaf视图分辨率
spring.thymeleaf.encoding = UTF-8 #模板编码
spring.thymeleaf.excluded-view-names = #应该从解决方案中排除的视图名称的逗号分隔列表
spring.thymeleaf.mode = HTML5 #应用于模板的模板模式另请参见StandardTemplateModeHandlers
spring.thymeleaf.prefix = classpath:/ templates / #在构建URL时预先查看名称的前缀
spring.thymeleaf.suffix = .html #构建URL时附加查看名称的后缀
spring.thymeleaf.template-resolver-order = #链中模板解析器的顺序
spring.thymeleaf.view-names = #可以解析的视图名称的逗号分隔列表
 
 
 #VELOCITY TEMPLATES(VelocityAutoConfiguration)
spring.velocity.allow-request-override = false #设置是否允许HttpServletRequest属性覆盖(隐藏)控制器生成的同名的模型属性
spring.velocity.allow-session-override = false #设置是否允许HttpSession属性重写(隐藏)控制器生成的同名的模型属性
spring.velocity.cache = #启用模板缓存
spring.velocity.charset = UTF-8 #模板编码
spring.velocity.check-template-location = true #检查模板位置是否存在
spring.velocity.content-type = text / html #Content-Type值
spring.velocity.date-tool-attribute = #在视图的Velocity上下文中公开的DateTool辅助对象的名称
spring.velocity.enabled = true #启用此技术的MVC视图分辨率
spring.velocity.expose-request-attributes = false #设置在与模板合并之前是否应将所有请求属性添加到模型中
spring.velocity.expose-session-attributes = false #设置在与模板合并之前是否应将所有HttpSession属性添加到模型中
spring.velocity.expose-spring-macro-helpers = true #设置是否公开一个RequestContext供Spring Spring的宏库使用,名称为“springMacroRequestContext”
spring.velocity.number-tool-attribute = #在视图的Velocity上下文中公开的NumberTool帮助对象的名称
spring.velocity.prefer-file-system-access = true #首选文件系统访问模板加载文件系统访问可以对模板更改进行热检测
spring.velocity.prefix = #前缀,用于在构建URL时查看名称
spring.velocity.properties* = #附加速度属性
spring.velocity.request-context-attribute = #所有视图的RequestContext属性的名称
spring.velocity.resource-loader-path = classpath:/ templates / #模板路径
spring.velocity.suffix = .vm #构建URL时附加到查看名称的后缀
spring.velocity.toolbox-config-location = #Velocity Toolbox配置位置例如`/ WEB-INF / toolbox.xml'
spring.velocity.view-names = #可以解决的视图名称的白名单
 
 
 #----------------------------------------
 #安全属性
 #----------------------------------------
 #SECURITY(SecurityProperties)
security.basic.authorize-mode = role #应用安全授权模式
security.basic.enabled = true #启用基本身份验证
security.basic.path = / ** #安全路径的逗号分隔列表
security.basic.realm = Spring #HTTP基本的领域名称
security.enable-csrf = false #启用跨站点请求伪造支持
security.filter-order = 0 #安全过滤器连锁订单
security.headers.cache = true #启用缓存控制HTTP头
security.headers.content-type = true# 启用“X-Content-Type-Options”头
security.headers.frame = true #启用“X-Frame-Options”标题
security.headers.hsts = # HTTP严格传输安全(HSTS)模式(无,域,全部)
security.headers.xss = true #启用跨站点脚本(XSS)保护
security.ignored = #从默认安全路径中排除的路径的逗号分隔列表
security.require-ssl = false #为所有请求启用安全通道
security.sessions = stateless #会话创建策略(永远不会,if_required,无状态)
security.user.name = user #默认用户名
security.user.password = #默认用户名的密码默认情况下,启动时会记录随机密码
security.user.role = USER #为默认用户名授予角色
 
 
 #SECURITY OAUTH2 CLIENT(OAuth2ClientProperties
security.oauth2.client.client-id = #OAuth2客户端ID
security.oauth2.client.client-secret = #OAuth2客户机密码默认生成随机密码
 
 
 #SECURITY OAUTH2 RESOURCES(ResourceServerProperties
security.oauth2.resource.id = #资源的标识符
security.oauth2.resource.jwt.key-uri = #JWT令牌的URI如果值不可用并且密钥是公共的,可以设置
security.oauth2.resource.jwt.key-value = #JWT令牌的验证密钥可以是对称秘密或PEM编码的RSA公钥
security.oauth2.resource.prefer-token-info = true #使用令牌信息,可以设置为false以使用用户信息
security.oauth2.resource.service-id = resource #
security.oauth2.resource.token-info-uri = #令牌解码端点的URI
security.oauth2.resource.token-type = #使用userInfoUri时发送的令牌类型
security.oauth2.resource.user-info-uri = #用户端点的URI
 
 
 #SECURITY OAUTH2 SSO(OAuth2SsoProperties
security.oauth2.sso.filter-order = #如果不提供显式的WebSecurityConfigurerAdapter,则应用过滤器顺序
security.oauth2.sso.login-path = / login #登录页面的路径,即触发重定向到OAuth2授权服务器的路径
 
 
 
 
# ----------------------------------------
# DATA PROPERTIES 数据性能
# ----------------------------------------
 
 
# FLYWAY (FlywayProperties)
flyway.baseline-description = #
flyway.baseline-version = 1 #版本开始迁移
flyway.baseline-on-migrate = #
flyway.check-location = false #检查迁移脚本位置是否存在
flyway.clean-on-validation-error = #
flyway.enabled = true #启用飞行路线
flyway.encoding = #
flyway.ignore-failed-future-migration = #
flyway.init-sqls = #执行SQL语句,以便在获取连接后立即初始化连接
flyway.locations = classpath:db / migration #迁移脚本的位置
flyway.out-of-order = #如果您希望Flyway创建自己的DataSource,则需要使用#path密码
flyway.placeholder-prefix = #
flyway.placeholder-replacement = #
flyway.placeholder-suffix = #
flyway.placeholders* = #
flyway.schemas = #schemas来更新
flyway.sql-migration-prefix = V #
flyway.sql-migration-separator = #
flyway.sql-migration-suffix = .sql #
flyway.table = #
flyway.url = #要迁移的数据库的JDBC url如果未设置,则使用主配置的数据源
flyway.user = #登录要迁移的数据库的用户
flyway.validate-on-migrate = #
 
 
# LIQUIBASE (LiquibaseProperties)
liquibase.change-log = classpath:/db/changelog/db.changelog-master.yaml #更改日志配置路径
liquibase.check-change-log-location = true #检查更改日志位置是否存在
liquibase.contexts = #使用逗号分隔的运行时上下文列表
liquibase.default-schema = #默认数据库模式
liquibase.drop-first = false #首先删除数据库模式
liquibase.enabled = true #启用liquidibase支持
liquibase.labels = #使用逗号分隔的运行时标签列表
liquibase.parameters* = #更改日志参数
liquibase.password = #登录要迁移的数据库的密码
liquibase.url = #要迁移的数据库的JDBC url 如果未设置,则使用主配置的数据源
liquibase.user = #登录要迁移的数据库的用户
 
 
 
# DAO (PersistenceExceptionTranslationAutoConfiguration)
spring.dao.exceptiontranslation.enabled= true # 启用持久异常翻译后处理器
 
 
# CASSANDRA (CassandraProperties)
spring.data.cassandra.cluster-name = #Cassandra群集的名称
spring.data.cassandra.compression = #由Cassandra二进制协议支持的压缩
spring.data.cassandra.connect-timeout-millis = #套接字选项:连接超时
spring.data.cassandra.consistency-level = #查询一致性级别
spring.data.cassandra.contact-points = localhost #集群节点地址的逗号分隔列表
spring.data.cassandra.fetch-size = #查询默认的抓取大小
spring.data.cassandra.keyspace-name = #要使用的密钥空间名称
spring.data.cassandra.load-balancing-policy = #负载均衡策略的类名
spring.data.cassandra.port = #Cassandra服务器端口
spring.data.cassandra.password = #登录服务器的密码
spring.data.cassandra.read-timeout-millis = #套接字选项:读取超时
spring.data.cassandra.reconnection-policy = #重新连接策略类
spring.data.cassandra.retry-policy = #重试策略的类名
spring.data.cassandra.serial-consistency-level = #查询串行一致性级别
spring.data.cassandra.ssl = false #启用SSL支持
spring.data.cassandra.username = #登录用户的服务器
 
 
# ELASTICSEARCH (ElasticsearchProperties)
spring.data.elasticsearch.cluster-name = elasticsearch #弹性搜索集群名称
spring.data.elasticsearch.cluster-nodes = #集群节点地址的逗号分隔列表 如果未指定,则启动客户端节点
spring.data.elasticsearch.properties* = #用于配置客户端的其他属性
spring.data.elasticsearch.repositories.enabled = true #启用Elasticsearch存储库
 
 
# MONGODB (MongoProperties)
spring.data.mongodb.authentication-database = #验证数据库名称
spring.data.mongodb.database = test #数据库名称
spring.data.mongodb.field-naming-strategy = #要使用的FieldNamingStrategy的完全限定名称
spring.data.mongodb.grid-fs-database = #GridFS数据库名称
spring.data.mongodb.host = localhost #Mongo服务器主机
spring.data.mongodb.password = #登录mongo服务器的密码
spring.data.mongodb.port = 27017 #Mongo服务器端口
spring.data.mongodb.repositories.enabled = true #启用Mongo存储库
spring.data.mongodb.uri = mongodb:// localhost / test #Mongo数据库URI 设置时,主机和端口将被忽略
spring.data.mongodb.username = #登录mongo服务器的用户
 
 
# DATA REST (RepositoryRestProperties)
spring.data.rest.base-path = #由Spring Data REST用于公开存储库资源的基本路径
spring.data.rest.default-page-size = #页面的默认大小
spring.data.rest.enable-enum-translation = #通过Spring Data REST默认资源包启用枚举值转换
spring.data.rest.limit-param-name = #指示一次返回多少结果的URL查询字符串参数的名称
spring.data.rest.max-page-size = #最大页面大小
spring.data.rest.page-param-name = #指示要返回的页面的URL查询字符串参数的名称
spring.data.rest.return-body-on-create = #创建一个实体后返回响应体
spring.data.rest.return-body-on-update = #更新实体后返回响应体
spring.data.rest.sort-param-name = #指示排序结果的方向的URL查询字符串参数的名称
 
 
# SOLR (SolrProperties)
spring.data.solr.host = http://127.0.0.1:8983/solr #Solr主机 如果设置了“zk-host”,则被忽略
spring.data.solr.repositories.enabled = true #启用Solr存储库
spring.data.solr.zk-host = #ZooKeeper主机地址,格式为HOST:PORT
 
 
# 数据源 配置 (DataSourceAutoConfiguration & DataSourceProperties)
spring.datasource.continue-on-error = false #初始化数据库时发生错误时不要停止
spring.datasource.data = #Data(DML)脚本资源引用
spring.datasource.driver-class-name = #JDBC驱动程序的完全限定名称默认情况下,根据URL自动检测
spring.datasource.initialize = true #使用'data.sql'填充数据库
spring.datasource.jmx-enabled = false #启用JMX支持(如果由底层池提供)
spring.datasource.jndi-name = #数据源的JNDI位置设置时,类,网址,用户名和密码将被忽略
spring.datasource.max-active = #例如100
spring.datasource.max-idle = #例如8
spring.datasource.max等待=
spring.datasource.min-evictable空闲时间-米利斯=
spring.datasource.min-idle = 8
spring.datasource.name = testdb #数据源的名称
spring.datasource.password = #登录数据库的密码
spring.datasource.platform = all #在资源模式(schema - $ {platform} .sql)中使用的平台
spring.datasource.schema = #Schema(DDL)脚本资源引用
spring.datasource.separator =;  #语句分隔符在SQL初始化脚本中
spring.datasource.sql-script-encoding = #SQL脚本编码
spring.datasource.test-on-borrow = #例如`false`
spring.datasource.test-on-return = #例如`false`
spring.datasource.test-while-idle = #
spring.datasource.time-between-eviction-runs-millis = 1
spring.datasource.type = #要使用的连接池实现的完全限定名称默认情况下,它是从类路径自动检测的
spring.datasource.url = #数据库的JDBC url
spring.datasource.username= 
spring.datasource.validation-query= 
 
 
# H2 Web Console (H2ConsoleProperties)  
spring.h2.console.enabled = false #启用控制台
spring.h2.console.path = / h2-console #控制台可用的路径
 
 
# JOOQ (JooqAutoConfiguration)
spring.jooq.sql-dialect=  # 与配置的数据源通信时使用的SQLDialect JOOQ 例如`POSTGRES`
 
 
# JPA (JpaBaseConfiguration, HibernateJpaAutoConfiguration)
spring.data.jpa.repositories.enabled = true #启用JPA存储库
spring.jpa.database = #目标数据库进行操作,默认情况下自动检测可以使用“databasePlatform”属性设置
spring.jpa.database-platform = #要运行的目标数据库的名称,默认情况下自动检测可以使用“数据库”枚举来设置
spring.jpa.generate-ddl = false #启动时初始化模式
spring.jpa.hibernate.ddl-auto = #DDL模式这实际上是“hibernate.hbm2ddl.auto”属性的快捷方式使用嵌入式数据库时默认为“创建删除”,否则为“否”
spring.jpa.hibernate.naming-strategy = #命名策略完全限定名
spring.jpa.open-in-view = true #注册OpenEntityManagerInViewInterceptor将JPA EntityManager绑定到线程以进行请求的整个处理
spring.jpa.properties* = #在JPA提供程序上设置的其他本机属性
spring.jpa.show-sql = false #启用SQL语句的日志记录
 
 
# JTA (JtaAutoConfiguration)
spring.jta* = #技术特定配置
spring.jta.log-dir = #Transaction logs目录
 
 
# ATOMIKOS
spring.jta.atomikos.connectionfactory.borrow-connection-timeout = 30 #从池中借用连接的超时(以秒为单位)
spring.jta.atomikos.connectionfactory.ignore-session-transacted-flag = true #创建会话时是否忽略事务标志
spring.jta.atomikos.connectionfactory.local-transaction-mode = false #是否需要本地事务
spring.jta.atomikos.connectionfactory.maintenance-interval = 60 #池的维护线程运行之间的时间(以秒为单位)
spring.jta.atomikos.connectionfactory.max-idle-time = 60 #从池中清除连接之后的时间(以秒为单位)
spring.jta.atomikos.connectionfactory.max-lifetime = 0 #在被破坏之前可以将连接合并的时间(以秒为单位) 0表示无限制
spring.jta.atomikos.connectionfactory.max-pool-size = 1 #池的最大大小
spring.jta.atomikos.connectionfactory.min-pool-size = 1 #池的最小大小
spring.jta.atomikos.connectionfactory.reap-timeout = 0 #借用连接的收获超时(以秒为单位) 0表示无限制
spring.jta.atomikos.connectionfactory.unique-resource-name = jmsConnectionFactory #用于在恢复期间标识资源的唯一名称
spring.jta.atomikos.datasource.borrow-connection-timeout = 30 #从池中借出连接的超时(秒)
spring.jta.atomikos.datasource.default-isolation-level = #池提供的连接的默认隔离级别
spring.jta.atomikos.datasource.login-timeout = #用于建立数据库连接的超时(以秒为单位)
spring.jta.atomikos.datasource.maintenance-interval = 60 #池的维护线程运行之间的时间(以秒为单位)
spring.jta.atomikos.datasource.max-idle-time = 60 #从池中清除连接之后的时间(以秒为单位)
spring.jta.atomikos.datasource.max-lifetime = 0 #在被破坏之前可以将连接合并的时间(以秒为单位) 0表示无限制
spring.jta.atomikos.datasource.max-pool-size = 1 #池的最大大小
spring.jta.atomikos.datasource.min-pool-size = 1 #池的最小大小
spring.jta.atomikos.datasource.reap-timeout = 0 #借用连接的收获超时(以秒为单位) 0表示无限制
spring.jta.atomikos.datasource.test-query = #用于在返回连接之前验证连接的SQL查询或语句
spring.jta.atomikos.datasource.unique-resource-name = dataSource #用于在恢复期间识别资源的唯一名称
 
 
# BITRONIX
spring.jta.bitronix.connectionfactory.acquire-increment = 1 #生成池时要创建的连接数
spring.jta.bitronix.connectionfactory.acquisition-interval = 1 #在获取无效连接后再次尝试获取连接之前等待的时间(以秒为单位)
spring.jta.bitronix.connectionfactory.acquisition-timeout = 30 #从池中获取连接的超时(以秒为单位)
spring.jta.bitronix.connectionfactory.allow-local-transactions = true #事务管理器是否允许混合XA和非XA事务
spring.jta.bitronix.connectionfactory.apply-transaction-timeout = false #当XAResource被登记时,是否应该设置事务超时
spring.jta.bitronix.connectionfactory.automatic-enlisting-enabled = true #资源是否应该被自动登记和删除
spring.jta.bitronix.connectionfactory.cache-producer-consumer = true #是否生产和消费者应该被缓存
spring.jta.bitronix.connectionfactory.defer-connection-release = true #提供程序是否可以在同一连接上运行许多事务,并支持事务交织
spring.jta.bitronix.connectionfactory.ignore-recovery-failures = false #是否应忽略恢复失败
spring.jta.bitronix.connectionfactory.max-idle-time = 60 #从池中清除连接之后的时间(以秒为单位)
spring.jta.bitronix.connectionfactory.max-pool-size = 10 #池的最大大小 0表示无限制
spring.jta.bitronix.connectionfactory.min-pool-size = 0 #池的最小大小
spring.jta.bitronix.connectionfactory.password = #用于连接到JMS提供程序的密码
spring.jta.bitronix.connectionfactory.share-transaction-connections = false #ACCESSIBLE状态中的连接是否可以在事务的上下文中共享
spring.jta.bitronix.connectionfactory.test-connections = true #从池中获取连接是否应该进行测试
spring.jta.bitronix.connectionfactory.two-pc-ordering-position = 1 #在两阶段提交期间该资源应该采取的位置(始终为Integer.MIN_VALUE,始终为Integer.MAX_VALUE)
spring.jta.bitronix.connectionfactory.unique-name = jmsConnectionFactory #用于在恢复期间标识资源的唯一名称
spring.jta.bitronix.connectionfactory.use-tm-join = true启动XAResource时是否应使用TMJOIN
spring.jta.bitronix.connectionfactory.user = #用于连接到JMS提供者的用户
spring.jta.bitronix.datasource.acquire-increment = 1 #生成池时要创建的连接数
spring.jta.bitronix.datasource.acquisition-interval = 1 #在获取无效连接后再尝试获取连接之前等待的时间(以秒为单位)
spring.jta.bitronix.datasource.acquisition-timeout = 30 #从池中获取连接的超时(以秒为单位)
spring.jta.bitronix.datasource.allow-local-transactions = true #事务管理器是否允许混合XA和非XA事务
spring.jta.bitronix.datasource.apply-transaction-timeout = false #当XAResource被登记时,是否应该设置事务超时
spring.jta.bitronix.datasource.automatic-enlisting-enabled = true #资源是否应该被登记和自动删除
spring.jta.bitronix.datasource.cursor-holdability = #连接的默认游标保持性
spring.jta.bitronix.datasource.defer-connection-release = true #数据库是否可以在同一连接上运行许多事务,并支持事务交织
spring.jta.bitronix.datasource.enable-jdbc4-connection-test = #从池中获取连接时是否调用Connection.isValid()
spring.jta.bitronix.datasource.ignore-recovery-failures = false #是否应忽略恢复失败
spring.jta.bitronix.datasource.isolation-level = #连接的默认隔离级别
spring.jta.bitronix.datasource.local-auto-commit = #本地事务的默认自动提交模式
spring.jta.bitronix.datasource.login-timeout = #用于建立数据库连接的超时(以秒为单位)
spring.jta.bitronix.datasource.max-idle-time = 60 #从池中清除连接之后的时间(以秒为单位)
spring.jta.bitronix.datasource.max-pool-size = 10 #池的最大大小 0表示无限制
spring.jta.bitronix.datasource.min-pool-size = 0 #池的最小大小
spring.jta.bitronix.datasource.prepared-statement-cache-size = 0 #准备好的语句高速缓存的目标大小 0禁用缓存
spring.jta.bitronix.datasource.share-transaction-connections = false #ACCESSIBLE状态下的连接是否可以在事务的上下文中共享
spring.jta.bitronix.datasource.test-query = #用于在返回连接之前验证连接的SQL查询或语句
spring.jta.bitronix.datasource.two-pc-ordering-position = 1 #在两阶段提交期间该资源应该采取的位置(始终为Integer.MIN_VALUE,始终为Integer.MAX_VALUE)
spring.jta.bitronix.datasource.unique-name = dataSource #用于在恢复期间标识资源的唯一名称
spring.jta.bitronix.datasource.use-tm-join = true启动XAResource时是否应使用TMJOIN
 
 
 
# EMBEDDED MONGODB (EmbeddedMongoProperties)
spring.mongodb.embedded.features = SYNC_DELAY #启用功能的逗号分隔列表
spring.mongodb.embedded.version = 2.6.10 #Mongo使用版本
 
 
# ----------------------------------------
# 整合属性
# ----------------------------------------
 
 #ACTIVEMQ(ActiveMQProperties)
spring.activemq.broker-url = #ActiveMQ代理的URL 默认自动生成 例如`tcp:// localhost:61616`
spring.activemq.in-memory = true #指定默认代理URL是否应在内存中 如果指定了一个显式代理,则被忽略
spring.activemq.password = #登录密码的代理
spring.activemq.pooled = false #指定是否创建PooledConnectionFactory而不是常规的ConnectionFactory
spring.activemq.user = #代理登录用户
 
 
# ARTEMIS (ArtemisProperties)
spring.artemis.embedded.cluster-password = #群集密码 默认情况下随机生成
spring.artemis.embedded.data-directory = #日志文件目录 如果持久性被关闭,则不需要
spring.artemis.embedded.enabled = true #如果Artemis服务器API可用,启用嵌入式模式
spring.artemis.embedded.persistent = false #启用持久存储
spring.artemis.embedded.queues = #启动时要创建的队列的逗号分隔列表
spring.artemis.embedded.server-id = #服务器ID 默认情况下,使用自动递增的计数器
spring.artemis.embedded.topics = #启动时要创建的主题的逗号分隔列表
spring.artemis.host = localhost #Artemis代理主机
spring.artemis.mode = #Artemis部署模式,默认情况下自动检测 可以显式设置为“native”或“embedded”
spring.artemis.port = 61616 #Artemis 中间件端口
 
 
# SPRING BATCH(Batch 配置)
spring.batch.initializer.enabled = true #如果需要,在启动时创建所需的批处理表
spring.batch.job.enabled = true #在启动时执行上下文中的所有Spring批处理作业
spring.batch.job.names = #在启动时执行的作业名称的逗号分隔列表(例如`job1,job2`) 默认情况下,执行在上下文中找到的所有作业
spring.batch.schema = classpath:org / springframework / batch / core / schema - @@ platform @@sql #用于初始化数据库模式的SQL文件的路径
spring.batch.table-prefix = #所有批次元数据表的表前缀
 
 
# HORNETQ (HornetQ 配置)
spring.hornetq.embedded.cluster-password = #集群密码 默认情况下随机生成
spring.hornetq.embedded.data-directory = #日志文件目录 如果持久性被关闭,则不需要
spring.hornetq.embedded.enabled = true #如果HornetQ服务器API可用,启用嵌入式模式
spring.hornetq.embedded.persistent = false #启用持久存储
spring.hornetq.embedded.queues = #启动时要创建的队列的逗号分隔列表
spring.hornetq.embedded.server-id = #服务器ID 默认情况下,使用自动递增的计数器
spring.hornetq.embedded.topics = #在启动时创建的主题的逗号分隔列表
spring.hornetq.host = localhost #HornetQ代理主机
spring.hornetq.mode = #HornetQ部署模式,默认情况下自动检测 可以显式设置为“native”或“embedded”
spring.hornetq.port = 5445 #HornetQ代理端口
 
 
# JMS (Jms 配置)
# 连接工厂JNDI名称 设置时,优先于其他连接工厂自动配置
spring.jms.jndi-name= 
# 容器的确认模式 默认情况下,监听器被自动确认处理
spring.jms.listener.acknowledge-mode= 
# 启动时自动启动容器
spring.jms.listener.auto-startup= true
# 最小并发消费者数
spring.jms.listener.concurrency= 
# 最大并发消费者数
spring.jms.listener.max-concurrency= 
# 指定默认的目的地类型是否为主题
spring.jms.pub-sub-domain= false
 
 
# RABBIT (Rabbit 配置)
# 客户端应连接到的逗号分隔的地址列表
spring.rabbitmq.addresses = 
spring.rabbitmq.dynamic =  true # 创建一个AmqpAdmin bean
spring.rabbitmq.host =  localhost# RabbitMQ主机
spring.rabbitmq.listener.acknowledge-mode = # 容器的确认模式
spring.rabbitmq.listener.auto-startup =  true# 启动时自动启动容器
spring.rabbitmq.listener.concurrency = # 最少消费者数
spring.rabbitmq.listener.max-concurrency = # 最大消费者数
spring.rabbitmq.listener.prefetch = # 在单个请求中要处理的消息数它应该大于或等于事务大小(如果使用)
spring.rabbitmq.listener.transaction-size = # 在事务中要处理的消息数为了获得最佳结果,它应该小于或等于预取计数
spring.rabbitmq.password = # 登录以对代理进行身份验证
spring.rabbitmq.port =  5672# RabbitMQ端口
spring.rabbitmq.requested-heartbeat = # 请求的心跳超时,以秒为单位;零为无
spring.rabbitmq.ssl.enabled =  false# 启用SSL支持
spring.rabbitmq.ssl.key-store =  # 保存SSL证书的密钥存储区的路径
spring.rabbitmq.ssl.key-store-password = # 用于访问密钥库的密码
spring.rabbitmq.ssl.trust-store = # 保存SSL证书的Trust存储
spring.rabbitmq.ssl.trust-store-password = # 用于访问信任存储的密码
spring.rabbitmq.username = # 登录用户对代理进行身份验证
spring.rabbitmq.virtual-host = # 连接到代理时使用的虚拟主机
 
 
# 端点配置(EndpointCorsProperties)
# 设置是否支持凭据 未设置时,不支持凭据
endpoints.cors.allow-credentials= 
# 在请求中允许的头文件逗号分隔列表 '*'允许所有标题
endpoints.cors.allowed-headers= 
# 逗号分隔的允许的方法列表 '*'允许所有方法
endpoints.cors.allowed-methods= GET
# 逗号分隔的起始列表允许 '*'允许所有来源 未设置时,禁用CORS支持
endpoints.cors.allowed-origins= 
# 包含在响应中的标题的逗号分隔列表
endpoints.cors.exposed-headers= 
# 客户端可以缓存飞行前请求的响应时间(秒)
endpoints.cors.max-age= 1800
 
 
# JMX ENDPOINT (EndpointMBeanExportProperties) (端点MBean导出属性)
# JMX域名 如果设置为'spring.jmx.default-domain'的值初始化
endpoints.jmx.domain= 
# 启用所有端点的JMX导出
endpoints.jmx.enabled= true
# 附加静态属性以附加到表示端点的MBean的所有对象名称
endpoints.jmx.static-names= 
# 确保在发生冲突时修改ObjectNames
endpoints.jmx.unique-names= false
 
 
# JOLOKIA  JOLOKIA 配置
# 见Jolokia手册
jolokia.config.*= 
 
 
# 管理HTTP服务器(管理服务器属性)
# 在每个响应中添加“X-Application-Context”HTTP头
management.add-application-context-header= true
# 管理端点应绑定到的网络地址
management.address= 
# 管理端点上下文路径 例如`/ actuator`
management.context-path= 
# 管理端点HTTP端口 默认使用与应用程序相同的端口
management.port= 
# 启用安全性
management.security.enabled= true
# 访问管理端点所需的角色
management.security.role= ADMIN
# 会话创建策略使用(always,never,if_required,stateless)(总是,永远,if_required,无状态)
management.security.sessions= stateless
 
 
# HEALTH INDICATORS (previously health.*)
# 启用数据库运行状况检查
management.health.db.enabled= true
# 启用默认的健康指标
management.health.defaults.enabled= true
# 启用磁盘空间运行状况检查
management.health.diskspace.enabled= true
# 用于计算可用磁盘空间的路径
management.health.diskspace.path= 
# 应该可用的最小磁盘空间(以字节为单位)
management.health.diskspace.threshold= 0
# 启用弹性搜索健康检查
management.health.elasticsearch.enabled= true
# 逗号分隔的索引名称
management.health.elasticsearch.indices= 
# 等待群集响应的时间(以毫秒为单位)
management.health.elasticsearch.response-timeout= 100
# 启用JMS健康检查
management.health.jms.enabled= true
# 启用邮件运行状况检查
management.health.mail.enabled= true
# 启用MongoDB健康检查
management.health.mongo.enabled= true
# 启用RabbitMQ运行状况检查
management.health.rabbit.enabled= true
# 启用Redis健康检查
management.health.redis.enabled= true
# 启用Solr运行状况检查
management.health.solr.enabled= true
# 按照严重性的顺序,以逗号分隔的健康状态列表
management.health.status.order= DOWN, OUT_OF_SERVICE, UNKNOWN, UP
 
 
# TRACING ((TraceProperties) 跟踪性能
# 跟踪中包含的项目
management.trace.include= request-headers,response-headers,errors
 
 
# 远程 shell配置
# 验证类型 根据环境自动检测
shell.auth= simple
# JAAS域
shell.auth.jaas.domain= my-domain
# 验证密钥的路径 这应该指向一个有效的“.pem”文件
shell.auth.key.path= 
# 登录用户
shell.auth.simple.user.name= user
# 登录用户的密码
shell.auth.simple.user.password= 
# 登录到CRaSH控制台的所需的角色,以逗号分隔列表
shell.auth.spring.roles= ADMIN
# 用于查找命令的模式
shell.command-path-patterns= classpath*:/commands/**,classpath*:/crash/commands/**
# 扫描更改并在必要时更新命令(以秒为单位)
shell.command-refresh-interval= -1
# 用于查找配置的模式
shell.config-path-patterns= classpath*:/crash/*
# 逗号分隔的要禁用的命令列表
shell.disabled-commands= jpa*,jdbc*,jndi*
# 禁用逗号分隔的插件列表 默认情况下,根据环境禁用某些插件
shell.disabled-plugins= 
# 用户被提示再次登录后的毫秒数
shell.ssh.auth-timeout = 
# 启用CRaSH SSH支持
shell.ssh.enabled= true
# 未使用的连接关闭之后的毫秒数
shell.ssh.idle-timeout = 
# SSH服务器密钥路径
shell.ssh.key-path= 
# SSH端口
shell.ssh.port= 2000
# 启用CRaSH telnet支持 如果TelnetPlugin可用,默认情况下启用
shell.telnet.enabled= false
# Telnet端口
shell.telnet.port= 5000
 
 
# GIT 信息配置
# 生成的git信息属性文件的资源引用
spring.git.properties= 
 
 
# 标准出口
# 模式,告诉聚合器如何从源存储库中的键
spring.metrics.export.aggregate.key-pattern= 
# 全局存储库的前缀如果处于活动状态
spring.metrics.export.aggregate.prefix= 
# 导出刻度之间以毫秒为单位的延迟 按照这种延迟,指标将按计划导出到外部来源
spring.metrics.export.delay-millis= 5000
# 标志以启用度量标准导出(假设MetricWriter可用)
spring.metrics.export.enabled= true
# 要排除的度量名称列表 应用后包括
spring.metrics.export.excludes= 
# 要包含的度量名称的模式列表
spring.metrics.export.includes= 
# redis存储库导出的密钥(如果活动)
spring.metrics.export.redis.key= keys.spring.metrics
# redis存储库的前缀 如果处于活动状态
spring.metrics.export.redis.prefix= spring.metrics
# 标志基于不导出不变的度量值来关闭任何可用的优化
spring.metrics.export.send-latest= 
# 主机的statsd服务器接收导出的指标
spring.metrics.export.statsd.host= 
# 接收导出指标的statsd服务器端口
spring.metrics.export.statsd.port= 8125
# statsd导出指标的前缀
spring.metrics.export.statsd.prefix= 
# 每个MetricWriter bean名称具有特定的触发器属性
spring.metrics.export.triggers.*= 
 
 
# ----------------------------------------
# DEVTOOLS属性
# ----------------------------------------
 
# DEVTOOLS(开发工具属性)
# 启用一个livereload.com兼容的服务器
spring.devtools.livereload.enabled= true
#  # Server port.
spring.devtools.livereload.port= 35729
# 应该排除的触发完全重新启动的其他模式
spring.devtools.restart.additional-exclude= 
# 观看更改的附加路径
spring.devtools.restart.additional-paths= 
# 启用自动重启功能
spring.devtools.restart.enabled= true
# 应该排除的模式触发完全重新启动
spring.devtools.restart.exclude= META-INF/maven/**,META-INF/resources/**,resources/**,static/**,public/**,templates/**,**/*Test.class,**/*Tests.class,git.properties
# 轮询类路径更改之间等待的时间量(以毫秒为单位)
spring.devtools.restart.poll-interval= 1000
# 触发重新启动之前没有任何类路径更改所需的安静时间量(以毫秒为单位)
spring.devtools.restart.quiet-period= 400
# 更改后的特定文件的名称将触发重新启动检查 如果未指定任何类路径文件更改将触发重新启动
spring.devtools.restart.trigger-file= 
 
 
# 远程开发工具属性
# 用于处理远程连接的上下文路径
spring.devtools.remote.context-path= /.~~spring-boot!~
# 启用远程调试支持
spring.devtools.remote.debug.enabled= true
# 本地远程调试服务器端口
spring.devtools.remote.debug.local-port= 8000
# 用于连接到远程应用程序的代理主机
spring.devtools.remote.proxy.host= 
# 用于连接到远程应用程序的代理端口
spring.devtools.remote.proxy.port= 
# 启用远程重启
spring.devtools.remote.restart.enabled= true
# 建立连接所需的共享密钥(需要启用远程支持)
spring.devtools.remote.secret= 
# HTTP头用于传输共享密钥</ span>
spring.devtools.remote.secret-header-name= X-AUTH-TOKEN

2. 自动配置原理

  1. SpringBoot启动的时候加载主配置类,开启了自动配置功能@EnableAutoConfiguration
@EnableAutoConfiguration
public @interface SpringBootApplication {}
  1. @EnableAutoConfiguration的作用:
  • 利用AutoConfigurationImportSelector给容器导入一些组件
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {}
  • 可以查看selectImports()方法查看导入了哪些组件
public class AutoConfigurationImportSelector implements 

    public String[] selectImports(AnnotationMetadata annotationMetadata) {
        if (!this.isEnabled(annotationMetadata)) {
            return NO_IMPORTS;
        } else {
            AutoConfigurationImportSelector.AutoConfigurationEntry autoConfigurationEntry = this.getAutoConfigurationEntry(annotationMetadata);
            return StringUtils.toStringArray(autoConfigurationEntry.getConfigurations());
        }
    }
    
    protected AutoConfigurationImportSelector.AutoConfigurationEntry getAutoConfigurationEntry(AnnotationMetadata annotationMetadata) {
        if (!this.isEnabled(annotationMetadata)) {
            return EMPTY_ENTRY;
        } else {
            AnnotationAttributes attributes = this.getAttributes(annotationMetadata);
            List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);
            configurations = this.removeDuplicates(configurations);
            Set<String> exclusions = this.getExclusions(annotationMetadata, attributes);
            this.checkExcludedClasses(configurations, exclusions);
            configurations.removeAll(exclusions);
            configurations = this.getConfigurationClassFilter().filter(configurations);
            this.fireAutoConfigurationImportEvents(configurations, exclusions);
            return new AutoConfigurationImportSelector.AutoConfigurationEntry(configurations, exclusions);
        }
    }
  • 获取候选的配置List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);

    1.SpringFactoriesLoader.loadFactoryNames()
    扫描所有jar包累路径下的META-INF/spring.factories
    把扫描到的这些文件的内容包装成properties对象
    从properties中获取到EnableAutoConfiguration.class类(类名)对应的值,然后把他们添加在容器中

将类路径下META-INF/spring.factories里面配置的所有EnableAutoConfiguration的值加入到了容器

List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);

protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
        List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
        Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.");
        return configurations;
}

protected Class<?> getSpringFactoriesLoaderFactoryClass() {
		//返回class对象
        return EnableAutoConfiguration.class;
}

public static List<String> loadFactoryNames(Class<?> factoryType, @Nullable ClassLoader classLoader) {
        ClassLoader classLoaderToUse = classLoader;
        if (classLoader == null) {
            classLoaderToUse = SpringFactoriesLoader.class.getClassLoader();
        }
		//获取EnableAutoConfiguration.class对应的类名
        String factoryTypeName = factoryType.getName();
        return (List)loadSpringFactories(classLoaderToUse).getOrDefault(factoryTypeName, Collections.emptyList());
}

private static Map<String, List<String>> loadSpringFactories(ClassLoader classLoader) {
        Map<String, List<String>> result = (Map)cache.get(classLoader);
        if (result != null) {
            return result;
        } else {
            HashMap result = new HashMap();

            try {
                Enumeration urls = classLoader.getResources("META-INF/spring.factories");

                while(urls.hasMoreElements()) {
                    URL url = (URL)urls.nextElement();
                    UrlResource resource = new UrlResource(url);
                    Properties properties = PropertiesLoaderUtils.loadProperties(resource);
                    Iterator var6 = properties.entrySet().iterator();

                    while(var6.hasNext()) {
                        Entry<?, ?> entry = (Entry)var6.next();
                        String factoryTypeName = ((String)entry.getKey()).trim();
                        String[] factoryImplementationNames = StringUtils.commaDelimitedListToStringArray((String)entry.getValue());
                        String[] var10 = factoryImplementationNames;
                        int var11 = factoryImplementationNames.length;

                        for(int var12 = 0; var12 < var11; ++var12) {
                            String factoryImplementationName = var10[var12];
                            ((List)result.computeIfAbsent(factoryTypeName, (key) -> {
                                return new ArrayList();
                            })).add(factoryImplementationName.trim());
                        }
                    }
                }

                result.replaceAll((factoryType, implementations) -> {
                    return (List)implementations.stream().distinct().collect(Collectors.collectingAndThen(Collectors.toList(), Collections::unmodifiableList));
                });
                cache.put(classLoader, result);
                return result;
            } catch (IOException var14) {
                throw new IllegalArgumentException("Unable to load factories from location [META-INF/spring.factories]", var14);
            }
        }
    }

加载的组件有

# Auto Configure
org.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.batch.BatchAutoConfiguration,\
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\
org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\
org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,\
org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration,\
org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration,\
org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration,\
org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration,\
org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.cassandra.CassandraReactiveDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.cassandra.CassandraReactiveRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.cassandra.CassandraRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.couchbase.CouchbaseDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.couchbase.CouchbaseReactiveDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.couchbase.CouchbaseReactiveRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.couchbase.CouchbaseRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.elasticsearch.ReactiveElasticsearchRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.elasticsearch.ReactiveElasticsearchRestClientAutoConfiguration,\
org.springframework.boot.autoconfigure.data.jdbc.JdbcRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.ldap.LdapRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.mongo.MongoReactiveDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.mongo.MongoReactiveRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.neo4j.Neo4jDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.neo4j.Neo4jReactiveDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.neo4j.Neo4jReactiveRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.neo4j.Neo4jRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.r2dbc.R2dbcDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.r2dbc.R2dbcRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration,\
org.springframework.boot.autoconfigure.data.redis.RedisReactiveAutoConfiguration,\
org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration,\
org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration,\
org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration,\
org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration,\
org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration,\
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.http.HttpMessageConvertersAutoConfiguration,\
org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration,\
org.springframework.boot.autoconfigure.influx.InfluxDbAutoConfiguration,\
org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration,\
org.springframework.boot.autoconfigure.integration.IntegrationAutoConfiguration,\
org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,\
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.jersey.JerseyAutoConfiguration,\
org.springframework.boot.autoconfigure.jooq.JooqAutoConfiguration,\
org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration,\
org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration,\
org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration,\
org.springframework.boot.autoconfigure.ldap.embedded.EmbeddedLdapAutoConfiguration,\
org.springframework.boot.autoconfigure.ldap.LdapAutoConfiguration,\
org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration,\
org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration,\
org.springframework.boot.autoconfigure.mail.MailSenderValidatorAutoConfiguration,\
org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration,\
org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,\
org.springframework.boot.autoconfigure.mongo.MongoReactiveAutoConfiguration,\
org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration,\
org.springframework.boot.autoconfigure.neo4j.Neo4jAutoConfiguration,\
org.springframework.boot.autoconfigure.netty.NettyAutoConfiguration,\
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,\
org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration,\
org.springframework.boot.autoconfigure.r2dbc.R2dbcAutoConfiguration,\
org.springframework.boot.autoconfigure.r2dbc.R2dbcTransactionManagerAutoConfiguration,\
org.springframework.boot.autoconfigure.rsocket.RSocketMessagingAutoConfiguration,\
org.springframework.boot.autoconfigure.rsocket.RSocketRequesterAutoConfiguration,\
org.springframework.boot.autoconfigure.rsocket.RSocketServerAutoConfiguration,\
org.springframework.boot.autoconfigure.rsocket.RSocketStrategiesAutoConfiguration,\
org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration,\
org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration,\
org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration,\
org.springframework.boot.autoconfigure.security.reactive.ReactiveSecurityAutoConfiguration,\
org.springframework.boot.autoconfigure.security.reactive.ReactiveUserDetailsServiceAutoConfiguration,\
org.springframework.boot.autoconfigure.security.rsocket.RSocketSecurityAutoConfiguration,\
org.springframework.boot.autoconfigure.security.saml2.Saml2RelyingPartyAutoConfiguration,\
org.springframework.boot.autoconfigure.sendgrid.SendGridAutoConfiguration,\
org.springframework.boot.autoconfigure.session.SessionAutoConfiguration,\
org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration,\
org.springframework.boot.autoconfigure.security.oauth2.client.reactive.ReactiveOAuth2ClientAutoConfiguration,\
org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration,\
org.springframework.boot.autoconfigure.security.oauth2.resource.reactive.ReactiveOAuth2ResourceServerAutoConfiguration,\
org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration,\
org.springframework.boot.autoconfigure.sql.init.SqlInitializationAutoConfiguration,\
org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration,\
org.springframework.boot.autoconfigure.task.TaskSchedulingAutoConfiguration,\
org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration,\
org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration,\
org.springframework.boot.autoconfigure.transaction.jta.JtaAutoConfiguration,\
org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration,\
org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration,\
org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration,\
org.springframework.boot.autoconfigure.web.reactive.HttpHandlerAutoConfiguration,\
org.springframework.boot.autoconfigure.web.reactive.ReactiveWebServerFactoryAutoConfiguration,\
org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration,\
org.springframework.boot.autoconfigure.web.reactive.error.ErrorWebFluxAutoConfiguration,\
org.springframework.boot.autoconfigure.web.reactive.function.client.ClientHttpConnectorAutoConfiguration,\
org.springframework.boot.autoconfigure.web.reactive.function.client.WebClientAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.websocket.reactive.WebSocketReactiveAutoConfiguration,\
org.springframework.boot.autoconfigure.websocket.servlet.WebSocketServletAutoConfiguration,\
org.springframework.boot.autoconfigure.websocket.servlet.WebSocketMessagingAutoConfiguration,\
org.springframework.boot.autoconfigure.webservices.WebServicesAutoConfiguration,\
org.springframework.boot.autoconfigure.webservices.client.WebServiceTemplateAutoConfiguration

每一个这样的xxxAutoConfiguration类都是容器中的一个组件,都加入到容器中;用它们来做自动配置

  1. 每一个自动配置类进行自动配置功能

  2. HttpEncodingAutoConfiguration(Http编码自动配置)为例解释自动配置原理;配置项为server.servlet.encoding;根据当前不同条件,决定这个配置类是否生效?

    一但这个配置类生效;这个配置类就会给容器中添加各种组件(@Bean)这些组件的属性是从对应的properties类中获取的,这些类里面的每一个属性又是和配置文件绑定的。

@Configuration		//表示这是一个配置类,以前编写的配置文件一样,也可以给容器中添加组件
@EnableConfigurationProperties({ServerProperties.class})	//启动指定类的ConfigurationProperties功能;将配置文件中对应的值和ServerProperties绑定起来;并把ServerProperties加入到ioc容器中
@ConditionalOnWebApplication	//Spring底层原理@Conditional注解(Spring注解版),根据不同的条件,如果满足指定条件,整个配置类里面的配置就会生效;	判断当前应用是否是web应用,如果是,当前配置类生肖
@ConditionalOnClass({CharacterEncodingFilter.class})	//判断当前项目有没有这个类CharacterEncodingFilter;Spring MVC中进行乱码解决的过滤器
@ConditionalOnProperty(
	//索引路径
    prefix = "server.servlet.encoding",
    value = {"enabled"},
    matchIfMissing = true
) //判断配置文件中是否存在某个配置spring.http.encoding.enabled;如果不存在,判断也是成立的(matchIfMissing
//及时我们配置文件中不配置spring.http.encoding.enabled=true,也是默认生效的
public class HttpEncodingAutoConfiguration {
	//它已经和spring boot的配置文件映射了
	private final Encoding properties;

	//只有一个有参构造器的情况下,参数的值就会从容器中拿
    public HttpEncodingAutoConfiguration(ServerProperties properties) {
        this.properties = properties.getServlet().getEncoding();
    }

	@Bean	//给容器添加一个组件,这个组件的某些值,需要从properties中获取
    @ConditionalOnMissingBean
    public CharacterEncodingFilter characterEncodingFilter() {
        CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();
        filter.setEncoding(this.properties.getCharset().name());
        filter.setForceRequestEncoding(this.properties.shouldForce(org.springframework.boot.web.servlet.server.Encoding.Type.REQUEST));
        filter.setForceResponseEncoding(this.properties.shouldForce(org.springframework.boot.web.servlet.server.Encoding.Type.RESPONSE));
        return filter;
    }
}
  1. 所有在配置文件中能配置的属性都是在xxxProperties类中封装着;配置文件能配置什么就可以参照某个功能对应的这个属性类;下面的例子配置项为server.servlet.encoding
@ConfigurationProperties(prefix = "server")   //从配置文件中获取指定的值和bean的属性进行绑定
public class ServerProperties {
	private final ServerProperties.Servlet servlet;
	
	public static class Servlet {
		@NestedConfigurationProperty
        private final Encoding encoding = new Encoding();
	}
}

public class Encoding {
    public static final Charset DEFAULT_CHARSET;
   
    public Encoding() {
        this.charset = DEFAULT_CHARSET;
    }
}

public abstract class Charset 
	implements Comparable<Charset>{
    
	 public static Charset defaultCharset() {
        if (defaultCharset == null) {
            synchronized (Charset.class) {
                String csn = AccessController.doPrivileged(
                    new GetPropertyAction("file.encoding"));
                Charset cs = lookup(csn);
                if (cs != null)
                    defaultCharset = cs;
                else
                	//默认值为UTF-8
                    defaultCharset = forName("UTF-8");
            }
        }
        return defaultCharset;
    }
}
  1. 我们能配置的属性都来源于这个功能的properties类
# HttpEncodingAutoConfiguration
# HttpEncodingAutoConfiguration
server.servlet.encoding.enabled=true
server.servlet.encoding.charset=UTF-8
server.servlet.encoding.force=true
public class Encoding {
    public static final Charset DEFAULT_CHARSET;
    private Charset charset;
    private Boolean force;
}

3. 精髓

  1. SpringBoot启动会加载大量的自动配置类
  2. 我们看我们需要的功能有没有SpringBoot默认写好的自动配置类
  3. 我们在看这个自动配置类中的到底配置了哪些组件;(只要我们要用的组件有,我们就不需要再来配置了)
  4. 给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们就可以在配置文件中指定这些属性的值

xxxxAutoConfiguration:自动配置类
给容器添加组件@Bean
xxxxProperties:封装配置文件中的相关属性

4. 细节

4.1 @Conditional派生注解(Spring注解版原生的@Conditional作用)

作用:必须是@Conditional指定的条件成立,才给容器中添加组件,配置项的内容才会生效

@Conditional扩展注解作用(判断是否满足当前指定条件)
@ConditionalOnJava系统的Java版本是否符合要求
@ConditionalOnBean容器中存在指定Bean
@ConditionalOnMissingBean容器中不存在指定Bean
@ConditionalOnExpression满足SpEL表达式指定
@ConditionalOnClass系统中有指定的类
@ConditionalOnMissingClass系统中没有指定的类
@ConditionalOnSingleCandidate容器中只有一个指定的Bean,或者这个Bean是首选Bean
@ConditionalOnProperty系统中指定的属性是否有指定的值
@ConditionalOnResource类路径下是否存在指定资源文件
@ConditionalOnWebApplication当前是Web环境
@ConditionalOnNotWebApplication当前不是Web环境
@ConditionalOnJndiJNDI存在指定项

自动配置类必须在一定条件下才能生。

4.2 查看生效的自动配置类

我们可以启用debug=true属性,来让控制台打印自动配置报告,这样我们就可以很方便的知道哪些自动配置类生效

在application.properties或application.yaml配置

debug=true

控制台打印日志,显示哪些自动配置类生效

============================
CONDITIONS EVALUATION REPORT
============================


Positive matches(自动配置类启用):
-----------------

   AopAutoConfiguration matched:
      - @ConditionalOnProperty (spring.aop.auto=true) matched (OnPropertyCondition)

   AopAutoConfiguration.ClassProxyingConfiguration matched:
      - @ConditionalOnMissingClass did not find unwanted class 'org.aspectj.weaver.Advice' (OnClassCondition)
      - @ConditionalOnProperty (spring.aop.proxy-target-class=true) matched (OnPropertyCondition)

   DispatcherServletAutoConfiguration matched:
      - @ConditionalOnClass found required class 'org.springframework.web.servlet.DispatcherServlet' (OnClassCondition)
      - found 'session' scope (OnWebApplicationCondition)
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-09-12 20:37:43  更:2021-09-12 20:37:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 17:01:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码