目录css
简化Spring应用开发的一个框架java
整个Spring技术栈的整合web
J2EE开发的一站式解决方案spring
Martin Fowler数组
微服务是一种架构风格浏览器
一个应用应该是一组小型服务:能够经过HTTP的方式进行互通springboot
每个功能元素最终都是一个可独立替换和独立升级的软件单元服务器
详细参照微服务文档架构
Maven设置app
给maven的setting.xml配置文件的profiles标签添加jdk相关profile
一个功能:浏览器发送hello请求,服务器接受请求并处理,响应Hello World字符串;
一、建立一个,maven工程;
二、导入依赖spring boot相关依赖
三、编写一个主程序:启动Spring Boot应用
四、编写相关的Controller、Service
五、运行主程序测试
六、简化部署
加入插件spring.boot.maven.plugin,将应用打成jar包,直接使用java -jar的命令进行执行;
父项目
spring.boot.starter.parent
其父项目
spring.boot.dependencies 管理SpringBoot中的全部依赖
spring-boot-starter-web
spring-boot-starter:spring-boot场景启动器:导入web模块正常运行所依赖的组件
须要什么功能就导入相应的场景启动器
@SpringBootApplication
标注在某个类上,表示是一个SpringBoot的主配置类,SpringBoot运行这个类的main方法来启动SpringBoot应用;
@SpringBootConfiguration :SpringBoot的配置类
标注在某个类上,表示是一个SpringBoot的主配置类
@Configuration:配置类上标注这个注解
配置类=配置文件,配置类也是容器中的一个组件@Component
@EnableAutoConfiguration :开启自动配置功能
@AutoConfigurationPackage:自动配置包
@Import(AutoConfigurationPackages.Registrar.class):将著配置类所在包及下面全部子包里面的全部组件扫描到Spring容器;
@Import(EnableAutoConfigurationImportSelector.class):将全部须要导入的组件以全类名的方式返回,这些组件就会被添加到容器当中;会给容器导入大量自动配置类(xxxAutoConfiguration),从而自动配置场景所需组件。
SpringBoot在启动时从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值做为自动配置类导入到容器中,自动配置类就生效,从而进行自动配置工做。
J2EE的总体整合解决方案和自动配置都在spring-boot-autoconfigure-1.5.9.RELEASE.jar
使用IDE的Spring项目建立享导快速建立SpringBoot项目,选择所需模块,向导联网建立Spring Boot项目。
SpringBoot使用全局配置文件,配置文件名固定
能够修改SpringBoot自动配置的默认值
yml以数据为中心
server: port:8001
xml
<server> <port>8001</port> </server>
基本语法
k:(空格)v :表示一个键值对
以空格的缩进来控制层级关系,只要是左对齐的一列数据,都是同一层级
属性和值大小写敏感
值的写法
字面量:普通的值 (数字,字符串,布尔)
键值对直接写
字符串默认不加引号,单引号不会转义,双引号会转义
对象、Map:
person: lastName: zhangsan age: 20 person:{lastName: zhangsan,age: 18}
数组:
用- 值表示数组的一个元素
pets: - cat - dog - pig pets: [cat,dog,pig]
在yml配置文件中进行配置,在javaBean中进行绑定(将配置的值映射到Bean)
@ConfigurationProperties:告诉SpingBoot将本类中的全部属性和配置文件中相关的配置进行绑定
prefix=”person“,配置文件的person项的全部属性进行映射
@Component 配置映射只对容器的组件有效
@Component @ConfigurationProperties(prefix="person")
@PropertySource(value={"classpath:person.properties"})
@ImportResource(location={"calsspath:bean.xml"})
SpringBoot推荐使用全注解的方式给容器添加组件
@Configuration //配置类 publie class MyAppConfig{ //将方法的返回值添加到容器中,组件默认id为方法名 @Bean public HelloService helloService(){ // return new HelloService(); } }
${random.long}、${random.int(10)}、${random.value}、${random.int[1024,65536]}
多Profile文件
主配置文件名能够是application.(profile).properties/yml
Spring默认使用application.properties的配置
yml支持多文档块方式
server: port:8001 spring: profiles: active:dev --- server: port:8002 spring: profiles:dev --- server: port:8003 spring: profiles:prod #指定配置环境
激活指定profile
在配置文件中指定spring.profile.active=(profile)
命令行:
java -jar spring-boot-SNAPSHOT.jar --spring.profiles.active=dev;
运行时传入参数
虚拟机参数
-Dspring.profiles.active=dev
SpringBoot启动会扫描如下位置的application.properties/yml文件做为默认配置文件
file:/config/
file:/
classpath:/config/
classpath:/
优先级由高到低,配置互补,相同配置项高优先级会覆盖低优先级
也可经过部署运行时在命令中传参数改变默认配置spring.config.location
优先级由高到低,配置互补,相同配置项高优先级会覆盖低优先级
命令行参数
-- 配置项=值
java系统属性
操做系统环境变量
jar包外带profile的配置文件(application.{profile}.properties或application.yml(有spring.profile))
jar包内带profile的配置文件(application.{profile}.properties或application.yml(有spring.profile))
jar包外的配置文件(application.properties或application.yml(没有spring.profile))
jar包内的配置文件(application.properties或application.yml(没有spring.profile))
外部:打成的jar同一文件夹下
内部:项目文件下
@Configuration注解类上的@PropertySource
SpringBoot启动时加载主配置类,开启自动配置功能@EnableAutoConfiguration
@EnableAutoConfiguration做用
利用EnableAutoConfigurationImportSelector给容器中导入一些组件 :能够查看select Imports()方法的内容
List
configurations=getCandidateConfigurations(annotationMetadata,attributes);获取候选配置
SpringFactoriesLoader.loadFactoryNames(); 扫描全部jar包类路径下META-INF/spring.factories 把扫描到的这些文件的内容包装成properties对象 从properties中获取到EnableAutoConfiguration.class类名对应的值,而后把他们添加到容器中
将类路径下META-INF/spring.factories里面配置的全部EnableAutoConfiguration的值加入到了容器中;
每个自动配置类进行自动配置功能
全部 在配置类中能配置的属性都是在xxxProperties类中封装着;
精髓:
细节
@Conditional派生注解:注解指定的条件成立,才给容器添加组件,配置里的内容才生效
@Conditional派生注解 | 做用 |
---|---|
@ConditionalOnJava | java版本是否符合要求 |
@ConditionalOnBean | 存在指定Bean |
@ConditionalOnMissingBean | 不存在指定Bean |
@ConditionalOnExpression | 知足SpEL表达式指定 |
@ConditionalOnClass | 有指定类 |
@ConditionalOnMissingClass | 没有指定类 |
@ConditionalOnSingleCandidate | 只有一个指定Bean |
@ConditionalOnProperty | 指定属性是否有指定值 |
@ConditionalOnResource | 类路径下是否存在资源文件 |
@ConditionalOnWebApplication | 当前是Web环境 |
@ConditionalOnNotWebApplication | 当前不是Web环境 |
自动配置类必须在必定条件下才能生效
经过在配置文件中启用debug=true属性,让控制台自动打印配置报告,能够很方便知道哪些自动配置类生效