京淘项目总结day02

1 SpringBoot高级用法

1.1 配置文件说明

1.1.1 关于properties

(1)语法:K-V结构(key=value)
(2)数据结构:默认是String,注意不要加多余的引号。
(3)字符数据类型:properties的默认加载编码格式为:ISO-8859-1。
(4)缺点:所有的key都必须手动配置,没办法复用,所以引入了yml配置。

server.port=8080

1.1.2 关于yml

(1)语法:K-V结构,写法上为:key:value,实质上为:key=value。
key:value中间使用(:+空格)分隔。key与key之间有父子级关系,所以写的时候要注意缩进项。
(2)字符数据类型:yml默认的格式是UTF-8编码。

server:
  port: 8090

1.2 SpringMVC的调用流程

1.2.1 核心组件

(1)前端控制器 所有请求的中转站
(2)处理器映射器 将用户的请求与执行的业务方法进行映射(绑定)
(3)处理器适配器
(4)视图解析器

1.2.2 调用流程

在这里插入图片描述

1.3 关于配置文件的赋值操作

1.3.1 案例

package com.jt.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;

@RestController    //@ResponseBody 将返回值转化为json串使用 程序将不会执行视图解析器 直接返回
//@Controller          //String类型/moduleAndView
public class RedisController {

    private String host = "127.0.0.1";
    private Integer port = 6379;

    //如果使用RestController 返回值为String类型则返回字符串本身
    //如果返回的是一个对象 则结果必然是该对象的JSON数据.
    @RequestMapping("/getMsg")
    public String getMsg(){

        return host + ":" + port;
    }
}

1.3.2 @Value注解属性赋值

需求: 有时对象中的属性的值可能会发生变化,如果直接写死到代码中可能导致耦合性高. 能否利用配置文件方式动态的为属性赋值。

package com.jt.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController             //@ResponseBody 将返回值转化为json串使用 程序将不会执行视图解析器 直接返回
                             //String类型/moduleAndView
public class RedisController {
    /**
     * 实现思路:
     *   如果可以从容器中获取数据的化,直接赋值给属性.则可以实现解耦
     * 如何实现:
     *      注解实现: @Value("${配置文件的key}")
     * 表达式:  spel 表达式
     */
    @Value("${redis.host}")
    private String host;
    @Value("${redis.port}")
    private Integer port;
    //如果使用RestController 返回值为String类型则返回字符串本身
    //如果返回的是一个对象 则结果必然是该对象的JSON数据.
    @RequestMapping("/getMsg")
    public String getMsg(){
        return host+":"+port;
    }
}
redis:
  host: 192.168.1.100
  port: 6379

1.3.3 用properties文件为属性赋值

由于YML配置文件一般都是配置第三方的整合的信息,如果将业务的数据添加到YML中则不规范.最好将业务的操作添加到properties文件中。
添加配置文件:
在这里插入图片描述
编辑RedisPro配置文件

package com.jt.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
//需要通过spring容器加载配置文件,并且以utf-8 的格式进行加载
@PropertySource(value = "classpath:properties/redis.properties",encoding="utf-8")
public class RedisProController {
     @Value("${redis.pro.host}")
    private String proHost;
    @Value("${redis.pro.port}")
    private Integer proPort;

    @RequestMapping("doPro")
    public String doPro(){
        return proHost+":"+proPort;
    }
}

1.4 SpringBoot环境切换

1.4.1 业务需求

业务场景:
员工是外包人员,经常性的需要往返公司和甲方,进行代码调试时由于位置不同所以服务器IP地址必然不同.如果每次换环境都必须重新编辑IP地址和端口等数据,必定繁琐能否优化??

1.4.2 业务实现-指定多个环境

注意事项:无论什么样的环境,配置的个数都是相同的,只是值不同。

#环境切换
#该配置文件,当spring容器启动时加载
spring:
  profiles:
    active: dev    #默认加载

#环境分割线(------  
#定义开发环境
spring:
  profiles: dev

server:
  port: 8090
#配置Redis节点信息
redis:
  host: 192.168.1.100
  port: 6379
#如果需要多环境配置则将yml环境分割
---
spring:
  profiles: pro
server:
  port: 1314
redis:
  host: 10.0.1.100
  port: 6379

1.5 添加热部署配置

1.5.1 热部署简介

Spring Boot 开发者为Spring Boot项目中提供了一个热部署(spring-boot-devtools)模块,支持项目的热部署(修改了某些资源以后无需重启服务),以提高开发效率.其底层其实是借助了两个类加载器做了具体实现,一个类加载器加载不变class,一个类加载器加载可能变化类,以提供类的热部署性能。

1.5.2 热部署简配置

(1)添加jar包文件

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

依赖下载以后,可重启reload项目,然后当我们修改了src/main/java目录下的java文件或修改了src/main/resources目录下的配置文件时,默认都会重启你的web服务器,但是修改了测试类或html文件不会自动重启和部署。

(2)IDEA工具配置
组合键:Ctrl + Shift + Alt + /
在这里插入图片描述
(3)选择编译构建配置
在这里插入图片描述
(4)启动自动编译
在这里插入图片描述

1.6 SpringBoot整合Mybatis

1.6.1 编辑yml配置文件

server:
  port: 8090
  servlet:
    context-path: /
spring:
  datasource:
    #驱动版本问题 高版本需要添加cj关键字  一般可以省略
    #driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: root

