SpringBoot

运行方式

  • 打包,执行package命令,生成jar包

  • 在jar包目录下,执行cmd,

  • 输入java -jar jar包名

  • 注意:如果不能运行,则重新配置java环境:Java home , classpass ,path

SpringBoot概述

  • 简化Spring应用的初始搭建以及开发过程

  • SpringBoot优点:

    1. 自动配置 (简化工程相关配置)

    2. 起步依赖(简化依赖配置)

    3. 辅助功能(内置服务器器,..)

  • parent:依赖管理

    1. 开发SpringBoot程序要继承Spring-boot-starter-parent

    2. Spring-boot-starter-parent 定义了若干个依赖管理

    3. 继承parent模块可以避免使用相同技术时出现的以来版本冲突

    4. 继承parent的形式也可以采用引入的形式实现效果

  • starter: 依赖

    1. 定义了当前项目的所有依赖,以达到减少依赖配置的目的

       

  • 引导类

    1. SpringBoot工程提供引导类用来启动程序

    2. SpringBoot工程启动后创建并初始化Spring容器

  • 内嵌tomcat

 

启动命令行

  • 可以临时加以参数

  • java -jar jar包名 --spring.profiles.active=pro
  • java -jar jar包名 --server.port=81

基础配置

  • SpringBoot中4级配置文件

    1级:file :config/application.yml 【最高 jar包所在目录】

    2级:file :application.yml 工程目录的同级目录配置

    3级:classpath:config/application.yml

    4级:classpath :application.yml 【最低】

  • 作用:

    • 1级与2级留做系统打包后的设置通用属性

    • 3级与4级留做系统开发阶段设置通用属性

  • 配置文件间的加载优先级

    • properties最高

    • yml

    • yaml最低

  • 不同配置文件中相同配置按照加载优先级相互覆盖,不同配置文件中不同配置全部保留

隐藏文件或者文件夹

创建SpringBoot太卡了,换成阿里云的

辅助功能

  • 内嵌Tomcat服务器是SpringBoot辅助功能之一

  • 内嵌Tomcat工作原理是将Tomcat服务器作为对象运行,并将该对象交给Spring容器管理

  • 变更内嵌服务器思想是去除现有服务器,添加全新的服务器

  • Jetty比Tomcat更轻量级,可扩展性更强(相较于Tomcat),谷歌应用引擎(GAE)已经全面切换位Jetty。

  • 在web起步依赖环境中,排除Tomcat起步依赖

  • 添加Jetty起步依赖,版本由SpringBoot的starter控制

  • SprigBoot内置服务器

    • tomcat 负载了若干较重的组件

    • jetty 更轻量级,负载性能远不及tomcat

    • undertow 负载性能勉强跑赢tomcat

复制模块

  • 在工作空间中复制对应工程,并修改名称

  • 删除与Idea相关配置文件,仅保留src和pom.xml文件

  • 修改pom.xml文件中的artifactId与新工程/模块名相同

  • 删除name标签

  • 保留备份

yml 文件中引用变量

  • 单一属性:用@value注解

  • 在配置文件中可以使用${属性名}方式引用属性值

  • 如果属性中出现特殊字符,可以使用双引号包裹起来作为字符解析

  • 读取全部属性数:

    //自动装配 将所有的数据封装到一个对象
    @Autowired
    private Environment env;
    env.getProperty("...")
  • 读取部分属性

    1. 定义一个实体类,和yml中属性对应

    2. 添加让注解让spring管理@Component

    3. 添加一个读取yml中属性的注解@ConfigurationProperties(prefix=“datasource”)

    4. 创建对象,自动装配,

    5. 读取就ok

整合Mybatis

  • 导入对应的starter

  • mysql驱动依赖

  • yml配置中配置数据源datasource 连接的相关信息

  • dao层接口添加@Mapper

  • 注意问题:mysql5和8的区别 :url ?serverTimezone=UTC

  • 驱动类过时,提醒使用 com.mysql.cj.jdbc.Driver

整合Mybatis-pius

  • 不知到坐标:mvnrepository.com --->mybatis plus

  • 手动添加导入Mybatis-Plus坐标:mybatis-plus-boot-starter

  • 继承BatisMapper

  • 添加@Mapper

整合druid

  • 导入坐标

  • 添加配置 :druid专用

    spring:
      datasource:
          druid:
            driver--class-name:
            url:
            username:
            password:

     

    整合任意第三方技术

  • 导入对应的starter

  • 配置对应的设置或者采默认配置

 

