Spring Boot初学

SpringBoot概述

spring springmvc springboot的关系
  • spring boot就是一个大框架里面包含了许许多多的东西,其中spring就是最核心的内容之一,当然就包含spring mvc
  • spring mvc 是只是spring 处理web层请求的一个模块。

因此他们的关系大概就是这样:
spring mvc < spring < springboot

Spring Boot

Spring Boot对Spring的缺点进行的改善和优化,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目周期

Spring 的缺点:配置繁重

简介
  • 简化spring应用开发的框架
  • 整个spring技术栈的整合
  • J2EE 一站式解决方案
微服务
  • 单体服务(all in one
    • 一个项目包含所有功能的应用程序
  • 微服务
    • 微服务是一种系统架构的设计风格,主旨是将原本复杂的系统拆分成多个独立的小型服务,每个服务维护自身的业务逻辑、数据处理和部署,服务与服务之间通过简单的通信协议进行通信 (比如留下的 restful API),不要求每一个微服务使用同一种变成语言编写。
    • 现代开发模式正在由单体服务转向微服务这种开发模式
    • Java 微服务框架普遍使用Spring Cloud,微服务将系统拆分成多个小型服务,它就是基于 Spring Boot做的。
springboot的优点
  • 为基于Spring的开发提供更快的入门体验
  • 开箱即用,没有代码生成,也无需XML配置。同时也可以修改默认值来满足特定的需求
  • 提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等
  • Spring Boot不是对Spring功能上的增强,而是提供了一种快速使用Spring的方式
核心功能
  • 起步依赖

    • 起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。

    • 简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。

  • 自动配置

    • Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个。该过程是Spring自动完成的。

SpringBoot搭建

使用IDEA快速搭建 Spring Boot项目
image-20211207221245930
  • 创建一个空项目【相当于 eclipse 里面的工作空间】
  • 项目里面添加一个 Module 选择 Spring Initializr
  • 设置 GAV 坐标和 pom 配置信息
  • 选择 版本和依赖
  • 创建完成 等待导入依赖

​ 注意:新创建的类一定要位于 …Application同级目录或者下级目录,否则 SpringBoot 加载不到。

入门案例研究
项目结构
  • static:存放静态资源 如css,js,图片等
  • templates:存放 web 页面的模板
  • application.properties、application.yml 存放依赖模块的配置信息 默认空 如 spring、springmvc、mybatis、redis等
  • .mvn|mvnw|mvnw.cmd:使用脚本操作执行 maven 相关命令,可删除
  • .gitignore:使用版本控制工具 git 的时候,设置一些忽略提交的内容,可删除
  • …Application.java:SpringBoot 程序执行的入口,执行该程序中的 main 方法
pom 文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!--
    该POM继承了SpringBoot 框架的一个父项目spring-boot-starter-parent,所有自
    己开发的 Spring Boot 都必须的继承spring-boot-starter-parent。
    父工程的作用是统管理Spring Boot应用里面的所有依赖版本
    以后我们导入依赖默认是不需要写版本
-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <!--当前项目的 GAV 坐标-->
    <groupId>com.eshop</groupId>
    <artifactId>eshop-th</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <!--maven 项目名称,可以删除-->
    <name>eshop-th</name>

    <!--maven 项目描述,可以删除-->
    <description>eshop-th</description>

    <!--maven 属性配置,可以在其它地方通过${}方式进行引用-->
    <properties>
        <java.version>11</java.version>
    </properties>

    <dependencies>
        <!-- thymeleaf模板引擎依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <!--
        SpringBoot 框架 web 项目起步依赖,通过该依赖自动关联其它依赖,不需要我们一
        个一个去添加jar包了。
        -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--SpringBoot 框架的测试起步依赖,例如:junit 测试-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- mybatis + mysql -->
        <!--MyBatis 整合 SpringBoot 的起步依赖-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>
        <!--MySQL 的驱动依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
    </dependencies>

    <build>
        <!--
        SpringBoot 提供的打包编译等插件
        这个插件,可以将应用打包成一个可执行的jar包
        将这个应用打成jar包,直接使用java -jar的命令进行执行;
        -->
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
        <resources>
            <!-- 配置 mapper文件的路径 加载到资源 -->
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
    </build>
</project>

  • 父项目:统一管理 jar 包的版本

    <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.6.1</version>
            <relativePath/> <!-- lookup parent from repository -->
    </parent>
    直接点进去,他的父项目是:
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>2.6.1</version>
    </parent>
    

​ 以后我们导入依赖默认是不需要写版本;(没有在dependencies里面管理的依赖还是需要声明版本号的)

  • 启动器:导入依赖的 jar 包

    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    • spring-boot-starter是spring-boot启动器,spring‐boot‐starter‐web帮我们导入了web模块 正常运行所依赖的jar包;
    • Spring Boot将所有的功能都抽取出来,做成一个个的starters(启动器),只需要在项目里面 引入这些starter 相关功能的所有依赖都会导入进来。要用什么功能就导入什么功能的启动器
主程序类,主入口类
package com.eshop;

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

@SpringBootApplication
public class EshopThApplication {
    public static void main(String[] args) {
        SpringApplication.run(EshopThApplication.class, args);
    }
}
  • @SpringBootApplication注解标注在某个类上,说明这个类是SpringBoot的主配置类, SpringBoot 就应该运行这个类的main方法来启动SpringBoot应用;
  • 将主配置类(@SpringBootApplication标注的类)所在包及下面所有子包里面的所有组件扫描到 Spring容器
配置文件、加载顺序
开启配置文件注释
<!‐‐导入配置文件处理器,配置文件进行绑定就会有提示‐‐>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring‐boot‐configuration‐processor</artifactId>
	<optional>true</optional>
</dependency>
配置文件和加载顺序
  • 默认的:application.properties,初始里面是空的

    • 后面的 application-dev.properties:另一个配置文件 在默认文件开启使用

    • # 服务端口
      #server.port=9091
      # 开启 dev 的这个配置文件
      spring.profiles.active=dev
      
  • yml格式的

    • 这是一种新兴的格式 注意空格 使用和上面默认的差不多 但是默认的优先级高于这个

    • spring:
          datasource:
              url: jdbc:mysql://localhost:3306/boot_crm?serverTimezone=UTC
              username: root
              password: 123
              driver-class-name: com.mysql.cj.jdbc.Driver
      
  • 多环境配置

    • 在主文件激活

      激活开发环境
      #spring.profiles.active=dev
      #激活生产环境
      #spring.profiles.active=product
      #激活测试环境
      spring.profiles.active=test
      
    • 其它文件的命名方式

image-20211207225236729

日志框架、日志配置

日志概述
基础介绍

市面上常见的日志框架有很多。通常情况下,日志是由一个抽象层+实现层的组合来搭建的,而用户通常来说不应该直接使用具体的日志实现类,应该使用日志的抽象层。

抽象层:JCL(Jakarta Commons Logging)、SLF4j(Simple Logging Facade for Java)、jboss-logging
实现层:Log4j 、JUL(java.util.logging)、Log4j2、Logback

SpringBoot 默认选择的是 **SLF4J** + **Logback** 的组合,如果不需要更改为其他日志系统(如 Log4j2 等),则无需多余的配置,LogBack 默认会将日志打印到控制台上。

新建的 Spring Boot 项目一般都会引用 spring-boot-starter 或者 spring-boot-starter-web,而这两个起步依赖中都已经包含了对于 spring-boot-starter-logging 的依赖,所以,我们无需额外添加依赖

基本用法

日志级别从小到大为 trace < debug < info < warn < error < fatal,默认日志级别设置为 INFO。所以之前的是看不见的。

@Test
void contextLoads() {
   Logger logger = LoggerFactory.getLogger(EshopThApplicationTests.class);
   logger.trace("追踪信息");
   logger.debug("调试信息");
   logger.info("操作信息");
   logger.warn("警告信息");
   logger.error("错误信息");
}

​ 如果项目有使用 Lombok 的话,直接使用 @Slf4j 注解可以省去从日志工厂生成日志对象这一步,直接进行日志记录。下面代码的效果同上面是一样的

设置日志级别

在配置文件中修改:application.properties

  • 全局设置
    • logging.level.root=trace
  • 具体某个包
    • logging.level.com.example=trace
日志文件生成
  • 日志保存到文件,配置文件中设置路径

    • logging.file.path=/Volumes/BOOTCAMP/log/
  • 通过 logging.file.path 生成的日志文件名字为 spring.log,如果需要自定义文件名字,则通过 logging.file.name 属性进行配置(此时不需要再配 logging.file.path

    • logging.file.name=/Volumes/BOOTCAMP/log/my.log
  • 不管何种设置,Spring Boot 都会自动按天分割日志文件,也就是说每天都会自动生成一个新的 log 文件,而之前的会自动打成 GZ 压缩包。

  • 除此之外,我们还可以设置日志文件的保留时间,以及单个文件的大小

    • # 日志文件大小
      logging.file.max-size=10MB
      # 保留的日志时间
      logging.file.max-history=10
      
logback-spring.xml

复杂的场景需编写配置文件logback-spring.xml,在里面可以满足生产级别的要求,不用去配置,框架自己会去读。

  • 把日志输出到指定的目录,并按照日期 yyyy-MM-dd 的格式按天存储,注意如果没有特别指定,这里的目录 applog 就是指项目的根目录(如果您的项目是多模块配置并不是指模块的目录)
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
   <contextName>logback</contextName>
   <!--输出到控制台-->
   <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
       <encoder>
           <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
           <pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
           <charset>UTF-8</charset>
       </encoder>
   </appender>

   <!--按天生成日志-->
   <appender name="logFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
       <Prudent>true</Prudent>
       <!-- 过滤器,只打印ERROR级别的日志 -->
       <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
           <!--日志文件输出的文件名-->
           <FileNamePattern>
               applog/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.log
           </FileNamePattern>
           <!--日志文件保留天数-->
           <MaxHistory>15</MaxHistory>
       </rollingPolicy>
       <layout class="ch.qos.logback.classic.PatternLayout">
           <Pattern>
               %d{yyyy-MM-dd HH:mm:ss} -%msg%n
           </Pattern>
       </layout>
   </appender>

   <logger name="com.fishpro.log" additivity="false">
       <appender-ref ref="console"/>
       <appender-ref ref="logFile"/>
   </logger>
   
   <!-- 设置Spring&Hibernate日志输出级别 -->
   <logger name="org.springframework" level="WARN"/>
   <logger name="org.mybatis" level="WARN"/> 
   <logger name="com.ibatis" level="DEBUG"/> 
   <logger name="com.ibatis.common.jdbc.SimpleDataSource" level="DEBUG"/> 
   <logger name="com.ibatis.common.jdbc.ScriptRunner" level="DEBUG"/> 
   <logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" level="DEBUG"/>


      
   <logger name="java.sql.Connection" level="DEBUG"/>  
   <logger name="java.sql.Statement" level="DEBUG"/> 
   <logger name="java.sql.PreparedStatement" level="DEBUG"/> 
   <logger name="com.ruidou.baoqian.mapper" level="DEBUG"/>

   <!-- 开发环境下的日志配置 -->
   <root level="error">
       <appender-ref ref="console"/>
       <appender-ref ref="logFile"/>
   </root>
</configuration>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值