当前位置: 首页 > news >正文

SpringBoot学习1—安装与配置

文章目录

    • 一. 快速上手springBoot
      • 1.1 简介
      • 1.2 创建SpringBoot工程
      • 1.3 springBoot程序优点
      • 1.4 SpringBoot的Parent
      • 1.5 springBoot的starter:spring-boot-starter-web.pom
      • 1.6 SpringBoot的引导类(整个SprinBoot工程的入口,运行main方法就可以启动项目)
      • 1.7 内嵌Tomcat容器
    • 二. Rest开发简介(springMVC知识补充)
      • 2.1 REST简介
      • 2.2 REST简单案例
      • 2.3 REST改进
    • 三、基础配置
      • 3.1 属性配置
      • 3.2 种配置文件类型
      • 3.3 yaml数据格式
      • 3.4 读取yaml单一属性数据
      • 3.5 yaml文件中变量的引用
      • 3.6 读取yaml全部属性的数据
      • 3.7 读取yaml引用类型数据

一. 快速上手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.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
  </dependency>

在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)
{
//查询操作
}

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)
{
......
}

三、基础配置

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

3.1 属性配置

修改服务器端口

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

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

#修改banner
##关闭banner
spring.main.banner-mode=off
##修改banner图片
spring.banner.image.location=banner.jpg

修改日志

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

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}]

3.4 读取yaml单一属性数据

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

country: beijing
user:
  name: chailong
  age: 16
likes: [sleep,reading,eating]

控制器代码

//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";
    }
}

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

3.5 yaml文件中变量的引用

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

age1: 14
#使用${属性名}引用数据
info:
  name: jack
  age: ${age1}#引用

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";
    }
}

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. 定义数据用于封装数据
@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. 控制器中装配
    @Autowired
    private Mydatasource data;

相关文章:

  • 10月笔试面试记录
  • 【概率论与数理统计(研究生课程)】知识点总结9(回归分析)
  • 1-2Java程序运行机制以及运行过程
  • 初次使用Ubuntu18.04遇到的问题——笔记4 (Ubuntu18.04+Anaconda+Pycharm+Pytorch)
  • apache服务web页面执行shell脚本
  • git如何回滚,返回到之前的记录
  • Qt实现侧边栏显示隐藏以及自定义提示框
  • ESP8266/esp32接入阿里云物联网平台点灯控制类案例
  • 【从小白到大白05】c和c++内存管理
  • 【halcon】draw_rectangle1
  • 使用clicktail采集TIDB慢查询日志到clickhouse
  • Web自动化之Pytest测试框架
  • Java模糊查询批量删除Redis的Key实现
  • 来不及细说,毕业三天靠Python兼职赚了两千
  • 标准编解码库:ByteToMessageDecoder
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • CODING 缺陷管理功能正式开始公测
  • create-react-app项目添加less配置
  • css系列之关于字体的事
  •  D - 粉碎叛乱F - 其他起义
  • JS学习笔记——闭包
  • laravel 用artisan创建自己的模板
  • node和express搭建代理服务器(源码)
  • oschina
  • python3 使用 asyncio 代替线程
  • Selenium实战教程系列(二)---元素定位
  • vue-router 实现分析
  • vue-router的history模式发布配置
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 从0到1:PostCSS 插件开发最佳实践
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 理解在java “”i=i++;”所发生的事情
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 如何设计一个比特币钱包服务
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 使用putty远程连接linux
  • 一个项目push到多个远程Git仓库
  • 译米田引理
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • $.ajax中的eval及dataType
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (三)模仿学习-Action数据的模仿
  • (十) 初识 Docker file
  • (算法)前K大的和
  • (原)Matlab的svmtrain和svmclassify
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • *2 echo、printf、mkdir命令的应用
  • .net实现客户区延伸至至非客户区
  • .net下的富文本编辑器FCKeditor的配置方法