会员登录|免费注册|忘记密码|管理入口 返回主站||保存桌面|手机浏览|联系方式|购物车
springboot笔记整理(超详细,手把手教程!)
2024-12-16IP属地 湖北0

(建议配合哔哩哔哩狂神说springboot食用,有问题一起来交流吧🐧:504863638

javase:OOP

mysql:持久化

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

javaweb:独立开发MVC三层架构的网站:原始

ssm:框架:简化了开发流程,配置也开始较为复杂

war包:tomcat运行
spring再简化:springboot-jar:内嵌tomcat;微服务架构

服务越来越多:springcould

新服务架构:服务网格

约定大于配置

  • 开箱即用
  • 内嵌式容器简化web项目
  • 没有冗余代码生成和XML配置的要求

微服务是一种架构风格

高内聚低耦合

环境
  • jdk1.8
  • maven 3.6.1
  • springboot:最新版
  • IDEA
配置springboot 启动彩蛋

springboot banner网站:https://www.bootschool.net/ascii

在resource中新建文件banner.txt 给文件的内容则为启动彩蛋

修改端口号

在resource文件夹中的application.properties文件中添加

 
 
自动装配

pom.xml

  • spring-boot-dependencies:核心依赖在父工程中

  •  
  • 启动器:SpringBoot的启动场景

  • 如spring-boot-starter-web,会自动导入web环境所有的依赖

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

  • 想要使用什么功能,就只需要找到对应的启动器 starter

主程序
 
  • 注解

    • :注解和反射

    •  
    •  
          
      • 获取候选的配置

         
      • META-INF/spring.factories:自动配置的核心文件[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cE6IQv8y-1617241215055)(C:UsersadvancerAppDataRoamingTypora ypora-user-imagesimage-20210225232052715.png)]

    •  
    • 结论:springboot所有自动装配都是在启动的时候扫描并加载:spring.factories所有的自动配置类都在这里面,但是不一定生效,要判断条件是否成立,只要导入了对应的start,就有对应的启动器了,有了启动器,自动装配就会生效,然后配置成功。

      1. springboot在启动的时候,从类路径下/META-INF/spring.factories获取指定的值
      2. 将这些自动配置的类导入容器,自动配置就会生效,进行自动配置
      3. 以前我们需要自动配置的东西,springboot帮我们做了
      4. 整合javaEE,解决方案和自动配置的东西都在spring-boot-autoconfigure-2.2.0.RELEASE.jar这个包下
      5. 他会把所有需要导入的组件,一类名的方式返回,这些组件就会被添加到容器
      6. 容器中也会存在非常多的xxxAutoCofiguration的文件@Bean,就是这些类给容器中导入了这个场景所需要的所有组件,并自动配置。@Configuration,JavaConfig
      7. 有了自动配置类,免去了我们手动编写配置文件的工作
  • run

    • JavaConfig @Configuration(配置) @Bean(组件)

Docker:进程

