springBoot
入门
spring boot概念:
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。 -使用springboot以后,搭建一个spring应用和开发变得很简单
该框架使用了特定的方式(继承r,约定优先于配置)来进行配置
Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
springboot的作用
简单而言,即Spring Boot使编码更简单,使配置更简单,使部署更简单,使监控更简单。!
Springboot就是为了简化spring应用搭建,开发,部署,监控的开发工具。
无需手动管理依赖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项目
1.建一个父项目,删除src文件
1.1 pom.xml中设置package类型为pom
2.创建一个子项目模块
3.父项目pom中导入文档中的包
4.启动类配置
5.Controller
tomcat跑哪去了?
spring web 模块 内置了tomcat
<dependencies>
<!--添加spring-boot-starter-web依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
@SpringBootApplication到底干了什么?
是一个组合注解 主要扫描当前启动类下面所有的需要被spring管理的bean,加载到spring容器中
扫描就是扫描App类的包,就是基础包,扫描这个类一下的所有包
springboot 父依赖有什么用?
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version> //把所有的版本的打包了, 管理了整个spring的maven生态链 ,整个一套maven都被管理
</parent>
为什么main方法就能启动项目
1.找到组合注解
2.扫描bean加载到容器中
3.启动tomcat并运行
springboot的运行方式
方式一:main方法启动 在启动类中启动类(application)中点击启动 右边工具类点击 三角按钮 或者 甲壳虫(debug,推荐使用)
方式二: 使用maven命令 导入插件 先clean清理 在package打包 application文件会被打成一个jar包 打开jar包出现黑窗口 输出命令 jar -jar spring提示
(小细节:启动先关闭启动关闭方式一否则会冲突) ====>在linux系统中使用 +&(申明是后台启动,否则窗口关了就没了)
插件:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
方式三:maven插件命令 本文件 Plugins -> spring-boot ->spring-boot:run (前提是装了插件)
springboot的热部署
介绍
在我们编写代码的过程中,有时候即使修改输出内容也需要重启系统非常的麻烦,可以使用spring-boot-devtools来实现热部署
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>
添加spring-boot-maven-plugin:
<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>
(plugin)可以直接放在打包的plugin标签中
修改代码之后点击 最上面一排工具栏 Build ==>build project(锤子) 或者 使用快捷键 ctrl +F9 会弹出一个窗口 勾上以后不在询问
springboot的配置
Springboot的标准目录
src
--main
--java
--resources
--static文件夹(放置静态文件的img,css,js)
--templates (用来放置模板文件的 jsp-->通过这个模板文件生成(servlet)java代码 自己的模板thymeleaf(html文件))
application.properties(或者application.yml) 必须是其中之一,如果两个都有,那么优先properties文件生效
如果创建properties文件没有启动图片 那么说明命名有问题
--test
java
Springboot的application配置
SpringBoot使用一个全局的配置文件,配置文件名是固定的;
•application.properties -传统方式,不太优美
•application.yml -推荐使用
配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好;
YAML做配置一门语言:
以前的配置文件;大多都使用的是 xxxx.xml文件还有properties;
YAML:以数据为中心,比json、xml等更适合做配置文件;
YAML:配置例子
server:
port: 8081
XML:
<server>
<port>8081</port>
</server>
properties:
server.port =8081
yml语法
k:(空格)v:表示一对键值对(空格必须有);
以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的
server:
port: 8081
path: /hello
属性和值也是大小写敏感;
4.3.2.值的写法
1)字面量:普通的值(数字,字符串,布尔)
k: v:字面直接来写;
字符串默认不用加上单引号或者双引号;
"":双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
name: "zhangsan \n lisi":输出;zhangsan 换行 lisi
'':单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi
2)k: v:在下一行来写对象的属性和值的关系;注意缩进
对象还是k: v的方式
friends:
lastName: zhangsan
age: 20
行内写法:
friends: {lastName: zhangsan,age: 18}
3)数组(List、Set):
用- 值表示数组中的一个元素
pets:
- cat
- dog
- pig
pets: [cat,dog,pig]
==========书写数据库密码的时候不能以0开头
Profile多环境支持
为什么需要多环境支持?
一套代码要在多种环境运行(开发,测试,上线),所以我们的配置文件要支持多种环境
多profile 文件
application-{profile}.properties/yml
application-dev.yml
application-test.yml
默认使用application.properties文件
yml支持多文档模块模式的语法
Application.yml
server:
port: 8081
spring:
profiles:
active: prod (活跃==>指定让哪一个生效)
---
server:
port: 8083
spring:
profiles: dev
---
server:
port: 8084
spring:
profiles: prod #指定属于哪个环境
激活特定环境
4.4.4.激活特定环境
1、在配置文件中指定 spring.profiles.active=dev
2、命令行: 部署环境
java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod;
可以直接在测试的时候,配置传入命令行参数
3、虚拟机参数; 开发环境
-Dspring.profiles.active=dev
整合测试-springboottest
1.导包 (这个父项目中已经有了)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
===>只用导这个 <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
2.创建启动类
创建cn.itsource.springboot.Application
Application类加上@SpringbootApplication注解
main方法中 SpringApplication.run ( Application.class,args ) 启动方法
3.接口测试类 两个注解 @runwith(springRunnner.class) @SpringBootTest(classes=Application.class)<==参数填启动类的class文件
之前是指向核心配置文件 目的都是启动容器 并加载到容器中去
SpringWeb
springboot返回json
(写在类上面)@ResponseBody//让所有的方法都返回json 且禁止页面跳转xxxxxxxxxx @Responsebody@ResponseBody//让所有的方法都返回json 且禁止页面跳转
@RestController 等于 @controller 加上 @responsebody
配置了这个注解这个页面只能返回json
模板语言
jsp thymeleaf FreeMark(FreeMark Template language)
.jsp .html ftl
springboot推荐thymeleaf 作为了解
后面会学vue.js 学会vue+elementUI前段就是cv
导入命名空间 不导用不了
xmlns:th="http://www.thymeleaf.org"
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org"> <====导入命名空间
后台准备数据:
public String save(Model model){
model.addAttribute("success","陈宫");
return "";
}
接收数据:
<body>
<!--获取后台返回的msg数据-->
<div th:text="${success}">哈哈哈哈哈哈</div>
</body>
导包!!
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<properties>
<thymeleaf.version>3.0.9.RELEASE</thymeleaf.version>
<!-- 布局功能的支持程序 thymeleaf3主程序 layout2以上版本 -->
<!-- thymeleaf2 layout1-->
<thymeleaf-layout-dialect.version>2.2.2</thymeleaf-layout-dialect.version>
</properties>
springboot搭建ssm并且操作数据库
配置mapper层
配置文件:
#配置四大精钢
spring:
datasource:
username: root
password: sunmin520
url: jdbc:mysql:///springboot_ssm
driver-class-name: com.mysql.jdbc.Driver
#配置mybaties的信息
mybatis:
mapper-locations: classpath:cn/itsource/springboot/mapper/*.xml
type-aliases-package: cn.itsource.springboot.domain
#日志
logging:
level:
cn:
itsource: trace
启动类注解
@SpringBootApplication
//管理接口 注意一定要加上 扫描mapper层
@MapperScan("cn.itsource.springboot.mapper")
事物的传播机制
@Transactional//@Transactional 专门用来管理事物的注解,底层基于aop
0.REQUIRED ------ 就是如果老婆做饭了,你就吃老婆做的饭;如果老婆没有做饭,你就自己做饭吃,反正你就是要吃饭(反正要在事务中运行);
1.SUPPORTS ------ 如果老婆做饭了,你就吃老婆做的饭;如果老婆没有做饭,你就不吃(不一定非要在事务中运行);
2.MANDATORY ------ 非要吃老婆做的饭,老婆要是没有做饭,你就大发脾气,典型的家暴男;
3.REQUIRES_NEW ------ 劳资非要吃自己做的饭,就算老婆把饭做好了,你也不吃老婆做的;
4.NOT_SUPPORTED ------ 劳资就是不吃饭,就算老婆把饭做好了,我也不吃;
5.NEVER ------ 劳资就是不吃饭,如果老婆把饭做好了,我还要发脾气;
6.NESTED ------ ;