搜索
房产
装修
汽车
婚嫁
健康
理财
旅游
美食
跳蚤
二手房
租房
招聘
二手车
教育
茶座
我要买房
买东西
装修家居
交友
职场
生活
网购
亲子
情感
龙城车友
找美食
谈婚论嫁
美女
兴趣
八卦
宠物
手机

SpringBoot学习笔记一

[复制链接]
查看: 64|回复: 0

1万

主题

1万

帖子

4万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
45263
发表于 2020-1-24 06:08 | 显示全部楼层 |阅读模式
目录
            
    一、入门

1、Spring Boot简介

简化Spring利用斥地的一个框架
全部Spring技术栈的整合
J2EE斥地的一站式打点计划
2、微办事

Martin Fowler
微办事是一种架构气概
一个利用应当是一组小型办事:可以经过HTTP的方式举行互通
每一个功用元素终极都是一个可自力更换和自力升级的软件单元
具体参照微办事文档
3、情况预备


  • jdk1.8
  • maven3.x
  • IntellijIDEA2019
  • SpringBoot 2.2.2.RELEASE
Maven设备
给maven的setting.xml设备文件的profiles标签增加jdk相关profile
4、SpringBoot HelloWorld

一个功用:欣赏器发送hello请求,办事器继续请求并处置惩罚,响应Hello World字符串;
1、建立一个,maven工程;
2、导入依靠spring boot相关依靠
3、编写一个主步伐:启动Spring Boot利用
4、编写相关的Controller、Service
5、运转主步伐测试
6、简化安排
加入插件spring.boot.maven.plugin,将利用打成jar包,间接利用java -jar的命令举行实行;
5、Hello World探讨


  • POM文件
父项目
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
6、利用Spring Initializer快速建立SpringBoot项目

利用IDE的Spring项目建立享导快速建立SpringBoot项目,挑选所需模块,带领联网建立Spring Boot项目。

  • resources文件夹中目录结构

    • static:保存全数静态资本:js css images;
    • templates:保存全数的模板页面:(Spring Boot默许jar包利用嵌入式的Tomcat,默许不支持JSP页面);可以利用模板引擎
    • application.properties:SpringBoot利用的设备文件;

二、设备文件

1、设备文件

SpringBoot利用全局设备文件,设备文件名牢固

  • application.properties
  • application.yml
可以点窜SpringBoot自动设备的默许值
yml以数据为中心
  1.     server:        port:8001
复制代码
xml
  1.             8001   
复制代码
2、YAML语法


  • 底子语法
    k:(空格)v :表示一个键值对
    以空格的缩进来控制层级关系,只如果左对齐的一列数据,都是同一层级
    属性和值巨细写敏感
  • 值的写法
    字面量:平常的值 (数字,字符串,布尔)
    键值对间接写
    字符串默许不加引号,单引号不会转义,双引号会转义
    工具、Map:
    1. person:  lastName: zhangsan  age: 20person:{lastName: zhangsan,age: 18}
    复制代码
    数组:
    - 值表示数组的一个元素
    1. pets: - cat - dog - pigpets: [cat,dog,pig]
    复制代码
3、设备文件的注入

在yml设备文件及第行设备,在javaBean及第行绑定(将设备的值映照到Bean)
@ConfigurationProperties:告诉SpingBoot将本类中的全部属性和设备文件中相关的设备举行绑定
prefix=”person“,设备文件的person项的全部属性举行映照
@Component 设备映照只对容器的组件有用
  1. @Component@ConfigurationProperties(prefix="person")
复制代码

  • properties设备文件在IDEA中默许utf-8编码大要会出现乱码,必要设备为在编译时转为ascii码
  • @Value和@ConfigurationProperties获得值有区分
  • 设备文件注入值数据校验@Validated
  • @PropertySource&&@ImportResource,前者加载自界说的设备文件,后者将自界说的Spring相关设备生效
  1. @PropertySource(value={"classpath:person.properties"})
复制代码
  1. @ImportResource(location={"calsspath:bean.xml"})
