springBoot框架

使用springmvc框架,除了引入相关的依赖,还需要手动配置spring对象和springmvc对象,这个过程使用xml文件编写实现,最后在web的配置文件中引入这两个对象。

要实现dispatcherServelet的组件功能,还得在springmvc容器中手动注入相关组件的实现类对象。

使用springBoot框架,spring容器及springmvc容器的依赖及配置文件都被封装成相应的jar包,把这种包含依赖及配置信息的maven项目称之为启动器,只需要引入相应的maven依赖就不需要手动编写配置文件了。



目录

springBoot框架的pom文件:

springBoot框架的配置yml文件:

springBoot整合logback日志:

springBoot整合junit:

springBoot整合themeleaf:

springBoot整合pageHelper:

[springBoot的启动类 :](#springBoot的启动类 :)

一、@SpringBootApplication注解:

1)@SpringBootContfiguration@SpringBootContfiguration)

2)@ComponentScan:@ComponentScan:)

3) @EnableAutoConfiguration: @EnableAutoConfiguration:)

二、SpringApplication.run(MyApplication.class,args)方法:




springBoot框架的pom文件:

maven项目之间有三种关系:依赖,继承,聚合

1) <parent>标签实现了继承关系:

用于引入父工程的相关依赖

2)父工程中的<dependencyManagement>标签用来管理依赖:

子工程引入依赖时只会导入自己需要的依赖,并不用导入父工程的所有依赖文件。

3)<dependency>标签引入启动器或者插件。

4)这里使用springboot2版本,使用jdk8就ok

如果使用springboot3,使用的jdk版本还要更高。

java 复制代码
 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.11</version>
    </parent>

5)创建一个web项目需要的启动器及其他依赖

java 复制代码
 <!--配置依赖-->
    <dependencies>
        <!--配置启动器依赖:相关的jar以及配置信息-->
        <!--web启动器依赖: Spring和SpringMVC的相关依赖以及SpringBoot启动类的依赖以及Tomcat的依赖以及相关配置信息-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--配置MyBatis的启动器依赖-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.4</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.11</version><!-- 可以省略,spring-boot-starter-parent中存在其版本声明 -->
        </dependency>
        <!--配置Druid数据库链接池的启动器依赖-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.18</version>
        </dependency>
        <!--配置Junit4的启动器依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <!--配置PageHelper的启动器依赖-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.7</version>
        </dependency>
        <!--配置Thymeleaf的启动器依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <!--配置其他传统依赖-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

springBoot框架的配置yml文件:

虽然引入启动器已经自动配置文件,但是springBoot框架还是需要引入配置文件,比如连接数据库的用户名、密码,连接数据库的地址是什么,要使用的端口号是多少。

1) 配置文件的位置可以在四个位置:

项目根目录下

项目根目录config包中

resources目录下

resources目录的congfig中

2)配置文件的名字可以叫:

application.properties

application.yml

application.yaml

3)执行先后顺序:

A ,B , C , D

4)并且多个配置文件同时配置同一个属性,默认读第一个