关于springboot的理解

  1. 自动装配
  2. run(重构才会用到

springCloud 全面接管springMVC的配置

使用yaml文件

 
yaml可以给实体类赋值
 

application.yaml

其中还可以使用SPEL表达式获取值

 

不局限于pojo类 例如mysql的配置就可以使用

使用properties文件

 
 

javaConfig可以采用以上两种方式,绑定配置文件的值

**配置文件读取顺序:yml -> yaml -> properties,所以,如果都配置了同名的配置,以properties为准,因为后读取的会覆盖前面的。优先级:properties>yaml >yml **

对比

小结

1、@ConfigurationProperties只需要写一次即可 @Value则需要每个字段都添加

2、松散绑定:这个什么意思呢? 比如我的yml中写的last-name,这个和lastName是一样的, - 后面跟着的字母默认是大写的。这就是松散绑定。可以测试一下

3、JSR303数据校验 , 这个就是我们可以在字段是增加一层过滤器验证 , 可以保证数据的合法性

4、复杂类型封装,yml中可以封装对象 , 使用value就不支持

结论

配置yml和配置properties都可以获取到值 , 强烈推荐 yml

如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下 @value

如果说,我们专门编写了一个JavaBean来和配置文件进行一一映射,就直接@configurationProperties,不要犹豫

JSR303
 
  1. 常见参数
 

多环境配置以及文件位置

多环境

开发环境dev 测试环境test 生产环境pro

properties配置文件

我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml , 用来指定多个环境版本

例如

application-test.properties 代表测试环境配置

application-dev.properties 代表开发环境配置

但是Springboot并不会直接启动这些配置文件,它默认使用application.properties主配置文件

我们需要通过一个配置来选择需要激活的环境

 
yaml的多文档块

和properties配置文件中一样,但是使用yml去实现不需要创建多个配置文件,更加方便了 !

 

注意:如果yml和properties同时都配置了端口,并且没有激活其他环境 , 默认会使用properties配置文件的

文件位置

配置文件可以放到以下四个位置 并且有优先级区分

优先级:file:https://blog.csdn.net/qq_46658171/article/details/config > file: https://blog.csdn.net/qq_46658171/article/details/ > classpathhttps://blog.csdn.net/qq_46658171/article/details/config > classpathhttps://blog.csdn.net/qq_46658171/article/details/

自动配置原理

xxxAutoConfiguration中的注解
 

定义bean

下面是@Configuration里的一个例子

 

这个配置就等同于之前在xml里的配置

 

根据当前不同的条件判断,决定这个配置类是否生效

  • 一但这个配置类生效;这个配置类就会给容器中添加各种组件
  • 这些组件的属性是从对应的properties类中获取的,这些类里面的每一个属性又是和配置文件绑定的
  • 所有在配置文件中能配置的属性都是在xxxxProperties类中封装着
  • 配置文件能配置什么就可以参照某个功能对应的这个属性类
 
总结

1、SpringBoot启动会加载大量的自动配置类

2、我们看我们需要的功能有没有在SpringBoot默认写好的自动配置类当中

3、我们再来看这个自动配置类中到底配置了哪些组件(只要我们要用的组件存在在其中,我们就不需要再手动配置了

4、给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们只需要在配置文件中指定这些属性的值即可

**xxxxAutoConfigurartion:自动配置类;**给容器中添加组件

xxxxProperties:封装配置文件中相关属性

了解@Conditional

了解完自动装配的原理后,我们来关注一个细节问题自动配置类必须在一定的条件下才能生效

@Conditional派生注解(Spring注解版原生的@Conditional作用

作用:必须是@Conditional指定的条件成立,才给容器中添加组件,配置配里面的所有内容才生效

那么多的自动配置类,必须在一定的条件下才能生效;也就是说,我们加载了这么多的配置类,但不是所有的都生效了。

我们怎么知道哪些自动配置类生效

我们可以通过启用 debug=true属性;来让控制台打印自动配置报告,这样我们就可以很方便的知道哪些自动配置类生效

 

Positive matches:(自动配置类启用的:正匹配

Negative matches:(没有启动,没有匹配成功的自动配置类:负匹配

Unconditional classes: (没有条件的类

如果没有生效就需要导入所需要类的启动器

前端

模板

别人写好的,我们拿来改成自己需要的

框架

组件:自己动手组装拼接! bootstrap,Layui,semantic-ui

  • 栅格系统
  • 导航栏
  • 侧边栏
  • 表单

写一个网页大体步骤

  1. 前端:页面长什么样子:数据
  2. 设计数据库(数据库设计,难点
  3. 前端独立运行,独立化工程
  4. 数据决口如何对接:json,对象 all in one
  5. 前后端联调测试
1、开发一套自己的后台模板:工作必要
2、前端界面:至少能够通过前端框架,组合出来一个网站页面
  • index
  • about
  • blog
  • post
  • user
3、让这个网站能够独立运行

导入静态资源

存放文件夹

在文件夹resources下可以再建resouces static public三种文件夹来存放静态文件

访问优先级
  • 首先访问public文件夹下的,其次访问static下的,最后访问resources下的
  • 所以优先级顺序为resouces>static>public
小结
  1. 在springboot下可以使用以下方式处理静态资源
    • webjars(不常用) localhost:8080/webjars/
    • public, static, /**, resource localhost:8080/
  2. 优先级
    • resouces>static(默认)>public

首页

​ 在静态资源文件夹中添加index.html就可以自动进行访问

jsp, 使用模板引擎Thymeleaf

​ jsp成为过去流行技术,不利于前后端分离

使用模板引擎可以将静态页面进行动态结合

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ClN0s1os-1617241215059)(C:UsersadvancerAppDataRoamingTypora ypora-user-imagesimage-20210305130448942.png)]

添加thymeleaf启动器

需要注意版本是否出错

 
标准表达式

简单表达
  变量表达式: ${…}
  选择变量表达式: *{…}
  消息表达式: #{…}
  链接网址表达式@{…}
  片段表达式: ~{…}

字面
  文本文字:‘one text’,‘Another one!’,…
  号码文字:0,34,3.0,12.3,…
  布尔文字:true,false
  空字面: null
  文字标记:one,sometext,main,…
  文字操作
  字符串连接+
  文字替换: |The name is ${name}|

算术运算
  二元运算符+,-,*,/,%
  减号(一元运算符: -

布尔运算
  二元运算符:and,or
  布尔否定(一元运算符: !,not

比较和平等
  比较:>,<,>=,<=(gt,lt,ge,le
  等值运算符==,!=(eq,ne

条件运算符
  if-then: (if) ? (then)
  if-then-else: (if) ? (then) : (else)
  default: (value) ?: (defaultvalue)

特殊特征符
  无操作: _

所有这些功能都可以组合和嵌套,例
  'User is of type ’ + (user.isAdmin()?′Administrator′:(user.isAdmin()?′Administrator′😦{user.type} ?: ‘Unknown’))

例子
 
 
 
小结

只需要使用thymeleaf,只需要导入依赖即可。我们将html放入templates目录下即可

 

装配扩展SpringMVC

修改springboot的默认设置
方式一

通过webmvc的自动配置原理分析,通过源码探究,得出结论。springboot在自动配置很多组件的时候,先看容器中有没有自己配置的(如果用户自己配置@Bean),如果有就用用户配置的,如果没有就用自动配置的;如果有些组件可以存在多个,比如视图解析器,就将用户配置和自己默认的组合起来。

拓展springmvc dispatchservlet如果想自定义一些定制化功能,只要写这个组件,然后将他交给springboot,springboot会帮我们自动装配

 
方式二

编写一个@Configuration注解类,并且类型要为WebMvcConfigurer(接口,而且不能标注@EnableWebMvc注解

如果我们要扩展springmvc,官方建议我们这样做

 

如果标注了@EnableWebMvc注解,其中WebMvcAutoConfiguration.java中的@ConditionalOnMissingBean注解将会导致该类失效。

小结

在springboot中,有非常多的xxxConfiguration帮助我们进行扩展配置,只要看见了这个东西,我们就要注意了

拦截器

实现HandlerInterceptor接口
重写preHandle方法
 
在MyConfig中配置
 

是否从/static开始,是否静态资源自动被放过

国际化

创建配置文件
  1. 创建国际化文件夹:i18n

  2. 新建配置文件:xxx.properties, xxx_en_US.properties, xxx_zh_CN.properties

  3. 创建第二个文件时自动合并为Resource Bundle ‘xxx’

  4. 两种方式设置

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WwSd5Igm-1617241215061)(C:Users advancerAppDataRoamingTypora ypora-user-imagesimage-20210311210424741.png)]

html文件设置
 
  • 使用thymeleaf获取配置文件中的国际化配置

  •  
在html文件中添加中英文切换按钮
 
创建类实现LocaleResolver接口

默认AcceptHeaderLocaleResolver实现了LocaleResolve接口,可以根据这个类中重写的resolveLocale)方法中找到一定的逻辑。

重写接口中的方法resolveLocale(HttpServletRequest request)
 
在配置类中将这个类放入bean中
 

增删改查

提取公共页面
  • 提取
    • th:fragment=“sidebar”
  • 使用
    1. th:replace="~{commons/common::sidebar} 替换元素
    2. th:insert="~{commons/common::sidebar(active=‘main’)} 在元素中插入
    3. 如果要传参数,可以直接使用)传参,接受判断即可
列表循环展示
  • th:each=“emp:${allEmps}” 循环取值
  • 取属性
  1. 可以使用GetMapping进入到曾加页面
  2. 再通过PostMapping处理从前端获取到的信息
404界面
  1. 再templates下创建一个新文件夹error
  2. 将404页面、500页面放入该文件夹中,springboot会自动配置进去

JDBC

项目导入了如下的启动器
 
编写yaml配置文件连接数据库
 
直接使用

输出当前datasource类:HikariDataSource

HikariDataSource 号称 Java WEB 当前速度最快的数据源,相比于传统的 C3P0 、DBCP、Tomcat jdbc 等连接池更加优秀

 

Druid(重点

在配置好jdbc的基础上

导入依赖
 
配置yml配置

现在这些配置还不能生效

 
配置DruidConfig.java

配置这些之后可以使yml文件的上述配置生效

 

可以登录http://localhost:8080/druid/login.html来进行后台管理

Mybatis(重点

导入相关依赖
 

在有实体类pojo的前提下

映射接口与映射文件
创建接口

在com.ljq.mapper中创建BookMapper.java

 
创建映射配置文件

在resource文件夹下BookMapper.xml

 
整合mybatis

在配置文件application.yml中添加语句

 
调用dao层

BookController.java