狂神说springboot(纯应用部分)

狂神说springboot1.说在前面javase: oopmysql: 持久化html+css+js+jquery+框架: 视图javaweb: 独立开发mvc三层架构的网站(原始版)ssm: 框架,简化我们的开发流程,但是随着发展,配置开始较为复杂在这之前,程序都是打包成war包,在tomcat上运行,从springboot开始打包成jar包(内嵌tomcat来运行)spring再简化: springboot横空出世,微服务架构服务增多:springcloud来管理微
摘要由CSDN通过智能技术生成

狂神说springboot


1.说在前面

javase: oop

mysql: 持久化

html+css+js+jquery+框架: 视图

javaweb: 独立开发mvc三层架构的网站(原始版)

ssm: 框架,简化我们的开发流程,但是随着发展,配置开始较为复杂

在这之前,程序都是打包成war包,在tomcat上运行,从springboot开始打包成jar包(内嵌tomcat来运行)

spring再简化: springboot横空出世,微服务架构

服务增多:springcloud来管理微服务


1.1 优点

  • 为所有spring开发者更快入门
  • 开箱即用,提供各种默认配置来简化项目配置
  • 内嵌式容器简化web项目
  • 没有冗余代码生成和xml配置要求

1.2 什么是微服务?

微服务是一种架构风格,他要求我们在开发一个应用的时候,这个应用必须构建成一系列小服务的组合:可以通过http的方式进行互通.

单体应用架构

(all in one) 将一个应用的中的所有内容封装到一个应用中.放到一个war包内.

  • 这样做的好处是,易于开发和测试,部署也十分方便,需要拓展时,只需要将war复制多份,然后放到多个服务器上,再做个负载均衡就可以了
  • 缺点是,哪怕修改了很小的一个地方,我们都需要停掉整个服务,重新打包,部署这个应用的war包.特别是对于一个大型项目.我们不可能把所有的内容放到一个war里面,我们如何维护和分工都是问题…

微服务架构

所谓微服务架构就是打破all in one的模式,把每个功能元素单独拿出来.把独立的功能元素动态组合,需要的功能才去拿来组合,需要多一些的功能时整合多个功能元素,所以微服务架构就是对功能元素进行复制,而没有对整个应用进行复制.

好处

  • 节省资源
  • 每个功能元素都是可替换的,可独立升级的软件代码

2.第一个springboot程序

环境

  • jdk 1.8
  • maven 3.6.3
  • springboot
  • idea 2021.1.1

官方:提供了一个快速生成的网站

  • 可以再官网直接下载后导入idea开发 https://start.spring.io/
  • 直接使用idea创建一个springboot项目(一般直接在idea中创建)

在idea中直接生成

在这里插入图片描述

选择springweb

在这里插入图片描述


这个时候可能会遇到war包下载失败的问题

** 解决方案: **https://blog.csdn.net/weixin_36827459/article/details/108317079?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_title~default-1.no_search_link&spm=1001.2101.3001.4242

https://blog.csdn.net/weixin_41450959/article/details/106109392

如果还是无法解决,就调低springboot的版本继续尝试.通常问题可以得到解决


建包时的注意点

在这里插入图片描述

新建的包要和application类同一级否则无法识别到

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloController {
   

    // http://localhost:8080/hello
    @ResponseBody
    @RequestMapping("/hello")
    public String test01(){
   
        return "hello,world!";
    }
}

结果

在这里插入图片描述


修改端口号

在resources文件夹下application.properties中==# server.port=8081 修改端口号==

2.1 小彩蛋


修改springboot启动页面的图标

**网站:**https://bootschool.net/ascii

在resource下新建banner.txt文件夹

在这里插入图片描述

效果
在这里插入图片描述



3.sprinboot自动装配原理(待补充)

自动配置

pom.xml

  • spring-boot-dependencies : 核心依赖在父工程中
  • 我们在写或者引入sprinboot依赖的时候,不需要指定版本,因为有这些版本仓库

