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的启动类 :

   一、@SpringBootApplication注解:

                     1)@SpringBootContfiguration

                    2)@ComponentScan:

 3) @EnableAutoConfiguration:

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




springBoot框架的pom文件:

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

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

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

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

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

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

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

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

 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.11</version></parent>

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

 <!--配置依赖--><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)并且多个配置文件同时配置同一个属性,默认读第一个

        

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

 springBoot整合logback日志:

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

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

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

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

<?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:

        配置单元测试的启动器:

 <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上把作用域数据格式化,效率更高。

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



 springBoot整合pageHelper:

         引入启动器:

<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()方法:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/401599.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis事件机制

redis服务器是一个由事件驱动(死循环)的程序&#xff0c;它总共就干两件事&#xff1a; 文件事件&#xff1a;利用I/O复用机制&#xff0c;监听Socket等文件描述符发生的事件&#xff0c;如网络请求时间事件&#xff1a;定时触发的事件&#xff0c;负责完成redis内部定时任务&…

智能语音识别技术在无人驾驶领域的应用案例

随着无人驾驶技术的进步与发展&#xff0c;越来越多的企业、创业者注意到无人驾驶领域潜藏的巨大市场经济价值&#xff0c;越来越多的企业和创业者进入无人驾驶领域&#xff0c;以近期业内关注的萝卜快跑为例&#xff0c;其在武汉地区的成功推广与落地预示着无人驾驶在网约车领…

基于价值流DevSecOps效能案例分享

背景 数字经济时代&#xff0c;企业数字化转型加速&#xff0c;软件业务收入目标设定&#xff0c;产业基础保障水平提升。DevSecOps: 作为解决交付能力挑战的方法&#xff0c;强调开发&#xff08;Dev&#xff09;、安全&#xff08;Sec&#xff09;、运维&#xff08;Ops&…

水仙花语:花中情诗,心灵低语

一、水仙花语的丰富内涵 水仙花的花语丰富多样&#xff0c;其中“纯洁”是其最为显著的象征之一。水仙花洁白无瑕的花瓣&#xff0c;宛如纯洁无暇的心灵&#xff0c;给人以清新、高雅之感。这种纯洁不仅体现在花朵的外观上&#xff0c;更蕴含着一种纯净、美好的精神内涵&#x…

UE虚幻引擎可以云渲染吗?应用趋势与挑战了解

虚幻云渲染技术是基于虚幻引擎的云端渲染技术&#xff0c;将虚幻引擎的渲染计算任务通过云计算的方式进行处理和渲染、并将渲染结果传输到终端设备上进行展示。虚幻引擎云渲染技术在近年来得到了迅猛的发展&#xff0c;并在各个领域得到了广泛的应用&#xff0c;包括游戏、电影…

base SAS programming学习笔记(date和time格式)

1.MMDDYYw.或者MMDDYYYYw. mm表示月份&#xff0c;dd表示日期&#xff0c;yyyy表示年份可以是2位数也可以是4位数&#xff1b;数据可以是空格或“/”或“-”连接&#xff0c;w表示宽度包括连接符号的宽度。举例如下&#xff1a; 2.DATEw. 格式如下&#xff1a;DDMMMYYw.或者DDM…

WPF APP生命周期和全局异常捕获

应用启动事件与启动参数 属性查找 选择想要控件的事件&#xff0c;可以在控件上鼠标右击选择属性&#xff0c;在右上角点击闪电符号即可看到这个控件的所有事件&#xff1a; APP.Run()启动方法&#xff1a; 打开项目中这个文件&#xff1a; ".....\XH.EventLesson\obj…

LabVIEW多协议智能流水线控制与监控系统

在自动化流水线系统&#xff0c;实现对流水线传送带、机械臂、报警系统、扫码机、喷码机等设备的高效控制和实时监控。该系统需要支持多种通信协议&#xff0c;包括UDP、串口、ModbusTCP、HTTP、以及MQTT协议&#xff0c;以确保各个设备间的无缝连接和数据交换。 系统架构与模…

论文阅读-Transformer Layers as Painters

1. 摘要 尽管大语言模型现在已经被广泛的应用于各种任务&#xff0c;但是目前对其并没有一个很好的认知。为了弄清楚删除和重组预训练模型不同层的影响&#xff0c;本文设计了一系列的实验。通过实验表明&#xff0c;预训练语言模型中的lower和final layers与中间层分布不一致…

