SpringBoot学习文档

作者: 磨陀货_ | 来源:发表于2019-10-21 08:58 被阅读0次

    SpringBoot概念

    SpringBoot基于Spring更深封装的一个东西

      Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。使用springboot以后,搭建一个spring应用和开发变得很简单.

      Springboot就是一些写好了maven的模块,我们在使用SPring就不需以传统的方式来用,只需要以maven导入对应的springboot模块,就能完成一大堆操作。简单的说,它使用maven的方式对Spring应用开发进行进一步封装和简化


    为什么要使用SpringBoot

      简单而言,即Spring Boot使编码更简单,使配置更简单,使部署更简单,使监控更简单。!
        Springboot就是为了简化spring应用搭建,开发,部署,监控的开发工具,并且内置Tomcat。


    SpringBoot有哪些功能

    1.无需手动管理依赖jar包的版本
        spring-boot-starter-web:web支持,其实就springmvc简化使用。
        Spring-boot-starter-jdbc:springboot对jdbc支持
        Spring-boot-starter-data jpa:springboot对data jpa支持
        Spring-boot-starter-mybatis:springboot对mybatis支持
        Spring-boot-starter-test:springboot对test支持
        Spring-boot-starter-redis
        Spring-boot-starter-es
        Spring-boot-starter-sorl

    • spring-boot-starter-parent :SpringBoot的父工程,帮我们管理了很多的基础jar包

    • spring-boot-starter-web :SpringBoot和SpringMvc整合的jar包,并且导入了日志,tomcat,等等相关的jar包

    • RestController : Controller+ResponseBody

    • @EnableAutoConfiguration : 开启自动配置功能

    • SpringApplication.run : 启动SpringBoot应用

    • <packaging>jar</packaging> :SpringBoot应用默认打jar包

    • SpringBootApplication:包括三个标签组成
      @SpringBootConfiguration - @Configuration : Spring的配置标签
      @EnableAutoConfiguration :开启自动配置
      @ComponentScan :组件自动扫描


    SpringBoot的特点

    • 1.简化maven
    • 2.无需xml
    • 3.快速搭建/快速开发
    • 4.内嵌tomcat,部署简单
    • 5.健康检查,外部化配置等
    • 6.方便第三方框架集成(Spring-boot-start)

    SpringBoot缺点

    • 1.找错 不是特明显

    入门操作(HelloWord!!!)

    网址:https://www.jianshu.com/p/9c60ddcdd4d0

    SpringBoot项目结构

    src
        --main
            --java
            --resources
                --static        //静态资源目录
                --templates     //模板页面目录,如:jsp ,ftl
                --application.properties/application.yml    //默认配置文件
    
    • static --- 静态资源(html、)可以直接访问
    • templates --- 模板放里面(Jsp、)通过controller访问
    • application.properties ---- 配置(配置端口)名字是默认名字,如果要改其他名字要在主配置文件上加配置
    • application.yml

    搭建SpringBoot工程的几种方式

    1.所有东西自己手建
    2.通过网站创建



    dependencyManagement与dependencies区别

    • dependencyManagement

    该标签下的jar包,默认是不能被子项目直接使用的 , 他只有声明的功能 , 如果只项目想用这里标签里面的jar包 ,需要显示的写出来 ,而版本号使用父工程的。达到版本号统一管理的效果

    • dependencies

    这个标签下面的jar包默认会被子项目直接继承直接使用

    SpringBoot打包方式运行

    打包插件

    • pom.xml
    <build>
        <plugins>
          <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
          </plugin>
        </plugins>
      </build>
    
    • springboot方式打包


    • 打包完成后,在cmd运行 java -jar xxx
      xxx:打的jar包 直接拖进去


    热部署

    类似于小火箭,改动一些东西时,无须重新启动。

    即使修改了输出内容也要重启APP,非常麻烦!可以使用spring-boot-devtools来实现热部署!

    1)介绍
    spring-boot-devtools 是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去。原理是在发现代码有更改之后,重新启动应用,但是速度比手动停止后再启动还要更快,更快指的不是节省出来的手工操作的时间。
    深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类(自己写的),称为 restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间(5秒以内)

    • 引入依赖包和插件
     <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <optional>true</optional>
                <scope>true</scope>
    </dependency>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <!--fork :  如果没有该项配置,可能devtools不会起作用,即应用不会restart -->
                        <fork>true</fork>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
    • 这样就成功了,记住注意一点:在idea中需要手动编译一下,ctrl+F9

    可以改一下快捷键 改成Ctrl+S就方便的多了

    方式二

    配置IDEA的自动编译功能

    配置setting的自动编译


    • 按 ctrl +shift + alt + / -> registry -> 如下


    二选一 (不要两个都弄)

    Spring boot web

    • 引入依赖包
    <!-- 依赖配置-->
    <!-- web支持: 1、web mvc; 2、restful; 3、jackjson支持; 4、aop ........ -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    
        <!-- servlet 依赖. -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <scope>provided</scope>
        </dependency>
    
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
    
        <!-- tomcat 的支持. -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
    

    模板

    • 引入依赖包

    • 配置 【注意:如果使用下方配置 模板的名称使用templates】

    JSON操作

    SpringBoot配置

    YAML

      Springboot除了支持properties的配置,还支持yaml,而且企业中也是用的最多的。
      YAML是YAML Ain't Markup Language递归缩写,是YAML不是标记语言的意思,读音“yamel”(或者“雅梅尔”)。YAML是便于人阅读基于unicode编码的各种语言的序列号标准。它的用途广泛,用于配置文件,日志文件,跨语言数据共享,对象持久化,复杂的数据结构


    基本用法

    • 多个级之间用:分类,并且换行缩进 , 值不用换行 , 值前面有个空格


    读取配置

    一、使用@Value标签
    • 配置文件
    user:
      username: ls
      password: 456
      age: 99
    

    注意:不要用 user:name , 因为这个是系统默认的名字 ,会被读到

    • 把配置读取到对象中
    @Component
    public class User {
        //@Value :从配置文件中取值   SPEL
        @Value("${user.username}")
        private String username = "zs";
        @Value("${user.password}")
        private String password = "123";
        @Value("${user.age}")
        private int age = 18;
        . . . . . . 
    

    二、使用@ConfigurationProperties
    • 配置文件
    employee:
      username: ls
      password: 456
      age: 99
    
    • 绑定配置对象
    @Component
    @ConfigurationProperties(prefix = "employee")
    public class Employee {
        private String username = "zs";
        private String password = "123";
        private int age = 18;
    

    @ConfigurationProperties : 自动的根据前缀从配置中过滤出配置项目,然后根据当前对象的列名进行匹配,自动赋值

    Spring Profiles多环境支持(重)

    方式一:

    • application.yml
    spring:
      profiles:
        active: test    #激活(选择)环境test
    ---
    spring:
      profiles: dev     #指定环境名字dev
    server:
      port: 9999
    ---
    spring:
      profiles: test    #指定环境名字test
    server:
      port: 8888
    

    方式二:通过文件名字识别环境

    • application-dev.yml
    server:
      port: 9999
    
    • application-test.yml
    server:
      port: 8888
    
    • application.yml
    spring:
      profiles:
        active: test 
        #根据文件名字配置 application-dev.properties
    

    SpringBoot测试

    网址:https://www.jianshu.com/p/1e940b543b03


    SpringBoot---日志(slf4j)

    很多时候systemt out println 是不行的,所以我们要用日志框架


    适配器模式 ---- SpringMVC配置拦截器用到过(jdk1.8之后就不用了,但是之前是一定要覆写方法的)


    日志等级(大到小。大的里面包含小的)

    trace----->debug------>info------->warn------>error


    日志简单配置

    可以配置的东西有很多。

    • 配置存放日志文件的名称
    • 配置日志等级
    • 配置每个日志文件最大的存储量

    日志打印器 -- Logger

    • 方式二

    指定配置文件配置 -- logback-spring.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <!-- 定义常量 : 日志格式 -->
        <property name="CONSOLE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} ----> [%thread] ---> %-5level %logger{50} - %msg%n"/>
    
        <!--ConsoleAppender 用于在屏幕上输出日志-->
        <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
            <!--定义控制台输出格式-->
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ----> [%thread] ---> %-5level %logger{50} - %msg%n</pattern>
                <!-- 设置字符集 -->
                <charset>UTF-8</charset>
            </encoder>
        </appender>
    
        <!--打印到文件-->
        <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
    
            <file>logs/springboot.log</file>
    
            <!--滚动策略:比如按照时间切分文件,比如按照大小切分文件-->
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <fileNamePattern>logs/springboot-%d{yyyyMMdd}-%i.log.gz</fileNamePattern>
                <maxFileSize>1KB</maxFileSize>
                <maxHistory>30</maxHistory>
                <!--总上限大小-->
                <totalSizeCap>5GB</totalSizeCap>
            </rollingPolicy>
            <!--定义控制台输出格式-->
            <encoder>
                <pattern>${CONSOLE_LOG_PATTERN}</pattern>
                <!-- 设置字符集 -->
                <charset>UTF-8</charset>
            </encoder>
        </appender>
    
    
        <!--root是默认的logger 这里设定输出级别是debug-->
        <root level="info">
            <!--定义了两个appender,日志会通过往这两个appender里面写-->
            <appender-ref ref="stdout"/>
            <appender-ref ref="file"/>
        </root>
    
        <!--如果没有设置 additivity="false" ,就会导致一条日志在控制台输出两次的情况-->
        <!--additivity表示要不要使用rootLogger配置的appender进行输出-->
        <logger name="cn.itsource" level="trace" additivity="false">
            <appender-ref ref="stdout"/>
            <appender-ref ref="file"/>
        </logger>
    
    </configuration>
    

    configuration--根元素
    property --- 名字、时间格式、线程、级别、具体信息
    appender ---日志输出的方式【name--名字。calss--在哪里打印】
    encoder -- 定义输出格式,把上面property变量名搞过来
    root -- 全局配置
    level -- 级别
    Appender-ref --- 控制台输出
    gz -- 压缩包


    配置切换日志配置

    Thymeleaf的集成

    网址:https://www.jianshu.com/p/dc7601b356d6


    静态资源储处理--- webjars

    • 导包
            <dependency>
                <groupId>org.webjars</groupId>
                <artifactId>jquery</artifactId>
                <version>3.4.1</version>
            </dependency>
    
    • query.js
      alert(1);
    • html
    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>撒拉黑</title>
        <!--webjars-->
        <script src="/webjars/jquery/3.4.1/jquery.js" ></script>
        <script>
            alert($);
        </script>
    </head>
    <body>
    
    <div th:text="${username}" >你好xx</div>
    
    </body>
    </html>
    




    弹出来的就是jquery源码

    SpringBoot--实现拦截器

    网址:https://www.jianshu.com/p/6da51e0c3d62


    SpringBoot集成MyBatis

    网址:https://www.jianshu.com/p/59dda43ee3e7


    SpringBoot集成Freemarker

    网址:https://www.jianshu.com/p/8fcc1f6d4e3b


    SpringBoot集成DataSource

    网址:https://www.jianshu.com/p/9b1bdd9b533d


    SpringBoot集成事务

    网址:https://www.jianshu.com/p/674f206f061c


    疑惑点?

    1.为什么是普通的java项目(jar),而不用webapp?

    SpringBoot项目默认打jar包 ,部署到内墙的tomcat进行运行 ,可以不再需要以前的webapp/WEB-INF这种结构了


    2.spring-boot-starter-parent是什么东东?

    SpringBoot的父项目,管理了很多很多的基础依赖包 (dependencyManagement)

    问题: dependencyManagement 和 dependencies 区别:
    dependencyManagement里面的jar包子模块需要引入才能使用,版本号不用引 ,
    dependencies :父模块中的dependencies标签里面的jar包,默认子模块只能就能使用,不用引入


    3.spring-boot-starter-web是什么东东/ Spring的那些jar包,SpringMvc的那些包?

    SpringBoot和web整合的包 , 包含了SpringMvc,tomcat,日志 ,自动配置等等jar包


    4.web.xml的配置呢?SpringMvc的配置呢?

    SpringBoot自动配置了 @EnableAutoConfiguration


    6.tomcat是哪儿来的?

    spring-boot-starter-web包导入内嵌的tomcat


    7.SpringApplication.run 怎么就把应用给启动起来了呢?

    运行项目 , 做一系列的工作之后,把项目打包,部署到内嵌的tomcat,启动tomcat

    • 1.准备环境
    • 2.创建容器 applicationContext
    • 3.解析配置
    • 4.完成自动配置
    • 5.打包项目到tomcat
    • 6.运行tomcat

    8.@EnableAutoConfiguration标签是什么东东?
    开启SpringBoot自动配置功能 ,在@EnableAutoConfiguration标签上,通过一个导入选择器  AutoConfigurationImportSelector
    去加载SpringBoot自动配置包里面的 META-INF/spring.factories 的 EnableAutoConfiguration节点下面的自动指定配置的类
    完成自动配置 ,
    比如说 DispatcherServle 就是在整个文件中有个 DispatcherServletAutoConfiguration   自动配置类 ,在这自动配置类中就
    

    使用 @Bean定义方式对 DispatcherServle 做了定义。 WebMvcAutoConfiguration ,

    相关文章

      网友评论

        本文标题:SpringBoot学习文档

        本文链接:https://www.haomeiwen.com/subject/jbwlnqtx.html