Spring Boot-入门、热部署、配置文件、静态资源

news2024/11/13 22:58:33

Spring Boot

Spring Boot概述

一、微服务概述

1、微服务

  • 微服务(Microservices)是一种软件架构风格。
  • 微服务是以专注单一责任与功能的小型功能区块 (Small Building Blocks)为基础;利用模块化的方式组合出复杂的大型应用程序;各功能区块使用与语言无关 (Language-Independent/Language agnostic)的API集相互通信。
  • 2014年,Martin Fowler 与 James Lewis 共同提出了微服务的概念,定义了微服务是以开发一组小型服务的方式来开发一个独立的应用系统的。
    • 其中每个小型服务都运行在自己的进程中,并经常采用HTTP资源API这样轻量的机制来相互通信。
    • 这些微服务围绕业务功能进行构建,并能通过全自动的部署机制来进行独立部署。
    • 这些微服务可以使用不同的语言来编写,并且可以使用不同的数据存储技术。
    • 这些微服务我们仅做最低限度的集中管理。

2、单体应用

(1)单体应用

  • 一个单块应用系统 是以一个 单个 单元的方式来构建的。
  • 企业应用系统经常包含三个主要部分:客户端用户界面、数据库和服务端应用系统。
    • 这里的服务端应用系统就是一个单体的应用,新构建部署一个新版本的服务端应用系统。
  • 。针对单体应用,当访问量变大时,通常采用负载均衡,横向扩展的方式将多个单体应用部署到多个服务器上访问。

(2)单体应用缺点

  • 软件变更受到了很大的限制,应用系统的一个很小的部分的一处变更,也需要将整个单块应用系统进行重新构建和部署。
  • 不能根据用户需求部署应用系统中的功能模块,只能扩展部署整个应用系统。

3、单一应用和微服务对比

在这里插入图片描述

4、微服务应用搭建

在这里插入图片描述

搭建一个微服务,运维和部署变得非常复杂,Spring提供了一套解决方案

  • Spring Boot:快速搭建单个服务。

  • Spring Cloud:是一系列有序框架的集合,其主要的设施有

    • 发现与注册
    • 配置中心
    • 消息总线
    • 负载均衡
    • 断路器
    • 数据监控等

    通过Spring Boot的方式,可以实现一键启动,和部署。

  • Spring cloud data flow:为基于微服务的分布式流处理和批处理数据通道提供了一系列模型和最佳实践

在这里插入图片描述

二、Spring Boot简介

  • Spring Boot是由Pivotal团队提供的全新框架。
  • 目的:用来简化新Spring应用的初始搭建以及开发过程
  • Spring Boot默认配置了很多框架的使用方式,就像maven整合了所有的jar包,Spring-Boot整合了其他相关联框架。

三、Spring Boot的优势

  • 快速构建项目。
  • 对主流开发框架的无配置集成。
  • 项目可独立运行,无须外部依赖Servlet容器。
  • 提供运行时的应用监控。
  • 极大的提高了开发、部署效率。
  • 与云计算的天然集成。

四、Spring Boot的核心功能介绍

  1. 独立运行Spring项目
    • Spring Boot可以以jar包形式独立运行,运行一个Spring Boot项目只需要通过java -jar xx.jar来运行。
  2. 内嵌servlet容器
    • Spring Boot可以选择内嵌Tomcat、jetty或者Undertow,这样我们无须以war包形式部署项目。
  3. 提供starter简化Maven配置
    • spring提供了一系列的start pom来简化Maven的依赖加载,,例如,当你使用了spring-boot-starter-web,会自动加入依赖包。
  4. 自动装配Spring
    • Spring Boot会根据在类路径中的jar包、类,为jar包里面的类自动配置Bean,这样会极大地减少我们要使用的配置。
    • Spring Boot只考虑大多数的开发场景,并不是所有的场景,若在实际开发中我们需要配置Bean,而Spring Boot没有提供支持,则可以自定义自动配置。
  5. 准生产的应用监控
    • Spring Boot提供基于http ssh telnet对运行时的项目进行监控。
  6. 无代码生产和xml配置
    • Spring Boot不是借助与代码生成来实现的,而是通过条件注解来实现的,这是Spring4.x提供的新特性。

Spring Boot入门

一、创建SpringBoot模块

1、第一步

在这里插入图片描述

2、第二步

  • type:是maven
  • javaVersion:8

