spring相关知识springboot

SpringBoot学习文档

2019-10-21  本文已影响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


SpringBoot的特点


SpringBoot缺点


入门操作(HelloWord!!!)

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

SpringBoot项目结构

src
    --main
        --java
        --resources
            --static        //静态资源目录
            --templates     //模板页面目录,如:jsp ,ftl
            --application.properties/application.yml    //默认配置文件

搭建SpringBoot工程的几种方式

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



dependencyManagement与dependencies区别

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

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

SpringBoot打包方式运行

打包插件

<build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

热部署

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

即使修改了输出内容也要重启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>

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

方式二

配置IDEA的自动编译功能

配置setting的自动编译


二选一 (不要两个都弄)

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>

模板

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多环境支持(重)

方式一:

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

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

server:
  port: 9999
server:
  port: 8888
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>
<!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


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

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

上一篇 下一篇

猜你喜欢

热点阅读