mybatis:
  #别名包定义 Mapper的resultType中只需要写类名 之后自动拼接即可
  type-aliases-package: com.jt.pojo
  #加载指定的xml映射文件
  mapper-locations: classpath:/mybatis/mappers/*.xml
  #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: true

1.6.2 关于SQL连接说明

(1)serverTimezone=GMT%2B8 %2B 代表 "+"号 表示时区
(2)useUnicode=true&characterEncoding=utf8 指定编码为utf-8
(3)autoReconnect=true& 如果程序连接数据库中途断掉时是否重连.
(4)allowMultiQueries=true 是否允许批量操作
eg: 要求一次入库3张表数据… 要求用一行sql实现该操作

1.6.3 关于Mapper.xml讲解

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace:一般与接口的路径一致-->
<mapper namespace="com.jt.mapper.UserMapper">
	
	<!--<select id="findAll" resultType="User">
		select * from user
	</select>-->

	<!--
		业务需求:
			要求实现数据库的查询,但是数据库表字段与对象的属性不一致.
		eg:
			user表(字段 user_id,user_name,user_age......)
			User对象(属性 userId,userName,userAge)
		说明: 引入驼峰映射规则.
		执行顺序: 1获取user_id~~~~去掉多余的"_"字母大写 ~~~~userId
				 实现数据的映射.
		注意事项: 如果使用驼峰规则映射则必须满足规范..
	-->
	<!--<select id="find" resultType="" resultMap="手动封装"></select>-->

</mapper>

1.6.4 关于@AutoWired注解的属性报错问题

在这里插入图片描述

1.6.5 关于@Mapper注解的优化

由于每个接口都需要添加Mapper注解导致代码繁琐.可以采用包扫描的方式动态导入 代码如下

@SpringBootApplication
@MapperScan("com.jt.dao") //主要告诉mapper的包路径,会自动的完成包扫描
public class SpringbootDemo2MybatisApplication {

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

}

1.7 Lombok配置

1.7.1 概述

Lombok是一个第三的Java库,它会自动插入编辑器和构建工具中,Lombok提供了一组有用的注释,用来告诉编译过程中的编译工具,在源代码编译成字节码的过程中,在字节码中添加一些量样板代码。

1.7.2 常用注解分析

@Setter 用于为描述的类生成setter方法,不包含final修饰属性。
@Getter 用于为描述的类生成getter方法。
@ToString 用于为描述的类添加toString方法。
@EqualsAndHashCode 用于为描述的类,生成hashCode和equals方法。
@NoArgsConstructor 用于为描述的类生成无参的构造方法。
@AllArgsConstructor 用于为描述的类生成包含类中所有字段的构造方法。
@Data用于为描述的类生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法。
@Slf4J 用于为描述的类添加一个日志属性对象。

1.7.3 安装配置

(1)添加jar包

  <!--引入插件lombok 自动的set/get/构造方法插件  -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

(2)Lombok案例

package com.jt.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

@Data  //动态生成get/set/toString/equals等方法
@Accessors(chain = true)   //开启链式加载结构(重构了set方法可以连续打点调用)
@NoArgsConstructor     //无参构造   必须加
@AllArgsConstructor     //全参构造
public class User {
    private Integer id;
    private String name;
    private Integer age;
    private String sex;
}

(3)安装插件
在这里插入图片描述
(4)启动注解处理,如图所示
在这里插入图片描述

(5)lombok面试题
问题: java项目开发完成之后需要在Linux系统中部署项目. 问题:Linux环境中是否需要单独安装LomBok插件???
答:不需要。

解析: LOMBOK插件编译器有效 xxx.java文件----编译-----xxx.class 动态的生成set/get/toString等方法添加到.class文件中即可. Linux中运行的jar包是.class文件的集合 已经有了get/set方法.所以不需要引入插件。

1.8 SpringBoot工程的健康监控实现

1.8.1 简述

Spring Boot 中actuator模块提供了健康检查,审计、指标收集,HTTP跟踪等功能,可以帮助我们更好的管理和跟踪springboot项目。

1.8.2 配置实现

(1)添加依赖

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

1.8.3 健康监控启动分析

(1)启动项目,在浏览器中输入如下地址:(SpringBoot默认打开的监控选项有限)

http://localhost/actuator

(2)假如希望查看更多actuator选项,可以在spring boot中配置文件

application.properties中添加如下语句:

management.endpoints.web.exposure.include=***

然后,重启服务器,基于访问 http://localhost/actuator

1.9 如何理解SpringBoot技术?

1.9.1 SpringBoot背景分析

JAVAEE应用体系中繁重的配置、低下的开发效率、高难度的三方集成,复杂的部署流程等等一直被开发人员所诟病。即使是使用Spring这样的轻量级的资源整合框架,在实现其相对比较多的资源整合时,依旧需要大量的手动依赖管理,复杂的XML配置(还经常没有提示)。还有就是现在的软件生态应用也已经形成一定的规模,系统架构正在从单体架构,分布式架构,跨越到微服务架构。随着整个架构体系的变化,企业对技术的要求也在变化,现在的企业更注重技术的开箱即用,更注重技术在生态圈中的深度融合,更注重轻量级的运维。由此由此spring boot诞生。

1.9.2 SpringBoot要解决什么问题

Spring Boot是由Pivotal团队提供的全新的Java软件开发框架(很多人现在把它理解为一个脚手架),其设计目的是用来简化Spring项目的初始搭建以及开发过程。该框架使用了特定的注解方式来进行配置,从而使开发人员不再需要大量的xml配置。不再需要大量的手动依赖管理。Spring Boot基于快速构建理念,通过约定大于配置,开箱即用的方式,希望能够在蓬勃发展的快速应用开发领域成为其领导者。

1.9.3 SpringBoot有哪些核心的关键特性

(1)起步依赖(Starter Dependency)。
(2)自动配置(Auto Configuration)。
(3)健康检查(Actator)-监控。
(4)嵌入式服务(Tomcat,Jetty)。

©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页