- Spring注解式编程/Spring的基本回顾
网址:https://www.jianshu.com/p/2494aa6a84d7
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 ,
网友评论