复制代码
SpringBoot举荐利用全注解的方式给容器增加组件

  • 设备类=Spring设备文件
  • 利用@Bean给容器增加组件
  1. @Configuration //设备类publie class MyAppConfig{    //将方式的返回值增加到容器中,组件默许id为方式名    @Bean    public HelloService helloService(){        //        return new HelloService();     }}
复制代码
4、设备文件占位符


  • 随机数
  1. ${random.long}、${random.int(10)}、${random.value}、${random.int[1024,65536]}
复制代码

  • 占位符获得之前设备的值,假如没有可以利用指定默许值
5、Profile


  • 多Profile文件
    主设备文件名可所以application.(profile).properties/yml
    Spring默许利用application.properties的设备

  • yml支持多文档块方式
    1. server:  port:8001spring:  profiles:      active:dev---server:  port:8002spring:  profiles:dev---server:  port:8003spring:  profiles:prod #指定设备情况
    复制代码
  • 激活指定profile
    在设备文件中指定spring.profile.active=(profile)
    命令行:
    java -jar spring-boot-SNAPSHOT.jar --spring.profiles.active=dev;
    运转时传入参数
    捏造机参数
    -Dspring.profiles.active=dev

6、设备文件加载位置

SpringBoot启动会扫描以下位置的application.properties/yml文件作为默许设备文件
file:/config/
file:/
classpath:/config/
classpath:/
优先级由高到低,设备互补,类似设备项高优先级会覆盖低优先级
也可经过安排运转时在命令中传参数改变默许设备spring.config.location
7、内部设备加载次第

优先级由高到低,设备互补,类似设备项高优先级会覆盖低优先级

  • 命令行参数
    -- 设备项=值
  • 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
8、自动设备道理


  • SpringBoot启动时加载主设备类,开启自动设备功用@EnableAutoConfiguration
  • @EnableAutoConfiguration感化
    利用EnableAutoConfigurationImportSelector给容器中导入一些组件 :可以检察select Imports()方式的内容
    List configurations=getCandidateConfigurations(annotationMetadata,attributes);获得候选设备

  1. SpringFactoriesLoader.loadFactoryNames();扫描全数jar包类途径下META-INF/spring.factories把扫描到的这些文件的内容包装成properties工具从properties中获得到EnableAutoConfiguration.class类名对应的值,然后把他们增加到容器中
复制代码
将类途径下META-INF/spring.factories里面设备的全数EnableAutoConfiguration的值加入到了容器中;

  • 每一个自动设备类举行自动设备功用
  • 全数 在设备类中能设备的属性都是在xxxProperties类中封装着;
精华

  • SpringBoot启动会加载大量的自动设备类
  • 我们必要看项目所需功用有没有SpringBoot默许写好的自动设备类
  • 再看自动设备类中到底设备了那些组件
  • 给容器自动设备类增加组件时会从properties类中获得某些属性,我们可以在设备文件中指定这些属性的的值
细节

  • @Conditional派生注解:注解指定的条件建立,才给容器增加组件,设备里的内容才生效
    @Conditional派生注解感化@ConditionalOnJavajava版本能否合适要求@ConditionalOnBean存在指定Bean@ConditionalOnMissingBean不存在指定Bean@ConditionalOnExpression满足SpEL表达式指定@ConditionalOnClass有指定类@ConditionalOnMissingClass没有指定类@ConditionalOnSingleCandidate只要一个指定Bean@ConditionalOnProperty指定属性能否有指定值@ConditionalOnResource类途径下能否存在资本文件@ConditionalOnWebApplication当前是Web情况@ConditionalOnNotWebApplication当前不是Web情况自动设备类必须在必定条件下才华生效
    经过在设备文件中启用debug=true属性,让控制台自动打印设备报告,可以很方便晓得哪些自动设备类生效

免责声明:假如加害了您的权益,请联系站长,我们会实时删除侵权内容,感谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2006-2014 全椒百姓网-全椒知名**,发布及时新鲜的全椒新闻资讯 生活信息 版权所有 法律顾问:高律师 客服电话:0791-88289918
技术支持:迪恩网络科技公司  Powered by Discuz! X3.2
快速回复 返回顶部 返回列表