当前位置:首页 » 《我的小黑屋》 » 正文

springBoot框架

24 人参与  2024年11月18日 15:22  分类 : 《我的小黑屋》  评论

点击全文阅读


        使用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: 8080spring:  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: truemybatis:  mapper-locations: classpath:mybatis/*.xml  type-aliases-package: com.xja.beanpagehelper:  offsetAsPageNum: true  rowBoundsWithCount: 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://m.zhangshiyu.com/post/188242.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1