基于SpringBoot的SSMP整合案例

 

  • 业务层

    1. MyBatis-plus 提供的接口 Iservice<Book>

    2. ServiceImpl<BookDao, Book>  【dao层接口,实体类】

SpringBoot打包插件

  • 使用SpringBoot提供的maven插件可以将工程打成可执行的jar包

    <build>
      <plugins>
          <plugin>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-maven-plugin</artifactId>
          </plugin>
      </plugins>
  </build>

命令行启动常见问题及解决方案

  • Windowns端口被占用

    # 查询端口
    netstat -ano
    #查询指定端口
    netstat -ano |findstr "端口号"
    #根据进程PID查询进程名称
    tasklist |findstr "进程PID号"
    #根据PID杀死任务
    taskkill /F /PID "进程PID号"
    #根据进程名称杀死任务
    taskkill -f =t -im "进程名称"

    自定义配置文件

  • --spring.config.name=file名

  • --spring.config.location=classpath:/file名

  • --spring.config.location=classpath:/file1名,classpath:/file2名

    屏幕截图 2022-07-04 133256

 

多环境开发

  • yml


#多环境开发
spring:
profiles:
  active: dev

---
server:
port: 80
#开发环境
spring:
profiles: dev

---

server:
port: 81
#生产环境
spring:
profiles: pro

---

server:
port: 82
#测试环境
spring:
profiles: test

多环境开发独立配置文件书写技巧

spring:
profiles:
    active: dev
    group:
      "dev": devDB,devRedis,devmvc
      "pro": proDB,proRedis,promvc
      "test": testDB,testRedis,testmvc

 

maven 覆盖idea的配置

需要重新编译compile,才会生效

日志基础操作

  • 日志作用:

    1. 编程期调试代码

    2. 运营其记录信息

      *记录日常运营重要信息

      *记录应用报错信息

      *记录运维过程数据(扩容,宕机,报警)

    private static final Logger log = LoggerFactory.getLogger(BookController.class);

   @GetMapping
   public String getById(){
       log.debug("debug...");
       log.error("error...");
       log.warn("warn...");
       log.info("info...");
       return "'dream':'world'";
  }

.yml
#日志输出
logging:
 level:
 

root: info

用这个

  • 简化开发

    1. 使用lombok提供的注解@Slf4j 简化开发,减少日志对象的声明操作

日志输出格式

  • 设置日志输出格式

    logging:
    pattern:
      console: "%d %clr(%p) --- [%16t] %clr(%-40.40c){cyan} : %m %n"

日志文件

logging:
#设置日志文件
  file:
   #日志名
    name: server.log
  logback:
    rollingpolicy:
     #设置大小
        max-file-size: 4KB
     #设置格式
        file-name-pattern: server.%d{yyyy-MM-dd}.%i.log

启动热部署

  • 开发者工具坐标

     <!--热部署:开发者工具-->
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-devtools</artifactId>
          </dependency>
  • 激活热部署:Build--->Build Project :Ctrl+F9

  • 热部署仅仅加载当前开发者自定义开发的资源,不加载jar资源

  • .yml

      #设置不参与热部署的文件
    devtools:
      restart:
        exclude: static/**,bak/**

     

自动热部署

  • Build,Excution,Deployment-->Compiler-->勾上Build project automatically

  • Advanced Settings --->Compiler --->勾上Allow

关闭热部署

devtools:
  restart:
    exclude: static/**
     #关闭热部署
    enabled: false
package com.yang;

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

@SpringBootApplication
public class HotApplication {

  //启动类中添加
   public static void main(String[] args) {
       //层级更高的,关闭热部署
       System.setProperty("devtools.restart. enabled","false");
       SpringApplication.run(HotApplication.class, args);
  }

}

EnableConfigurationProperties

  • @EnableConfigurationProperties 注解可以将@ConfigurationProperties对应的类加入Spring容器中

  • @EnableConfigurationProperties 和@Component不能同时使用

  • 解除使用@ConfigurationProperties注释警告

  • <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-confguration-processor</artifactId>
    </dependency>

常用的计量单位

  • SpringBoot支持的JDK8提供的时间与空间的计量单位

  • //单位
    @DurationUnit(ChronoUnit.MINUTES)
    private Duration serverTimeOut;
    //单位
    @DataSizeUnit(DataUnit.MEGABYTES)
    private DataSize dataSize;

     

     

  •