在这里插入图片描述

3、第三步

  • SpringBoot Version:是与上一步的JavaVersion对应,2.7.11,最低版本。

在这里插入图片描述

  • 第一次创建的时间很长,是因为要下载相应的资源

二、入门项目测试

1、项目结构

在这里插入图片描述

2、编写测试代码

(1)导入依赖,pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!--依赖父亲maven-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.11</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.etime</groupId>
    <artifactId>day0423</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>day0423</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <!--在SpringBoot在引入web,由启动器 (starter) 完成-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--引入Lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.16</version>
        </dependency>
    </dependencies>

    <!--构建插件-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

(2)实体类

  • 学生类
package com.etime.day0423.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

@NoArgsConstructor
@AllArgsConstructor
@Data
public class Student {

    private int sid;
    private String name;
    private String gender;
    private Date birthday;
    private String s_class;
    private String photo;
}

(3)在控制层创建StudentController.java

package com.etime.day0423.controller;

import com.etime.day0423.pojo.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/student")
public class StudentController {
    
    @GetMapping("t01")
    @ResponseBody
    public Student test01(){
        return new Student(1,"li","男",null,"111","li1.jpg");
    }
}

(4)找到Springboot01Application.java,运行主函数

在这里插入图片描述

(5)使用Postman测试

在这里插入图片描述

(6)使用@RestController注解

  • @RestController = @Controller + @ResponseBody。
  • @RestController:注册控制器、该控制器中所有方法有返回值,都自动转换为JSON格式(除了字符串以外)
  • 若返回值是字符串,他不会转换为JSON格式,返回的就是一个字符串
package com.etime.day0423.controller;

import com.etime.day0423.pojo.Student;;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

@RestController
public class StudentController {

    @GetMapping("/student/{sid}")
    public Student getUserByUid(@PathVariable("sid") int sid) {
        System.out.println("查询id为 "+sid);
        return new Student(1,"li","男",null,"111","li1.jpg");
    }

    @GetMapping("/student")
    public List<Student> getAllUser() {
        Student s1 = new Student(1,"li-1","男",null,"111","li1.jpg");
        Student s2 = new Student(2,"li-2","男",null,"112","li2.jpg");
        Student s3 = new Student(3,"li-3","男",null,"113","li3.jpg");
        List<Student> list = new ArrayList<>();
        list.add(s1);
        list.add(s2);
        list.add(s3);
        return list;
    }

    @PostMapping("/student")
    public boolean addUser(Student student) {
        System.out.println(student);
        return true;
    }
 
    @PutMapping("/student")
    public boolean updateUser(Student student) {
        System.out.println("修改学生信息 :"+student);
        return false;
    }

    @DeleteMapping("/student/{id}")
    public boolean deleteUser(@PathVariable("id") int sid) {
        System.out.println("删除:"+sid);
        return true;
    }
}

Spring Boot热部署

一、Spring Boot热部署概述

1、为什么要热部署

​ 在实际的项目开发调试过程中会频繁地修改后台类文件,导致需要重新编译、重新启动,整个过程非常麻烦,影响开发效率。

2、热部署好处

​ Spring Boot提供了spring-boot-devtools组件,使得无须手动重启SpringBoot应用即可重新编译、启动项目,大大缩短编译启动的时间。

  • devtools会监听classpath下的文件变动,触发Restart类加载器重新加载该类,从而实现类文件和属性文件的热部署。
  • 并不是所有的更改都需要重启应用(如静态资源、视图模板),可以通过设置spring.devtools.restart.exclude属性来指定一些文件或目录的修改不用重启应用。

二、项目配置热部署

1、导入依赖,在pom.xml中

<!--引入热部署-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
</dependency>

2、在application.properties配置信息

  • spring.devtools.restart.enabled
    • true:开启热部署
    • false:关闭热部署
  • spring.devtools.restart.additional-paths
    • 会监听classpath下的文件变动
  • spring.devtools.restart.exclude
    • 指定文件或目录的修改不用重启应用
