Spring Boot学习笔记 一

简化Spring应用开发,约定大于配置,去繁从简

微服务

将每一个功能元素(独立替换、独立升级)独立出来放进一个独立的小型服务器,通过功能元素之间的动态组合完成功能。跨服务器分发这些服务进行扩展。部署和运维很困难。

开发环境

  1. jdk7.8
  2. maven 3.x
  3. Intellij IDEA
  4. Spring Boot 1.5.9RELEASE

Spring Boot HelloWorld

  浏览器发送hello请求,服务器接收请求并处理,相应HelloWorld字符串

  1. 创建一个Maven工程;(jar)   Enable auto-import
  2. 导入Spring Boot相关依赖
    1. https://docs.spring.io/spring-boot/docs/2.0.5.RELEASE/reference/htmlsingle/#getting-started-cli-example                    复制Maven Installation的配置,导入依赖。
      1.  
      2. <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.5.RELEASE</version>
        </parent>
        
        <!-- Add typical dependencies for a web application -->
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
        </dependencies>
  3. 编写主程序
  4. 创建HelloWorldMain的主程序,使用
    @SpringBootApplication进行标注
SpringApplication.run(HelloWorldMain.class, args);     //启动Spring 应用

     5.编写相关的Controller、Service

@Controller
public class HelloController {
    
    @ResponseBody
    @RequestMapping("/hello")
    public String hello(){
        return "HelloWorld";
    }
}

    6.运行主程序测试

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

导入Maven插件,该插件可以将应用打包成jar包。直接在CMD里使用java -jar执行

   6.分析为何如此简便

  • POM文件
    • <parent>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-parent</artifactId>
          <version>2.0.5.RELEASE</version>
      </parent>   
    • <parent>    //上面的父项目
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-dependencies</artifactId>
          <version>2.0.5.RELEASE</version>
          <relativePath>../../spring-boot-dependencies</relativePath>
      </parent>    //它来真正管理Spring Boot应用里面的所有依赖版本,没有在dependences里面管理的依赖要声明版本号
  • 启动器
    • <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
      </dependency>             //Spring-boot-stater-web

    • Spring-boot-starter:Spring-boot场景启动器,web模块正常运行所依赖的组件

      Spring Boot将所有的功能场景都抽取出来,做成一个个的starters,只需引入starter  相关场景的所有依赖都会导入进来
  • 主程序类  @SpringBootApplication  说明该类是SpringBoot的主配置类,运行该类的main方法,来启动SpringBoot应用,组合注解。 
  • 其中有:@SpringBootConfiguration:Spring Boot的配置类;相当于Spring的@Configuration

                            配置类相当于配置文件,也是容器中的一个组件@Component

                      @EnableAutoConfiguration:开启自动配置功能  引入了@AutoConfigurationPackage 自动配置包  引入了

@Import(AutoConfigurationPackages.Registrar.class) //将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包的所有组件扫描的Spring容器
@Import(AutoConfigurationImportSelector.class)    //导入组件选择器,将需要导入的组件以全类名的方式返回,添加到Spring容器。会给容器中导入非常多的自动配置类(xxxAutoConfiguration)  给容器中导入这个场景所需要的所有组件,并配置好这些组件。有了自动配置类,免去了我们手动编写配置注入功能组件的工作。      Spring Boot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfigration指定的值,将这些值作为自动配置类导入到容器,自动配置类就生效,进行配置工作

Spring Initializer快速创建Spring Boot项目

选择所需模块,自动生成      @ResponseBody和Controller合二为一 @RestController

默认生成Spring Boot项目;已生成主程序,只需自己编写业务逻辑;

resources文件夹下有

                                   ·static:保留所有的静态资源 js css image 

                                   ·templates:保存所有的模板页面 (Spring Boot 默认jar包使用嵌入式的Tomcat,默认不支持jsp),可以使用模板引擎(freemarker、thymeleaf)

                                   ·application.properties:Spring Boot应用的配置文件,可以修改默认设置

配置文件

Spring Boot设置默认值  application.properties、application.yml

YAML:以数据为中心,比json,xml更适合做配置文件  

yml:

server:
    port:8081

xml:

<server>
    <port>8081</port>
</server>

  YAML语法: 一定要加空格

  • 基本语法:   k:(nbsp)v:  表示一队键值对,左对齐表示同一层级,大小写敏感
  • 值的写法:  
    • 字面量:普通的值(数字、字符串、布尔)    直接写,字符串不用加单双引号,双引号不转义字符,单引号会转义
    • 对象、Map(键值对) 下一行写属性和值得关系(注意缩进)
    • 数组(list 、set): 用- 值 表示数组中的元素  

配置文件注入

person:
  lastName: zhangsan
  age: 20
  boss: false
  birth: 2018/09/15
  maps: {v: a,v1: b}
  lists:
    - lisi
    - wanger
  dog:
    name: huzi
    age: 3

javaBean

@Component
@ConfigurationProperties(prefix = "person")    //默认从全局文件中获取值
public class Person {

    private String lastName;
    private Integer age;
    private Boolean boss;
    private Date birth;

    private Map<String, Object> maps;
    private List<Object> lists;
    private Dog dog;

导入配置文件处理器,可以提示编写配置文件

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-configuration-processor</artifactId>
	<optional>true</optional>
</dependency>

使用@Value相当于

 与@ConfigurationProperties (...) 功能相同

 数据校验 @Validated  要使用@ConfigurationProperties,@Value不支持复杂类型的封装

@PropertySource&@ImportResource

@PropertySource:加载指定的配置文件  @PropertySource(value={"classpath:person.properties"})

@ImportResource  导入Spring的配置文件,使其生效

Spring Boot推荐给容器中添加组件的方式:推荐使用全注解的方式

  1. 配置类====Spring配置文件  使用@Configuration指明当前类是一个配置类(相当于之前的配置文件)
  2. 使用@Bean给容器添加组件,这个组件默认的id就是方法名

配置文件占位符:

随机数、占位符获取之前配置的值(如果没有可以使用:  指定默认值)

Profile

Spring对不同环境提供不同配置功能的支持,通过激活、指定参数等方式快速切换环境

  1. 配置多个Profile文件,配置主文件名时使用 application-{profile}.properties/yml
  2. yml 多文档块指定 使用  ---  三个横线分割文档块
  3. 指定激活profile
    1. 配置文件中指定spring.profiles.active=xxx 来使用
    2. 命令行:--spring.profiles.active=xxx   (可以在idea 右上角的Edit Configurations里面添加命令行参数  program arguments)
    3. 可以package,在命令行指定jar包运行环境
    4. 虚拟机参数 同样的右上角 VM options: -Dspring.profiles.active=dev

配置加载优先级

由高到低,全部加载,互补配置  命令行参数优先级最高

也可以使用外部配置进行加载

自动配置原理

3)每一个自动配置类进行自动配置功能    根据当前不同的条件判断,决定这个配置是否生效,一旦这个配置生效,这个配置类就会给容器添加各种组件,这些组建的属性是从对应的properties类中获取的,这些类里面的每一个属性又是和配置文件绑定的

4)所有能在配置文件中配置的属性,都是在xxxProperties类中封装着。可以在对应的属性类中查看可以配置什么

精髓:

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

自动配置类必须在一定条件下才可生效

可以启用debug=true属性,来让控制台打印自动配置报告,可以知道哪些自动配置类生效

 

 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 、 1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READmE.文件(md如有),本项目仅用作交流学习参考,请切勿用于商业用途。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值