打包运行 使用插件:spring-boot-maven-plugin打成jar包,直接执行jar就可以运行 POM文件 父项目依赖:spring-boot-starter-parent -> spring-boot-dependencies spring boot的版本仲裁:以后我们导入依赖默认是不需要写版本的;没有在dependencies里面管理的依赖自然需要声明版本号 spring-boot-starter-web: sping boot starter: spring boot的场景启动器,帮我们导入web的依赖 spring boot将所有的功能场景都抽离出来,做成一个个的starters(启动器),只需要在项目里面引入依赖 resources文件夹中的目录结构 static:保存所有的静态资源,js,css,img templates:保存所有的模版页面(spring boot默认jar包使用嵌入式的tomcat,默认不支持JSP页面)可以使用模版引擎(freemarker, thymeleaf) application.properties: Spring boot应用的配置文件,可以修改一些默认的配置项 比如配置 'server.port=8081' 来改变端口号 配置文件 配置文件名是固定的 application.properties application.yml YAML文件以数据为中心的标记语言 YAML语法: k:(空格)v 表示一对键值对 以空格的缩进来控制层级 关系,属性的值大小写敏感 值的写法: 字面量:普通的值(数字,字符串,布尔) 字符串默认不需要加引号; 如果加双引号不会转译特殊字符:"\n" -> 换行 如果加单引号会转译特殊字符:'\n' -> '\n' 对象以Map的形式表示 缩进写法: user: name: 'dog' age: 13 行内写法:user: {name: 'dog', age: 13} 数组(List. Set) 缩进写法: list: - 1 - 2 - 3 行内写法:list: [1, 2, 3] @ConfigurationProperties 和 @value("") 的区别 批量注入配置文件中的属性 一个个的指定 支持松散绑定 不支持松散绑定 不支持spEL 支持spEL 支持JSR303数据校验(@Validated) 不支持 支持 不支持复杂类型封装(比如map,list) 如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value 如果说,我们专门编写一个javaBean来配置文件进行映射,我们就使用@ConfigurationProperties @ConfigurationProperties : 默认从全局配置文件中获取值 @PropertySource 和 @ImportResource @PropertySource : 加载指定的配置文件 @ImportResource : 导入Spring 的配置文件,让配置文件里面的内容生效 springBoot推荐给容器添加组件的方式,推荐使用全注解的方式 1. 配置类 ====== spring配置文件 2. 使用@Bean给容器中添加组件 配置文件的占位符 1. 随机数 ${random.value} ${random.uuid} ${random.long} 2. 占位符并可以指定默认值 ${person.name:zhangsan} Profile是Spring对不同环境提供不同配置功能的支持,可以通过激活、指定参数等方式快速切换环境。 多Profile文件 我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml 默认使用application.properties的配置 激活指定profile 在配置文件中指定 spring.profiles.active=dev yml支持多文档块的方式 命令行个参数 虚拟机参数 -Dspring.profiles.active=dev 配置文件的加载位置 Spring boot 启动会扫描以下位置的application.properties或者application.yml文件作为spring boot的默认配置文件 file: ./config/ file: ./ classpath: /config/ classpath: / 以上是按照优先级从高优先级到低优先级, 每个配置文件中的属性有互补配置 我们可以通过spring.config.location来改变默认的配置文件位置 项目打包好以后 我们可以使用命令行参数的形式,启动项目的时候指定配置文件的新位置 外部配置加载顺序 命令行参数 jar包外包的application-{profile}.propertes的配置文件 自动配置原理: 1. spring boot启动的时候加载主配置类,开启类自动配置功能@EnableAutoConfiguration 2. @EnableAutoConfiguration的作用 EnableAutoConfigurationImportSelector 利用这个选择器给容器导入一些组件 可以查看selectImports方法的内容 List<String> configurations = getCandidateConfigrations(annotationMetadata, attributes)获取候选的配置 SpringFactoriesLoader.loadFactoryNames) 扫描jar包类路径下 META_INF/Spring.factories 把扫描到的这些文件的内容封装成properties对象 从properties中获取到EnableAutoConfiguration.class类对应的值,然后把他们添加到容器中 将类路径下 META/INF/spring.factories里面配置的所有的EnableAutoConfiguration值加入到了容器中 每一个这样的xxxAutoConfiguration类都是容器中的一个组件,都加入到容器中,用他们来做自动配置 每一个自动配置类进行自动配置功能 以 HttpEncodingAutoConfiguration为例解释自动配置原理: @Configuration // 表示这是一个配置类,以前编写的配置文件一样,也可以给容器添加组件 @EnableConfigurationProperties(HttpEncodingProperties.class) @ConditionalOnWebApplication @ConditionalOnClass(CharacterEncodingFilter.class) @ConditionalOnProperty(prefix = "spring.http.encoding", value = "enabled", matchIfMissing = true) public class HttpEncodingAutoConfiguration { 根据当前不同的条件判断,决定配置是否生效,如果生效就@Bean 给容器中添加一个组件 一旦配置生效,这个配置类就给容器中添加各种组件 3. 精髓 1)spring boot启动会加载大量的自动配置类 2)我们看我们需要的功能有没有spring boot默认写好的自动配置类 3)我们在来看这个自动配置类中到底配置了哪些组件,只要我们要用的组件有 我们就不需要在配置了 4)给容器中自动配置类添加组件的时候,会从properties类中获取某些属性,我们就可以在配置文件中指定这些属性的值 4. @Conditional派生注解 作用: 必须是@Conditional指定的添加成立,才给容器中添加组件,配置文件中的属性才生效 @ConditionalOnBean // 判断容器中是否存在组件 @ConditionalJava // 系统的java版本是否符合要求 @ConditionalOnProperty @ConditionalOnResource @ConditionalOnWebAppliaction 5. 我们怎么知道哪些配置类生效了 在配置文件中配置debug=true
Spring Boot笔记 -- 配置
最新推荐文章于 2024-08-20 11:16:47 发布