• SpringBoot学习1—安装与配置


    一. 快速上手springBoot

    1.1 简介

    SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程§

    1.2 创建SpringBoot工程

    • 配置项目结构和java版本
      在这里插入图片描述

    • 选择依赖(这里只选择了web开发)
      在这里插入图片描述

    • 搭建成功
      在这里插入图片描述

    • 运行程序
      在这里插入图片描述

    • 访问网页
      在这里插入图片描述

    1.3 springBoot程序优点

    • 起步依赖(简化依赖配置):Spring-boot将所有的依赖的版本统一管理,当自己使用依赖时直接使用即可,避免了包冲突问题
    • 自动配置(简化常用工程相关配置)
    • 辅助功能(内置服务器…)

    1.4 SpringBoot的Parent

    所有SpringBoot项目要继承的项目,定义了若干个坐标版本号(依赖管理,而非依赖),以达到减少依赖冲突的目的(依赖版本管理)

    • 开发SpringBoot程序要继承Spring-boot-starter-parent
    • spring-boot-starter-parent中定义了若干个依赖管理
    • 继承parent模块可以避免多个依赖使用相同技术时出现依赖版本冲突
    • 继承parent的形式也可以采用引入依赖的形式实现效果(阿里云就是用的这个)

    1.5 springBoot的starter:spring-boot-starter-web.pom

    starter时SpringBoot中常见项目名称,定义了当前项目使用的所有依赖坐标,以达到减少依赖配置的目的(依赖管理)

    • 开发SpringBoot程序需要导入坐标时通常导入对应的Starter
    • 每个不同的Starter根据功能不同,通常包含多个依赖坐标
    • 使用starter可以实现快速配置的效果,达到简化配置的目的

    在实际开发时,在使用任意坐标时,仅仅写GAV终端中G和A,V由SpringBoot提供,除非SpringBoot未提供对于版本的V,如果发生坐标错误,再自己手动指定version(注意出现版本冲突)

    1.6 SpringBoot的引导类(整个SprinBoot工程的入口,运行main方法就可以启动项目)

    • SpringApplication.run(GetspringApplication.class, args)实际上是实例化了SpringBoot的容器类(和SpringIOC一样存放Bean对象)
    • @SpringBootApplication用来加载配置
    • SpringBoot工程运行后初始化spring容器,扫描引导类所在包加载bean在这里插入图片描述

    1.7 内嵌Tomcat容器

    在下面这个包里面内嵌了Tomcat容器

    • 内嵌Tomcat服务器是SpringBoot辅助功能之一
    • 内嵌Tomcat工作原理是将Tomcat服务器作为对象运行,并将该对象交给Spring容器管理
    • 变更内嵌服务器思想是去除现有服务器,添加全新的服务器
      <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
      dependency>
    
    • 1
    • 2
    • 3
    • 4

    在SpringBoot中内置了3款服务器:

    • tomcat(默认):apache出品,应用面广,负载了若干较重的组件
    • jetty:更轻量级,负载性能远不及tomcat
    • undertow:负载性能勉强跑赢tomcat

    二. Rest开发简介(springMVC知识补充)

    2.1 REST简介

    REST(Representational State Transfer)表现形式转换,一种访问资源的格式

    • 传统风格资源描述形式
      http://localhost/user/getByID?id=1(get方式)
      http://localhost/user/saveUser(post方式)
    • Rest风格
      http://localhost/user/1(和上面的get方法一样的效果)
      http://localhost/user(和上面的post方式一样的效果)
    • 优点
      1. 隐藏了资源的访问行为,无法通过url得知对资源是何种操作
      2. 书写简化
    • 按照Rest风格访问资源时使用行为动作区分对资源进行了何种操作
      1. http://localhost/users (get查询时是用于查询全部用户信息)
      2. http://localhost/users/1 (get查询时是查询ID为1的用户的信息)
      3. http://localhost/users (POST新增/保存时用于添加用户信息)
      4. http://localhost/users (PUT修改/更新时用于修改用户信息)
      5. http://localhost/users/1 (DELETE删除时用于删除ID为1的用户信息)

    上述行为是约定方式,约定不是规范是可以打破的,所以称为REST风格而不是REST规范,描述模块的名称通常使用的是复数,也就是加s的格式描述,表示此类资源,而非当个资源,例如上面的users

    2.2 REST简单案例

    • http://localhost/users/1地址执行查询id=1的用户
      1. 设定http请求动作(http://localhost/users/1)
      2. 设定请求参数(路径变量)(value="/users/{chailong})
      3. method:请求动作
      4. @PathVariable:形参注解,用于绑定路径参数与处理器方法形参
    @RequestMapping(value="/users/{chailong},method=RequestMethod.GET)
    @ResponseBody
    public String getById(@PathVariale Integer chailong)
    {
    //查询操作
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.3 REST改进

    基于上面的简单案例我们对Rest的使用可以进一步简化

    
    @RestController
    @RequestMapping("/books") //加在类上,就代表类下的所有方法都加了这个注解
    public class BookController{
    
    @PostMapping //这个等于@RequstMapping(method=RequestMethod.Post)
    public String sava(@RequestBody Book book)
    {
    ......
    }
    @DeleteMapping("/{id}") //这个等于@RequstMapping(value="/{id}" method=RequestMethod.Delete)
    public String sava(@RequestBody Book book)
    {
    ......
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    三、基础配置

    springBoot中导入对于的Starter后会提供相应的配置,在springBoot的核心配置文件application.properties修改配置(以

    3.1 属性配置

    修改服务器端口

    #修改服务器端口
    server.port=80
    
    • 1
    • 2

    修改Banner
    原始的banner为
    在这里插入图片描述

    #修改banner
    ##关闭banner
    spring.main.banner-mode=off
    ##修改banner图片
    spring.banner.image.location=banner.jpg
    
    • 1
    • 2
    • 3
    • 4
    • 5

    修改日志

    #日志配置
    ##修改日志级别为Debug
    logging.level.root=debug 
    
    • 1
    • 2
    • 3

    3.2 种配置文件类型

    • application.properties(传统格式/默认格式)
    • application.yml (主流格式)
    • application.yaml

    注意:上面三个配置文件都可以对项目生效,但三个配置文件如果同时存在时会存在加载优先级,其中优先级最高的是properties文件,其次是yml配置文件,最后是yaml配置文件

    3.3 yaml数据格式

    • 简介:Yaml(YAML Ain’t Markup Language),一种数据序列化格式
    • 优点:
    1. 容易阅读
    2. 容易与脚本语言交互
    3. 以数据为核心,重数据轻格式
    • YAML文件扩展名

    .yml(主流)
    .yaml

    • yaml语法规则
    1. 大小写敏感
    2. 属性层级关系使用多行描述,每行结尾使用冒号结束
    3. 使用缩进表示层级关系(类似于Python),同层级左侧对齐,只运行使用空格(不要使用Tap键)
    4. 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
    5. #表示注释
    country: china
    province: beijing
    city: beijinig
    area: haidian
    port: 8080
    party: true
    birthday: 1949-10-01
    #对象属性
    user:
      name: itcast
      age: 16
    #写多个数据
    likes:
       - game
       - music
       - sleep
       - 123
    likes2: [game,music,sleep]
    #对象数组
    users:
      - name: zhangs
      - age: 18
      - 
        name: lisi
        age: 20
    user3: [{name:zhangsan,age:18},{name:lisi,age:17}]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    3.4 读取yaml单一属性数据

    使用@Value读取单个数据,属性名引用方式:${一级属性名.二级属性名…}
    yaml数据

    country: beijing
    user:
      name: chailong
      age: 16
    likes: [sleep,reading,eating]
    
    • 1
    • 2
    • 3
    • 4
    • 5

    控制器代码

    //rest模式
    @RestController
    @RequestMapping("/books")
    public class BookController {
        //读取yaml中的单一属性数据
        @Value("${country}")
        private String country1;
        @Value("${user.name}")
        private String name;
        @Value("${likes[1]}")
        private String hobby;
        @GetMapping
        public String getById(){
            System.out.println(country1);
            System.out.println(name);
            System.out.println(hobby);
            return "chailong";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    运行结果:
    在这里插入图片描述

    3.5 yaml文件中变量的引用

    使用${属性名}直接引用文件中的其他变量

    age1: 14
    #使用${属性名}引用数据
    info:
      name: jack
      age: ${age1}#引用
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.6 读取yaml全部属性的数据

    封装全部数据到Environment对象封装全部配置信息,使用@Autowired自动装配数据到Environment对象中

    import org.springframework.core.env.Environment;
    @RestController
    @RequestMapping("/books")
    public class BookController {
        //使用自动装配将所有的数据装配到env中
        @Autowired
        private Environment env;
        @GetMapping
        public String getById(){
            System.out.println(env.getProperty("info.age"));//读取数据
            return "chailong";
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    3.7 读取yaml引用类型数据

    • 读取流程
    1. 创建一个类用于封装要封装的数据
    2. 由Spring帮助我们去加载数据到对象中(要告诉Spring加载这组信息)
    3. 从Spring中直接获取数据
    1. 在yaml中定义数据
    datasource:
      driver: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost/spring_db
      username: root
      password: root666
    
    • 1
    • 2
    • 3
    • 4
    • 5
    1. 定义数据用于封装数据
    @Component //定义为spring的bean
    @ConfigurationProperties("datasource")
    public class Mydatasource {
        private String driver;
        private String url;
        private String username;
        private String password;
        public String getDriver() {
            return driver;
        }
        public void setDriver(String driver) {
            this.driver = driver;
        }
        public String getUrl() {
            return url;
        }
        public void setUrl(String url) {
            this.url = url;
        }
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    1. 控制器中装配
        @Autowired
        private Mydatasource data;
    
    • 1
    • 2
  • 相关阅读:
    okcc呼叫中心语音失真是常见通话问题?
    小程序中使用echarts地图
    【分享】“抖店“在集简云平台集成应用的常见问题与解决方案
    谷歌自研芯片Tensor重磅来袭:“机器学习的里程碑”
    用Python判断是否为闰年并计算生肖年
    mybatis-plus分页
    Python+requests编写的自动化测试项目
    Spring mvc实现文件上传
    全球与中国数字万用表市场:增长趋势、竞争格局与前景展望
    cv::Mat 的常见操作方法
  • 原文地址:https://blog.csdn.net/qq_43456605/article/details/127372028