今日分享--整理Springboot最全笔记,你确定不来康康?

Springboot

简介

简化Spring应用开发的一个框架;
整个Spring技术栈的一个大整合;
J2EE开发的一站式解决方案;

微服务

微服务:架构风格(服务微化)
一个应用应该是一组小型服务;可以通过HTTP的方式进行互通;
单体应用:ALL IN ONE
微服务:每一个功能元素最终都是一个可独立替换和独立升级的软件单元;

部署

<!‐‐ 这个插件,可以将应用打包成一个可执行的jar包;‐‐>
<build>
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring‐boot‐maven‐plugin</artifactId>
		</plugin>
	</plugins>
</build>

将这个应用打成jar包,直接使用java -jar的命令进行执行;

启动器

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring‐boot‐starter‐web</artifactId>
</dependency>

Spring Boot将所有的功能场景都抽取出来,做成一个个的starters(启动器),只需要在项目里面引入这些starter
相关场景的所有依赖都会导入进来。要用什么功能就导入什么场景的启动器

注解

@SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用
@SpringBootApplication
public class HelloWorldMainApplication {
	public static void main(String[] args) {
	// Spring应用启动起来
		SpringApplication.run(HelloWorldMainApplication.class,args);
	}
}

@Controller
@ResponseBody
@RequestMapping("/hello")
@Controller//控制层
public class HelloController {
	@ResponseBody //不跳转 return 数据
	@RequestMapping("/hello") //配置url地址
	public String hello(){
		return "Hello World!";
	}
}
@SpringBootConfiguration:Spring Boot的配置类;
@Bean给容器中添加组件
@Configuration
public class MyAppConfig {
    //将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名
    @Bean
    public HelloService helloService02(){
        System.out.println("配置类@Bean给容器中添加组件了...
                ");
        return new HelloService();
    }
}
@Configuration:配置类上来标注这个注解;指明当前类是一个配置类;就是来替代之前的Spring配置文件
配置类 ----- 配置文件;配置类也是容器中的一个组件;@Component
编写一个配置类(@Configuration),是WebMvcConfigurerAdapter类型;不能标注@EnableWebMvc;
所有的SpringMVC的自动配置都失效了@EnableWebMvc
原理:@EnableWebMvc将WebMvcConfigurationSupport组件导入进来;
导入的WebMvcConfigurationSupport只是SpringMVC最基本的功能;
@Component//添加到容器
@ConfigurationProperties(prefix ="person")//配置文件为pojo实体类赋值
/**
* 将配置文件中配置的每一个属性的值,映射到这个组件中
* @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
* prefix ="person":配置文件中哪个下面的所有属性进行一一映射
* 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
*/
//实体类中多用
@Validated //开启验证  @Email 验证邮箱格式
@PropertySource(value = {"classpath:person.properties"})
@Autowired 自动装配
//指定这是一个操作数据库的mapper
@Mapper
//使用MapperScan批量扫描所有的Mapper接口;
@MapperScan(value ="com.atguigu.springboot.mapper")
@Repository Dao接口

配置文件版:

mybatis:
config‐location: classpath:mybatis/mybatis‐config.xml 指定全局配置文件的位置
mapper‐locations: classpath:mybatis/mapper/*.xml 指定sql映射文件的位置

了解的注解

@Import(AutoConfigurationPackages.Registrar.class):
Spring的底层注解@Import,给容器中导入一个组件;导入的组件由
AutoConfigurationPackages.Registrar.class;
@EnableAutoConfiguration:开启自动配置功能;
@AutoConfigurationPackage:自动配置包
@PropertySource:加载指定的配置文件;
xxxAutoConfiguration类都是容器中的一个组件,都加入到容器中;用他们来做自动配置;

日志

SpringBoot选用 SLF4j和logback;

//记录器
Logger logger = LoggerFactory.getLogger(getClass());
//日志的级别;
//由低到高 trace<debug<info<warn<error
# 可以指定完整的路径;
#logging.file=G:/springboot.log
# 在当前磁盘的根路径下创建spring文件夹和里面的log文件夹;使用 spring.log 作为默认文件
logging.path=/spring/log

快速创建项目

IDEA:使用 Spring Initializer快速创建项目

  1. 导入web依赖
  2. 编写第一个程序
<!--导入web依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
@RestController
@RequestMapping("/hello")
public class HelloController {
    @RequestMapping("/one")
    public String hello(){
        return "hello Word";
    }
}
#修改端口号
server.port=600

原理

结论:

  1. SpringBoot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值
  2. 将这些值作为自动配置类导入容器 , 自动配置类就生效 , 帮我们进行自动配置工作;
  3. 整个J2EE的整体解决方案和自动配置都在springboot-autoconfigure的jar包中;
  4. 它会给容器中导入非常多的自动配置类 (xxxAutoConfiguration), 就是给容器中导入这个场景需要的所有组件 , 并配置好这些组件 ;
  5. 有了自动配置类 , 免去了我们手动编写配置注入功能组件等的工作;

配置文件

properties配置文件在idea中默认utf-8可能会乱码

在这里插入图片描述
在这里插入图片描述

<!‐‐导入配置文件处理器,配置文件进行绑定就会有提示‐‐>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring‐boot‐configuration‐processor</artifactId>
	<optional>true</optional>
</dependency>

配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好;

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

  • application.properties

    • 语法结构 :key=value
  • application.yml

    • 语法结构 :key:空格 value
    • k:(空格)v:表示一对键值对(空格必须有);
      以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的

**配置文件的作用 :**修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好了;

对象的属性和值得关系

student:
    name: LONG
    age: 18

行内写法

student: {name: qinjiang,age: 3}

数组( List、set )

用 - 值表示数组中的一个元素

pets:
 - cat
 - dog
 - pig

行内写法

pets: [cat,dog,pig]

说明:语法要求严格!

1、空格不能省略

2、以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。

3、属性和值的大小写都是十分敏感的。

yaml文件更强大的地方在于可以给我们的实体类直接注入匹配值!

@Component 
实体类加载到spring中
@ConfigurationProperties作用:
//将配置文件中配置的每一个属性的值,映射到这个组件中;
//告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
//参数 prefix = “person”: 将配置文件中的person下面的所有属性一一对应
@Component //注册bean
person:
  name: LONG
  age: 18
  happy: false
  birth: 2000/01/01
  maps: {k1: v1,k2: v2}
  dog:
    name: 哈巴

JSR303校验

@NotNull(message="名字不能为空")
private String userName;
@Max(value=120,message="年龄最大不能查过120")
private int age;
@Email(message="邮箱格式错误")
private String email;

空检查
@Null       验证对象是否为null
@NotNull    验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank   检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty   检查约束元素是否为NULL或者是EMPTY.
    
Booelan检查
@AssertTrue     验证 Boolean 对象是否为 true  
@AssertFalse    验证 Boolean 对象是否为 false  
    
长度检查
@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内  
@Length(min=, max=) string is between min and max included.

日期检查
@Past       验证 Date 和 Calendar 对象是否在当前时间之前  
@Future     验证 Date 和 Calendar 对象是否在当前时间之后  
@Pattern    验证 String 对象是否符合正则表达式的规则
@Data
@NoArgsConstructor
@AllArgsConstructor
@Component
@ConfigurationProperties(prefix = "person")
@Validated//数据校验
public class Person {
    @NotNull
    private String name;
    private Integer age;
    private Boolean happy;
    private Date birth;
    private Map<String,Object> map;
    private Dog dog;
    @Email
    private String email;
}

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

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

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

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

在这里插入图片描述

多环境配置

server:
  port: 8081
#选择要激活那个环境块
spring:
  profiles:
    active: prod

---
server:
  port: 8083
spring:
  profiles: dev #配置环境的名称


---

server:
  port: 8084
spring:
  profiles: prod  #配置环境的名称

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

优先级1:项目路径下的config文件夹配置文件
优先级2:项目路径下配置文件
优先级3:资源路径下的config文件夹配置文件
优先级4:资源路径下配置文件

静态资源

四个目录存放的静态资源可以被我们识别

"classpath:/META-INF/resources/"
"classpath:/resources/"
"classpath:/static/"
"classpath:/public/"

自定义静态资源路径

spring.resources.static-locations=classpath:/coding/,classpath:/Long/

Thymeleaf模板引擎

导入依赖

<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring5</artifactId>
</dependency>
<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-java8time</artifactId>
</dependency>
//templates目录下的所有页面,只能通过Controller来跳转!
//这个需要模板引擎的支持
@Controller
public class IndexController {
    @RequestMapping("/test")
    public String index(){return "index";}
}

跳转原理:视图解析器

不能再测试下建类,失效!

在这里插入图片描述

//templates目录下的所有页面,只能通过Controller来跳转!
//这个需要模板引擎的支持
@Controller
public class IndexController {
    @RequestMapping("/t1")
    public String test1(Model model){
        model.addAttribute("msg","HELLO Springboot!");
        //classpath:/templates/test.html
        return "test";
    }
    @RequestMapping("/t2")
    public String test2(Map<String,Object> map){
        //存入数据
        map.put("msg","<h1>Hello</h1>");
        map.put("users", Arrays.asList("姓名","Long"));
        //classpath:/templates/test.html
        return "test";
    }
    }
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>是福网</title>
</head>
<body>
<h1>测试页面</h1>

<div th:text="${msg}"></div>
<!--不转义-->
<div th:utext="${msg}"></div>

<!--遍历数据-->
<!--th:each每次遍历都会生成当前这个标签:-->
<h4 th:each="user :${users}" th:text="${user}"></h4>

<h4>
    <!--行内写法-->
    <span th:each="user:${users}">[[${user}]]</span>
</h4>

</body>
</html>

//classpath:/templates/test.html
return “test”;
}
}


```html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>是福网</title>
</head>
<body>
<h1>测试页面</h1>

<div th:text="${msg}"></div>
<!--不转义-->
<div th:utext="${msg}"></div>

<!--遍历数据-->
<!--th:each每次遍历都会生成当前这个标签:-->
<h4 th:each="user :${users}" th:text="${user}"></h4>

<h4>
    <!--行内写法-->
    <span th:each="user:${users}">[[${user}]]</span>
</h4>

</body>
</html>

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Steve_hanhaiLong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值