java 复制代码
#server:
#  port: 8080
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/0726db?serverTimezone=Asia/Shanghai
    password: root
    username: root
    druid: #Druid连接池的配置
      # 连接池的配置信息
      # 初始化大小,最小,最大
      initial-size: 5
      max-active: 30
      min-idle: 5
      # 配置获取连接等待超时的时间
      max-wait: 60000
      validation-query: SELECT 1 FROM DUAL
      #配置一个连接在池中最小生存的时间,单位是毫秒
      min-evictable-idle-time-millis: 300000
      test-while-idle: true
      # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
      filters: stat,wall,slf4j
      # 配置DruidStatViewServlet
      stat-view-servlet:
        # 登录名
        login-username: admin
        # 登录密码
        login-password: admin
        url-pattern: /druid/*
        # IP白名单(没有配置或者为空,则允许所有访问)
        allow: 127.0.0.1,
        reset-enable: false
        # 必须启用,要不会404
        enabled: true

mybatis:
  mapper-locations: classpath:mybatis/*.xml
  type-aliases-package: com.xja.bean
pagehelper:
  offsetAsPageNum: true
  rowBoundsWithCount: true

springBoot整合logback日志:

spring-boot-starter-web内置了logback相关依赖:

java 复制代码
<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
 </dependency>

具体的日志实现的参数还需要配置文件:

在resource目录下创建logback.xml,名字固定

java 复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <property name="LOG_HOME" value="${catalina.base}/logs/" />
    <!-- 控制台输出 -->
    <appender name="Stdout" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 日志输出编码 -->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
            </pattern>
        </layout>
    </appender>
    <!-- 按照每天生成日志文件 -->
    <appender name="RollingFile"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/server.%d{yyyy-MM-dd}.log</FileNamePattern>
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
            </pattern>
        </layout>
        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>

    <!-- 日志输出级别 -->
    <root level="info">
        <appender-ref ref="Stdout" />
        <appender-ref ref="RollingFile" />
    </root>

    <logger name="com.wollo.mapper" level="DEBUG"></logger>

    <!--日志异步到数据库 -->
    <!--     <appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
            日志异步到数据库
            <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
               连接池
               <dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">
                  <driverClass>com.mysql.jdbc.Driver</driverClass>
                  <url>jdbc:mysql://127.0.0.1:3306/databaseName</url>
                  <user>root</user>
                  <password>root</password>
                </dataSource>
            </connectionSource>
      </appender> -->

</configuration>


springBoot整合junit:

配置单元测试的启动器:

java 复制代码
 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>2.6.1</version>
  </dependency>

单元测试需要在类上添加注解@SpringBootTest,Testa类的对象作为项目中的一部分,在项目启动时先创建自己,这样才能从springboot的框架中去自动装配其他对象。

在test()运行时,首先会去调用项目的入口方法,这样,也就是单元测试间接的会去跑一遍项目。

需要将测试类Testa写在com.xja中,尽量和springboot的启动方法写在同一目录下。

springBoot整合themeleaf:

resources目录新建templates包:

创建对应的html文件。

控制器对应的转发流程会根据返回值自动调用themeleaf视图解析器。实现流程和jsp视图解析器整体一样,并且jsp解析器会根据jsp文件去编译java文件,解析出对应的class类。

而themeleaf视图解析器直接在html上把作用域数据格式化,效率更高。

java 复制代码
<!--配置Thymeleaf的启动器依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>


springBoot整合pageHelper:

引入启动器:

java 复制代码
<dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.7</version>
</dependency>

在不使用pageHelper插件时,查询语句应该是有两个mapper:

一个mapper,在sql使用limit关键字进行分页查询

另一个mapper,在sql使用count(1)去查询共有多少页。

这样一个完整的查询业务才算完成,但是mapper要传入的参数除了查询的限制条件如姓名字段,还需要传入从多少条开始的数据,以及分页的每页条数。

这样的话在service层还需要处理参数,因为前端只会传两个参数:

第几页。 //sql语句得要具体从第几条开始的数据而非第几页。

每页的数据条数。

使用pageHelper插件的话就非常简单,只需要编写一个mapper的一条sql语句。但是它的底层原理是拦截mapper层sql语句执行,转而自己根据这条sql语句编写了两个mapper来实现分页查询功能。这也就是为什么控制台只执行一个分页查询业务,常常打印了两条sql语句。



springBoot的启动类 :

一、@SpringBootApplication注解:

该注解是一个组合注解,重点看:

1)@SpringBootContfiguration

内部是一个@Configuration,也就是一个配置类,把我创建的MyApplication类作为配置类,表明该类可以配置其他的bean对象。

2)@ComponentScan:

自动扫描注解,创建和装配bean对象。

3) @EnableAutoConfiguration:

① 从注解一路向里走

② 在这里找到了所有的配置类的全限定名称,springboot根据这个List集合中的全限定名称找到对应的类,通过反射创建对象。

③ 所有的启动器文件中都包含了一个 这样的autoconfigure包;

④在autoconfigure包中的spring.factories中包含了该启动器中配置类的全限定名称。

二、SpringApplication.run(MyApplication.class,args)方法:

从run()方法中进入该静态类中

run()方法最终创建了一个new SpringApplication()对象

这个SpringApplication对象调用了重载的run()方法:

用来加载相关配置然后整个项目启动。

相关推荐
咩咩啃树皮43 分钟前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
鱟鲥鳚1 小时前
Spring Boot 集成 LangChain4j:从模型调用到 Tool Calling(Demo版)
java·spring boot
大模型码小白3 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
腾渊信息科技公司3 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
爱笑的源码基地4 小时前
高并发 Redis 缓存门诊HIS系统源码,含财务统计药房进销存
java·程序·门诊系统·诊所系统·云诊所源码
wuqingshun3141594 小时前
TCP超时重传机制是为了解决什么问题?
java
莫逸风7 小时前
【AgentScope 2.0】 0. 学习指南
java·llm·agent·agentscope
隔窗听雨眠7 小时前
Spring Boot在云原生时代的编程范式革新研究
spring boot·后端·云原生
z123456789867 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
yaoxin5211238 小时前
470. Java 反射 - Member 接口与 AccessFlag
java·开发语言·python