SpringBoot
你好SpringBoot
1、快速搭建SpringBoot项目
1、创建新模块,选择Spring Initializr,并配置模块相关基础信息
2、选择当前模块需要使用的技术集
3、开发控制器类
//REST模式
@RestController
@RequestMapping("/books")
public class BookController {
@GetMapping
public String getById(){
System.out.println("SpringBoot is running...");
return "SpringBoot is running";
}
}
4.运行自动生成的Application类
2.入门案例分析
1、parent
开发SpringBoot程序要继承spring-boot-starter-parent
spring-boot-starter-parent中定义了若干个依赖管理
继承parent模块可以避免多个依赖使用相同技术时出现依赖版本冲突
继承parent的形式也可以采用引入依赖的形式实现效果
2、starter
SpringBoot中常见的项目名称,定义了当前项目使用的所有依赖坐标,以达到减少依赖配置的目的
实际开发:使用任意坐标时,仅书写GAV中的G和A,V由SpringBoot提供,除非SpringBoot未提供对应版本V
如果法神坐标错误,再指定Version(小心版本冲突)
3、引导类
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
SpringBoot工程运行后初始化Spring容器,扫描引导类所在包加载bean。
引导类默认扫描,当前引导类所在的包下所有bean。
4.内嵌Tomact
3、SpringBoot属性配置
1、修改服务器端口
GET http://localhost:8080/books
修改为默认端口80就不需要写端口号。
GET http://localhost/books
SpringBoot在resources下的application.properties中配置。
注意:
1.SpringBoot中导入对应的starter后,提供对应配置属性。
2.书写SpringBoot配置采用关键字+提示形式书写。
2、属性配置方式
SpringBoot提供了三种属性配置方式:application.properties/yml/yaml
企业开发推荐yml格式。
3、配置文件优先级
三个配置文件都存在,优先级:properties>yml>yaml
不同配置文件中相同配置按照加载优先级相互覆盖,不同配置文件中不同配置全部保留。
4、IDEA属性提示消失解决方案
FILE-->Prroject Structure-->Facets-->Customize Spring Boot添加配置文件。
4、整合第三方技术
1.整合Junit
lombook 可以自动生成geterseter构造器方法
1.导入测试对应的starter
2.测试类使用@SpringBootTest修饰
3.使用自动装配的形式添加要测试的对象
名称:@SpringBootTest
类型: 测试类注解
位置: 测试类定义上方
作用: 设置Junit加载的SpringBoot启动类
@SpringBootTest
class SpringTest{
}
classess属性
classes属性来指定配置类
@SpringBootTest(classes=SpringBootApplication.class)/@ContextConfiguration(引导类名.class)
注意:如果测试类在SpringBoot启动类的包或者子包中,可以省略启动类的设置,也就是省略classes的设定
2.整合Mybatis
1.创建一个模块在SQL选项中勾选MySQL Driver驱动和Mybatis Framework
2.在application.yml文件中设置数据源参数
# 设置数据源参数
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://8.130.109.205:3306/Mybatis
username: xxx
password: xxx
3.定义数据层接口与映射配置
@Mapper
public interface UserDAO {
@Select("select * from user where id = #{id}")
public User getUserById(Integer id);
}
4.测试
@SpringBootTest
class DemoZhengheApplicationTests {
@Autowired
private UserDAO userDAO;
@Test
public void testDAO(){
System.out.println(userDAO.getUserById(1));
}
}
3.整合Mybatis-plus
1.手动添加SpringBoot整合Mybatis-Plus的坐标。
2.定义数据层接口与映射配置,继承baseMapper
4.整合Druid
spring:
datasource:
druid:
druid-class-name:
url:
username:
password:
5.SSMP整合案例
1.创建模块
1.勾选SpringMVC和MySQL坐标、
2.修改配置文件
3.设置端口为80方便访问
4.手动添加MP坐标,druid坐标
2.数据层标准开发(基础CRUD)
1.开发DAO接口(继承BaseMapper)
Mp默认自增策略是雪花算法,可以将id-type设置为auto
mybatis-plus:
global-config:
db-config:
id-type: auto
2.制作测试类测试DAO功能
3.开启MP运行日志
开启标准输出,输出到控制台。
mybatis-plus:
global-config:
db-config:
id-type: auto
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
4.分页
1.设定分页对象IPage
IPage iPage=new Page(2,4);
Ipage对象中封装了分页操作中的所有数据。
2.配置MybatisPlus拦截器
分页操作是在MybatisPlus的常规操作基础上增强得到,内部是动态拼写SQL语句,因此需要增强对应的功能,是用MybatisPlus拦截器实现
@Configuration
public class MPConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return mybatisPlusInterceptor;
}
}
5.条件查询
1.使用QueryWrapper对象封装查询条件,推荐使用LambdaQueryWrapper对象,所有查询操作封装成方法调用。LambdaQueryWrappe可以避免手动写属性名造成的错误,也 支持动态条件拼装。like前面的true、false。
@Test
public void getBy(){
LambdaQueryWrapper<Book> qw = new LambdaQueryWrapper<>();
String name="Spring";
qw.like(name!=null,Book::getName,name);
bookDAO.selectList(qw);
}
6.业务层标准开发
1.Service接口名称定义成业务名称,并与DAO接口进行区分
2.制作测试类测试Service功能是否有效
7.业务层快速开发(基于MP)
1.使用MP提供的业务层通用接口(IService
2.在通用类基础上做功能重载或功能追加
3.注意重载时不要覆盖原始操作,避免原始提供的功能丢失。
7.表现层开发
1,基于Restful制作表现层接口
POST/DELETE/PUT/GET
2, 接受参数
实体数据:@RequestBody
路径变量:@PathVariable
8.表现层消息一致性处理
设计表现层返回结果的模型类,用于后端与前端进行数据格式同意,也成为前后端数据协议。
@Data
public class R {
private boolean flag;
private Object data;
public R(){}
public R(boolean flag){
this.flag=flag;
}
public R(boolean flag,Object data){
this.flag=flag;
this.data=data;
}
}
1.设计统一的返回值结果类型便于前端开发读取数据
2.返回值结果类型可以根据需求自行设定,没有固定格式
3.返回值结果模型类用于后端与前端进行数据格式统一,也称前后端数据协议
9.前后端调用(axios发送异步请求)
1.单体项目中页面放置在resources/static目录下
2.created钩子函数用于初始化页面时发起调用
3.页面使用axious发送异步请求获取数据后确认前后端是否联通
10.异常消息处理
SpringMVC中提供异常处理器
//作为springmvc的异常处理器
@RestControllerAdvice
public class ProjectExceptionAdvice {
//拦截所有的异常信息
@ExceptionHandler(Exception.class)
public R doException(Exception ex){
//记录日志
//通知运维
//通知开发
ex.printStackTrace();
return new R("服务器内部故障");
}
}
1.使用注解@RestControllerAdvice定义SpringMVC异常处理
2.异常处理器必须被扫描加载,否则无法生效
3.表现层返回结果的模型类中添加消息属性用来传递消息到页面
SpringBoot运维实用
1.程序打包与运行(windows)
1.对SpringBoot项目打包(执行Maven构建指令package)
mvn package
2.运行项目(执行启动指令)
java -jar springboot.jar
注意:jar支持命令行启动需要依赖maven插件支持,请确认打包时是否具有SpringBoot对应的maven插件
使用SpringBoot提供的maven插件可以将工程打包成可执行jar包。
可执行jar包目录结构
jar包描述文件
2.linux
1.安装jdk,且版本不低于打包时使用的JDK版本
2.安装包保存在/usr/local/自定义目录中或$HOME下
3,其他操作参照windows版进行。
nohup java -jar SSMP-0.0.1-SNAPSHOT.jar > server.log 2>&1 &
后台开启进程。
2.配置高级
1.临时属性
java -jar SSMP-0.0.1-SNAPSHOT.jar --server.port=8080
携带多个属性启动SpringBoot,属性间使用空格分隔
属性加载顺序
2.临时属性设置(开发环境)
1.带属性启动SpringBoot程序,为程序添加运行属性
2.通过编程的形式带参数启动SpringBoot程序,为程序添加运行参数
@SpringBootApplication
public class SsmpApplication {
public static void main(String[] args) {
String[] arg=new String[1];
arg[0]="--server.port=8080";
SpringApplication.run(SsmpApplication.class, arg);
}
}
3.配置文件四级分类
SpringBoot中4级配置文件
1级 file : config/application.yml 最高
2级 file : application.yml
3级 classpath : config/application.yml
4级 classpath : application.yml 最低
作用:1级与2级留做系统打包后设置通用属性,1级常用于运维进行线上整体项目部署方案调控
3级与4级用于系统开发阶段设置通用属性,3级常用于项目经理进行整体项目属性调控
4.自定义配置文件
1.通过启动参数加载配置文件(无需书写配置配置文件扩展名)
2.通过启动参数加载指定文件路径下的配置文件
注意多个配置,最后一个配置生效。
重要说明:
单服务器项目: 使用自定义配置文件需求较低
多服务器项目: 使用自定义配置文件需求较高,将所有配置放置在一个目录中,统一管理
基于SpringCloud技术,所有的服务器将不再设置配置文件 ,而是通过配置中心进行设定,动态加载配置信息。
3.多环境开发
1.YMAL版
1.多环境开发需要设置若干种常见环境,例如开发,生产,测试环境
2.yaml格式中设置多环境使用---区分环境设置边界
3.每种环境的区别在于加载的配置属性不同
4.启用某种环境时需要指定启动时使用该环境
#应用环境
#公共配置
spring:
profiles:
active: dev
---
#设置环境
#生产环境
server:
port: 80
spring:
profiles: pro
---
#开发环境
server:
port: 81
spring:
profiles: dev
---
#测试环境
server:
port: 82
spring:
profiles: test
2.多环境开发多文件版(ymal)
1.主启动配置文件application.yml
spring:
profiles:
active: dev
2.环境分类配置文件application-pro.yml
server:
port :80
3.application-dev.yml
server:
port:82
...
3.多环境分组管理
1.根据功能对配置文件中的信息进行拆分,并制作成独立的配置文件,命名规则如下
application-devDB.yml
application-devRedis.yml
application-devMVC.yml
2.使用include属性在激活指定环境的情况下,同时对多个环境进行加载使其生效,多个环境使用逗号分割
spring:
profiles:
active: dev
include: devDB,devRedies,devMVC
注意:当主环境dev与其他环境有相同属性时,主环境属性生效;其他环境中有相同属性时,最后加载的环境属性生效。、
3.从springboot 2.4 开始使用group属性替代include属性,降低了配置书写量
使用group属性定义多种主环境与子环境的包含关系
spring:
profiles:
active: dev
group:
"dev": devDB,devRedis,devMVC
"pro": proDB,proRedis,proMVC
"test": testDB,testRedis,testMVC
4.多环境开发控制
Maven与SpringBoot多环境兼容
1.Maven中设置多环境属性
2.SpringBoot中引用Maven属性
3.执行Maven打包指令,并在生成的boot打包文件.jar文件中查看对应信息
4.日志
1.日志基础操作
1.日志作用
编程期调试代码
运营期记录信息
记录日常运营重要信息(峰值流量,平均响应时长......)
记录应用报错信息(错误堆栈)
记录运维过程数据(扩容,宕机,报警......)
2.代码中使用日志工具记录日志
1.添加日志记录操作
public class BookController {
//创建记录日志的对象
private static final Logger logger= LoggerFactory.getLogger(BookController.class);
@Autowired
private IBookService iBookService;
@GetMapping
public R getAllBooks(){
logger.info("info......");
logger.debug("debug.......");
logger.warn("warn....");
logger.error("error...");
return new R(true,iBookService.list());
}
}
日志级别:
TRACE:运行堆栈级别,使用率低
DEBUG:程序员调试代码使用
INFO:记录运维过程数据
WARN:记录运维过程报警数据
ERROR:记录错误堆栈信息
FATAL:灾难信息,合并计入ERROR
2.设置日志的输出级别
# 开启debug模式,输出调试信息,常用于检查系统运行状况
debug:true
# 设置日志级别,root表示根节点,即整体应用日志级别
logging:
level:
root: debug
#对某个组设置日志级别
ebank: warn
设置某个包的日志级别
com.springboot.controller: debug
设置分组,对某个组设置日志级别
logging:
group:
ebank: 包名,包名
使用lombok提供的注解@slf4j简化开发,减少日志对象的声明操作
2.日志输出格式控制
1.设置日志消息格式
pattern:
console: ""
3.日志文件
1.设置日志文件
logging:
file:
name: server.log
2.日志文件详细配置
logging:
file:
name: server.log
logback:
rollingpolicy:
max-file-size: 3KB
file-name-pattern: server.%d{yyyy-MM-dd}.%i.log
%d是日期,%i是循环变量
SpringBoot开发实用
1.热部署
1.手动启动热部署
在pom.xml文件中开启开发者工具
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
激活热部署: Ctrl+ F9 (Build Project)
热部署:
重启(Restart) :自定义开发代码,包含类,页面,配置文件等,加载位置restart类加载器
重载(Reload):jar包,加载位置base类加载器
热部署仅仅加载当前开发者自定义开发的资源,不加载jar资源。
2.自动热部署
1.File-->Settings-->compiler-->Build project automatically
2.Ctrl+Alt+Shift+/
3.compiler.automake.xxx勾选
3.热部署范围配置
设置不参与热部署的文件或者文件夹。
devtools:
restart:
exclude: xxxx
4.关闭热部署
enable: false
设置高优先级属性禁用热部署
System.setProperty("spring.devtools.restart.enabled","false");
2.配置高级
1.第三方bean属性绑定
使用@ConfigurationProperties为的第三方bean绑定属性。
@EnableConfigurationProperties注解可以将使用@ConfigurationProperties注解对应的类加入Sping容器
@EnableConfigurationProperties和@component不能同时使用。
2.松散绑定
@ConfigurationProperties绑定属性支持属性名宽松绑定
public class Serverconfig{
private String ipAddress;
private int port;
private long timeout;
}
注意:宽松绑定不支持注解@Value引用单个属性的方式
3.常用计量单位应用
Duration 时间数据类型
@DurationUnit()
DataSize 空间数据类型
@DataSizeUnit()
4.数据校验
开启数据校验有助于系统安全性,J2EE规范中JSR303定义了一组有关数据校验相关的API
1.导入JSR303规范validation
2.开启对当前bean的属性注入校验@Validated
3.指定校验规则
4.使用hibernate框架提供的校验器做实现类
进制数据转换规则
yaml文件中对于数字的定义支持进制书写格式,如需要使用字符串请使用引号明确标注。
3.测试
1.加载测试专用属性
@SpringBootTest(properties={"test.prop=testValue1"})
properties属性可以为当前测试用例添加临时的属性配置
@SpringBootTest(args={"--test.prop=testValue2"})
args属性可以为当前测试用例添加临时的命令行参数
2.加载测试专用配置
使用@Import注解加载当前测试类专用的配置
3.测试类中启动web环境
4.发送虚拟请求
1.开启虚拟MVC调用
@AutoConfigureMockMvc
自动装配一个MockMvc
2.创建虚拟请求,当前访问 /books
MockHttpServletRequestBuilder builder=MockMvcRequestBuilders.get("/books");
3.执行请求
mvc.perform(build)
5.匹配响应执行状态
4.数据层解决方案
1.数据源配置
SpringBoot提供了3种内嵌的数据源对象供开发者选择
HikariCP(默认)
Tomcat提供DataSource
Commons DBCP
2.JdbcTemplate
SpringBoot内置JdbcTemplate持久化解决方案
使用JdbcTemplate需要导入spring-boot-starter-jdbc
5.整合redis
1.导入SpringBoot整合Redis坐标
spring-boot-starter-data-redis
2.配置Redis
spring:
redis:
host: localhost
port: 6379
3.RedisTemplate提供操作各种数据存储类型的接口API
4.使用自动装配注入RedisTemplate对象
客户端:RedisTemplate以对象作为key和value。内部对数据进行序列化
StringRedisTemplate以字符串作为key和value,与Redis客户端操作等效
5.jedis客户端实现技术
lettcus与jedis区别
jedis连接Redis服务器是直连模式,当多线程模式下使用jedis会存在线程安全问题,解决方案可以通过配置连接池使每个连接专用,这样整体性能就大受影响
lettcus基于netty框架进行与Redis服务器连接,底层设计中采用StatefulRedisConnection。StatefulRedisConnection自身是线程安全的,可以保障并发访问安全问题,所以一个连接可以被多线程复用。当然lettcus也支持多连接实例一起工作。
6.Mongdb
7.ES(Elasticsearch)
分布式全文搜索引擎
倒排索引:
数据--主键id--数据
开发实用2.0
1.缓存
1.SpringBoot默认缓存方案导入坐标
spring-boot-starte-cache
2.开启SpringBoot单节点缓存功能
在Spring启动项中加上 @EnableCaching注解
在方法上加上
@Cacheable(value="cacheSpace",key="#id")注解
@Cacheable(value="cacheSpace",key="#id")
public Book getById(Integer id){
return bookDao.selectById(id);
}
作者:程序员包子,转载请注明原文链接:https://www.cnblogs.com/coder-baozi/articles/16677840.html
coder-baozi一位菜鸟码农