spring.devtools.restart.enabled=true
spring.devtools.restart.additional-paths=src/main/java
spring.devtools.restart.exclude=static/**

3、在 setting 中配置

在这里插入图片描述

4、在Registry中配置

  • 进入方式:Ctrl+Shift+Alt+/

在这里插入图片描述

5、测试

  • 修改java包下的任意代码

Spring Boot配置文件

一、YAML

  • YAML,全称:YAML Aint Markup Language),是一种标记语言。
  • 通常以.yml或者.yaml为后缀的文件
  • 是一种直观的能够被电脑识别的数据序列化格式,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,一种专门用来写配置文件的语言。
  • 可用于如: Java,C/C++, Ruby, Python, Perl, C#, PHP等

二、使用YAML

1、将application.properties文件的后缀名改为yml

spring:
  devtools:
    restart:
      enabled: true
      additional-exclude: "src/main/java"
      exclude: "static/**"

2、再次测试

  • 修改java包下的任意代码

Spring Boot静态资源

一、在static中新建文件夹,随机将一张图片放入该文件夹

1、目录结构

在这里插入图片描述

2、通过访问进行测试

  • 静态资源放入static,SpringBoot会自动将资源加载到服务器上,重启即可。
  • 注意文件夹的创建方式与创建包不同
  • 注意文件夹名称与控制层的请求地址,不能重名。
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/453122.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DockerImage镜像版本说明

参考文章 1、https://medium.com/swlh/alpine-slim-stretch-buster-jessie-bullseye-bookworm-what-are-the-differences-in-docker-62171ed4531d 2、https://stackoverflow.com/questions/52083380/in-docker-image-names-what-is-the-difference-between-alpine-jessie-stret…

顺序表 和 链表 的区别

顺序表 基于数组 就是对数组进行相关的操作 进行存储数据 数组有个很大的缺点就是 可能会产生内存浪费 针对数组这一缺点 就产生了链表 链表顾名思义 就是像链条一样将数据串起来 链表是将内存中的小空间利用起来 让内存的利用率提高 但是也产生了很大的缺点 就是不能随…

数据通信基础 - 差错控制(奇偶校验、海明码、CRC循环冗余校验码)

文章目录 1 概述1.1 检错和纠错1.2 差错控制原理 2 差错控制的方法2.1 奇偶校验2.2 海明码2.3 CRC循环冗余校验码 3 扩展3.1 网工软考真题 1 概述 1.1 检错和纠错 无论通信系统如何可靠&#xff0c;都不能做到完美无缺。因此&#xff0c;必须考虑怎样发现和纠正信号传输中的差…

【实用教程】教你制作好看的论文区位图

区位图是反映目标区所在位置和与周边地区自然、经济相互作用关系的体现区位的地图。好的区位图能为论文打好专业的基调&#xff0c;给读者留下更好观感&#xff0c;是科研论文不可或缺的一部分。 层次&#xff1a;面向国际期刊的区位图一定要从国际角度出发&#xff0c;清楚表示…

第一性原理差分电荷密度计算能得到什么数据?

第一性原理差分电荷密度&#xff08;DFT&#xff09;计算是一种用于计算分子和材料结构的计算化学方法。它基于物理学原理和量子力学理论&#xff0c;通过解决薛定谔方程来计算电子在分子和材料结构中的行为。DFT是一种非常重要的计算方法&#xff0c;因为它可以提供关于分子和…

自媒体必备素材库,免费、商用,赶紧马住~

自媒体经常需要用到各类素材&#xff0c;本期就给大家安利6个自媒体必备的素材网站&#xff0c;免费、付费、商用都有&#xff0c;建议收藏起来~ 1、菜鸟图库 https://www.sucai999.com/video.html?vNTYwNDUx 菜鸟图库可以找到设计、办公、图片、视频、音频等各种素材。视频素…

托福高频真词List03 // 附阅读真题

目录 4月23日单词 4月23日真题 4月23日单词 adjacentneighboringnearbyadj 毗邻的dependablereliableadj 可靠的 chronology a list that pairs past events with dates n 年表remarkably closeextremely close极为接近competenceabilityn 才能supplementadd tov 补充supplem…

Linux_红帽8学习笔记分享_6

Linux_红帽8学习笔记分享_6 文章目录 Linux_红帽8学习笔记分享_61. RPM软件包的使用技巧1.1如何查询指定软件包是否安装1.2如何删除指定软件包1.3如何安装指定软件包1.5依赖关系 2. YUM软件仓库的配置及使用2.1修改YUM软件仓库的配置文件 3.YUM常见命令使用技巧3.1查询指定软件…

Django框架之创建项目、应用并配置数据库

django3.0框架创建项目、应用并配置数据库 创建项目 进入命令行 新建一个全英文的目录 进入目录 输入命令 django-admin startproject project 项目目录层级 查看当前目录层级 tree /f 目录文件说明 创建数据库 做一个学生管理系统做演示&#xff0c;使用navicat创建数据…

【LPC55s69】使用FAL分区管理与easyflash变量管理

文章目录 1.FAL组件1.1什么是FAL1.2 使用ENV配置FAL1.3 FAL SFUD 移植1.4 FAL SFUD 测试用例1.5 测试结果 2.DFS文件系统2.1 什么是DFS2.2 DFS架构2.3 使用ENV配置DFS2.4 DFS挂载到FAL分区测试2.5 测试结果 3.Easyflash移植到FAL分区3.1 简述EasyFlash3.2EasyFlash软件包使用3.…

Docker的数据管理(dockerfile等)

文章目录 一、管理docker容器中数据1、 数据卷2、数据卷容器 二、容器互联&#xff08;使用centos镜像&#xff09;三、Docker 镜像创建1、基于现有镜像创建2、基于本地模板创建3、基于Dockerfile创建 四、Dockerfile操作常用的指令:五、Dockeerfile案例 一、管理docker容器中数…

HNU数据结构与算法分析-小班7

HNU数据结构与算法分析-小班7

【Python】可视化KITTI激光雷达点云绘制立体框

前言 最近在复现PointRCNN论文过程中发现没有可视化代码&#xff0c;于是查找资料找到了&#xff1a; pointRCNN 结果可视化——tiatiatiatia 按照参考链接下载代码【轮子库】并可视化成功了 mayavi库的学习 主要是利用了mlab模块&#xff1a; Mayavi2 旨在提供一个简单…

隐私计算商业化,原语科技的开源路线是否最优解?

2023年2月&#xff0c;《数字中国建设整体布局规划》出台&#xff0c;首次对我国数字中国建设提出了宏观规划。其中&#xff0c;尤为值得关注的是隐私计算领域。 隐私计算能够实现数据的所有权和使用权分离&#xff0c;可以在保护个人数据隐私安全的基础上&#xff0c;推动数字…

《Linux0.11源码解读》理解(一) 从开机到加载bootsec

计算机启动时, 内存(RAM)没有任何东西, 自然也无法跑操作系统. 但是可以执行固化在ROM里面的BIOS程序. 在按下电源键的一刻. CPU的cs和ip寄存器硬件被设置为0xf000和0xfff0, 于是cs:ip也就指向0xffff0这个地址, 而这个地址正是指向了ROM的BIOS范围(这里是0xfe000~0xfffff, 20根…

Zuul源码解析(二)

Zuul 的自动配置 ZuulProxyAutoConfiguration 如何触发 如上图&#xff0c;在 spring.factory 中配置 ZuulProxyAutoConfiguration 自动配置了&#xff0c;直接点进去 如上图所示&#xff0c;发现这有个条件注解&#xff0c;需要有 org.springframework.cloud.netflix.zuul.Zu…

Kubernetes 核心对象

Kubernetes 中的所有内容都被抽象为“资源”&#xff0c;如 Pod、Service、Node 等都是资源。“对象”就是“资源”的实例&#xff0c;是持久化的实体。Kubernetes 使用这些实体去表示整个集群的状态。它们主要描述了如下信息&#xff1a; 哪些容器化应用正在运行&#xff08;…

ObjectARX中的坐标系以及坐标转换

1 AutoCAD中的坐标系种类 WCS World Coordinate System. The “reference” coordinate system. All other coordinate systems are defined relative to the WCS, which never changes. Values measured relative to the WCS are stable across changes to other coordinate s…

Nginx之正则表达式、location匹配简介以及rewrite重写

引言 在Nginx已经成为很多公司作为前端反向代理服务器的首选&#xff0c;在实际工作中往往会遇到很多跳转(重写URL)的需求。比如更换域名后需要保持旧的域名能跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求。如果在后端使用的Apache服务器&#xff…

力扣---LeetCode203. 移除链表元素

文章目录 前言203. 移除链表元素链接方法一&#xff1a;直接删除1.1 注意&#xff1a;1.2 各种情况的流程图&#xff1a;方法二&#xff1a;遍历将非val的节点尾插2.1 流程图&#xff1a;2.2 注意&#xff1a; 总结 前言 你坚持的东西 总有一天会反过来拥抱你 本章的内容是力扣…