线程的退出

方式1 pthread_exit Void pthread_exit (void *retval) 功能&#xff1a; 结束调用的线程 参数&#xff1a; retval //退出状态值 //需要传的是&#xff0c;退出状态值的地址 注意&#xff1a; 1.pthread_exit 本身表示结束线程 如果用在main函数中 表示结束主线程…

【MySQL进阶】事务、存储引擎、索引、SQL优化、锁

一、事务 1.概念 事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向 系统提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败。 例子&#xff1a;转账&#xff0c;要求扣钱和进账…

渗透实战——为喜欢的游戏“排忧解难”

本文仅用于技术研究学习&#xff0c;请遵守相关法律&#xff0c;禁止使用本文所提及的相关技术开展非法攻击行为&#xff0c;由于传播、利用本文所提供的信息而造成任何不良后果及损失&#xff0c;与本账号及作者无关。 资料查询来源- 安全社区与AI模型结合探索【文末申请免费…

autoware中ROS2学习笔记

文章目录 一、学习资料&#xff1a;1.1、说明1.2、Autoware Documentation1.3、Autoware Universe Documentation1.4、总结 二、概述三、ros2--节点组件什么是组件容器组件的实现原理可组合节点--节点组件什么是节点组件为什么需要可组合节点创建可组合节点时构造函数为什么需要…

三级_网络技术_27_计算机网络环境及应用系统的安装与调试

1.对于频繁改变位置并使用DHCP获取PP地址的DNS客户端&#xff0c;为减少对其资源记录的手动管理&#xff0c;可采取的措施是()。 允许动态更新 使用反向查找区域 增加别名记录 设置较小的生存时间 2.下列Windows 2003系统命令中&#xff0c;可以清空DNS缓存(DNScache)的是…

svn文件定时全量备份

在win11操作系统中&#xff0c;使用定时任务脚本的方式实现对SVN文件的定时备份 SVN备份脚本 1 创建脚本simpleBackup.bat 该脚本主要用于实现备份过程的信息展示 echo 正在备份版本库%1...... md %BACKUP_DIRECTORY%\%2 %SVN_HOME%\bin\svnadmin hotcopy %1 %BACKUP_D…

mongodb连表查询,postman使用

要实现与SQL类似的查询&#xff0c;你需要使用聚合框架&#xff08;Aggregation Framework&#xff09; SELECT b.name, a.* FROM user a LEFT JOIN order b ON a.id b.id WHERE b.name LIKE %acd%; 从MongoDB 3.2版本开始&#xff0c;引入了聚合框架中的$lookup阶段&#xf…

AI人工智能 卷积神经网络(CNN)

AI人工智能 卷积神经网络&#xff08;CNN&#xff09; 卷积神经网络与普通神经网络相同&#xff0c;因为它们也由具有可学习的权重和偏差的神经元组成。 普通的神经网络忽略了输入数据的结构&#xff0c;所有的数据在送入网络之前都被转换为一维数组。 该过程适合常规数据&…

【Java日志系列】Log4j日志框架

目录 前言 一、Log4j简介 二、Log4j组件介绍 1. Loggers 2. Appenders 3. Layouts 三、快速入门 1. 入门代码 2. 日志级别 四、配置文件的使用 五、自定义日志输出格式 六、配置不同的Appender 1. 输出到文件 2. 输出到数据库 七、自定义Logger配置 总结 前言…

超简单理解LSTM和GRU模型

目录 参考资料 RNN在反向传播时容易遭受梯度消失的问题&#xff0c;而梯度是用于更新神经网络权重的关键因子&#xff0c;梯度消失描述的是梯度在时间序列反向传播中逐渐减小的情况。 若梯度过小&#xff0c;它对于网络的学习贡献甚微。结果是&#xff0c;在RNN中&#xff0c;梯…

unity游戏开发003:深入理解Unity中的坐标系

Unity游戏开发 “好读书&#xff0c;不求甚解&#xff1b;每有会意&#xff0c;便欣然忘食。” 本文目录&#xff1a; Unity游戏开发 Unity游戏开发深入理解Unity中的坐标系前言1. 坐标轴2. 左手坐标系3. 世界坐标系 vs. 局部坐标系4. 坐标变换5. 注意事项 总结 深入理解Unity中…