启动器

  • <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    
  • 启动器就是springboot的启动场景

  • 比如spring-boot-starter-web,他就会帮我们自动导入web依赖的环境

  • springboot会将所有的功能场景,都变成一个个启动器

  • 我们要使用什么功能,就只需要找到一个个启动器就可以了


主程序

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


/*
* 本身就是spring的一个组件
* */

@SpringBootApplication
public class Demo2Application {
   

    public static void main(String[] args) {
   
        SpringApplication.run(Demo2Application.class, args);
    }

}

注解

@SpringBootConfiguration   springboot配置
    @Configuration         spring配置类
    	@Component         spring组件
    
    
@EnableAutoConfiguration        自动配置
    @AutoConfigurationPackage   自动配置包
    	@Import({
   Registrar.class})  导入了选择器
    


4.springboot配置

springboot的配置文件application.properties到底可以配置一些什么呢?

springboot使用一个全局的配置文件,配置文件名称是固定的

  • application.properties
    • 语法: key=value
  • application.yml
    • 语法: key:(空格)value

4.1 yaml

YAML是"YAML Ain’t a Markup Language"(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。

标记语言

以前的配置文件大多使用xml来配置,但是xml配置起来不如yaml轻巧

# k: v
name: kuquan

# object
student:
  name: kuquan
  age: 3

# object inline
stuent: {
   name: kuquan, age: 3}

# array
petsArr1:
  -dog
  -cat
  
# array inline
petsArr2: [cat, pig, dog]

properties只能存键值对

yml的值可以注入到我们的配置类中



4.2 给属性赋值的几种方法

4.2.1 yaml赋值

注入

在这里插入图片描述


不影响运行

在这里插入图片描述


==@ConfigurationProperties(prefix = “person”)==和配置文件中的属性绑定


结果

在这里插入图片描述

如果想避免爆红

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

4.2.2 properties配置

通过properties来配置

在这里插入图片描述


对比

在这里插入图片描述

  • spEL:springbootEL表达式
  • 松散绑定:yaml中的last-name可以和类中的lastName绑定,也就是-后面的字母默认大写的,这就是松散绑定.
  • JSR303数据校验:我们可以在字段上增加一层过滤器验证,可以保证数据的合法性.

结论

  • 配置yml和配置properties都可以获取到值,强烈推荐yml
  • 如果我们在某个业务中,只需要获取文件中的某个值,可以使用@value
  • 如果说,我们专门编写了一个javaBean来和配置文件进行映射,就直接使用@ConfigurationProperties(prefix = “xxx”)


4.3 JSR303校验

@Validated 数据校验

类上加完数据校验的注解之后,之后的成员变量上可以加注解

在这里插入图片描述



在这里插入图片描述



4.4 多环境配置及配置文件位置

4.4.1 yaml多文件模块

springboot的多环境配置,选择选择激活哪一个配置文件

spring.profiles.active=(跟application-后面的那个值)

yaml多文件模块

# 选择激活的模块
spring:
  profiles:
    active: dev

---

server:
  port: 8081

# 配置环境名称
spring:
  profiles: dev


---
server:
  port: 8082

相当于配置了三个文件



4.4.2 springboot配置文件加载优先级
  • 优先级1:项目路径下config文件夹下配置文件
  • 优先级2:项目路径下配置文件
  • 优先级3:资源路径下config文件夹配置文件
  • 优先级4:资源路径下配置文件


4.4.3 配置项目访问路径
# 配置项目的访问路径(默认是/)
server:
  servlet:
    context-path: /edu


4.5 自动装配再理解(待补充)

查看哪些自动配置类生效了

debug: true


5.springboot WEB开发

要解决的问题:

  • 导入静态资源
  • 首页
  • jsp,模板引擎thymleaf
  • 装配扩展springmvc
  • 视图解析器
  • 增删改查
  • 拦截器
  • 国际化


5.1 静态资源问题

在这里插入图片描述

静态资源就放置在这里


静态资源导入的源码

public void addResourceHandlers
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值