特点:
- 快速的搭建
- pom 以starter的形式,按组类聚了多条依赖,形成单条依赖,以父子继承的方式自动寻找对应的依赖版本
- 以“习惯优于配置”的方式,简化了配置文件,无web.xml
- bean的自动装配,全称注解开发
- 无外置的servlet容器,使用内置容器。
- 提供了方便的监测端点。
区别:
- spring mvc :web框架中的一部分
- spring boot:web框架集大成者,垂直框架
- spring cloud:三维立体式框架集大成者
restful规则
- 根据操作类型来确定请求类型
- 新增操作–post请求–getMappping
- 修改操作–put请求–PutMapping
- 删除操作–delete请求----DeleteMapping
- 查询操作—get请求------GetMapping
- 多条件查询 —post请求
- 以操作的模块名||实体对象名命名
- /api/user
- /api/users
- /api/user/{userId}
- /api/student/{classId}/studentNo
1.SpringBoot的配置文件
- 父上下级配置:bootstrap.properties || bootstrap.yml
- 全局配置文件:application.properties || application.yml
- 其他配置文件:自定义
- 优先级:
- 相同位置时:properties 大于 yml
- 不同位置时:(从上到下,优先级减小)
- 外置:./config
- 外置:.
- 内置:resources/config
- 内置:resources/config/*
- 内置:resources
2.Log配置
1.pom导入jar—无需导入jar包
2.配置:全局配置+配置类
logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
scan:程序运行时配置文件被修改,是否重新加载,true:重新加载;false:不重新加载;默认为 true;
scanPeriod:监测配置文件被修改的时间间隔,默认为 1 分钟,默认单位包括:milliseconds、seconds、minutes 和 hours;
debug:是否打印 logback 程序运行的日志信息,默认为false;
格式:
%d{HH:mm:ss.SSS}:时间格式化,14:06:49.812;
%line:输出执行日志请求的行号;
%thread:表示产生日志的线程名;
%level:输出日志级别;
%method:输出执行日志请求的方法名;
%class:输出日志打印类的全限定名;
%-4relative含义:“-”左对齐标志,接着是可选的最小宽度修饰符,十进制表示,relative 输出从程序启动到创建日志的时间,单位毫秒;
%msg:表示应用程序打印的日志信息;
%n:表示换行符;
%logger{36}:class 的全名,数字代表限制最长的字符;
-->
<configuration debug="false" scan="true" scanPeriod="30 seconds">
<!-- 定义常量 -->
<property name="env" value="dev" />
<!-当前项目名-->
<property name="project" value="j210302-springboot" />
<property name="root" value="/log" />
<property name="fileSize" value="50MB" />
<property name="maxHistory" value="100" />
<timestamp key="dateTime" datePattern="yyyy-MM-dd HH:mm:ss" />
<property name="pattern" value="%d{${dateTime}} %-5level %logger{36} -- %msg%n" />
<!-- 控制台打印 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder charset="utf-8">
<pattern>${pattern}</pattern>
</encoder>
</appender>
<!-- 输入到文件,按日期和文件大小 -->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder charset="utf-8">
<pattern>${pattern}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${root}/${project}_${env}_%d.%i.log</fileNamePattern>
<maxHistory>${maxHistory}</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${fileSize}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<!-- 指定第三方 jar 包或者自定义包的输出日志级别,additivity: false,不会打印两次 -->
<Logger name="org.springframework" level="INFO" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
</Logger>
<!-- Root Logger Level: TRACE < DEBUG < INFO < WARN < ERROR -->
<!--例如选择level=DEBUG,则比DEBUG优先级高的都会打印-->
<root level="INFO">
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
</configuration>
3.应用示例
private final static Logger LOGGER= LoggerFactory.getLogger(TestController.class);
/**
* 127.0.0.1:8080/test/log ---- get
* @return
*/
@GetMapping("/log")
@ResponseBody
public String logTest(){
LOGGER.trace("this is trace log.");
LOGGER.debug("this is debug log.");
LOGGER.info("this is info log.");
LOGGER.warn("this is warn log.");
LOGGER.error("this is error log.");
return "This is log test.-------aaa";
}
3.多环境配置
-
多环境:码工开发(dev)—测试人员测试(staging)–生产环境上线(live)
-
系统针对不同的环境会有不同的配置:例如 数据库,日志
-
spring boot 多环境配置:application-{环境占位符}.properties
- 说明:环境占位符是自己设定的,可以随便设置,这里举的例子是日志在不同环境的不同级别输出
- appliation-dev.properties
- appliation-staging.properties
- appliation-live.properties
-
上面多环境配置的实例
- 目录结构
- 目录结构
-
application.properties(在启动配置文件中选择日志打印)
-
logback-live.xml & application-live.properties
-
logback-dev.xml & application-dev.properties
4.http && https 配置
http:超文本传输协议,使用 TCP 端口 80,默认情况下数据是明文传送的,可以通过抓包工具捕获到。
- htttps:由 SSL + HTTP 构建的可进行加密传输、身份认证的网络协议,称之为安全的超文本传输协议,使用 TCP 端口 443,数据会用 PKI(公钥基础设施)中的公钥进行加密,这样抓包工具捕获到的数据包也没有办法看包中的内容,安全性大大提高,要解密数据的话就要用到 PKI 中的私钥;
- 公匙,私匙
- 公匙加密,私匙解密;
- 私匙数字签名,公匙验证;
- 它们是成对的,相互解密,举个栗子:两个用户想用双匙技术加密信息,A 将自己的公匙传给 B,B 用公匙加密信息后传给 A,A 用私匙解密信息
- SSL证书
- SSL 证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本,该证书需要向国际公认的证书认证机构(简称 CA,Certificate Authority)申请,CA 机构颁发的证书有 3 种类型;
- 三种类型的SSL证书
- 域名型 SSL 证书(DV SSL):信任等级普通,只需验证网站的真实性便可颁发证书保护网站;
- 企业型 SSL 证书(OV SSL):信任等级强,须要验证企业的身份,审核严格,安全性更高;
- 增强型 SSL 证书(EV SSL):信任等级最高,一般用于银行证券等金融机构,审核严格,安全性最高,同时可以激活绿色网址栏;
- 获取方式:
- 1.网上购买:阿里云、百度、腾讯等;
- 2.Java 命令生成:
- keytool -genkey -alias tomcat -keyalg RSA (cmd执行) ---- 创建别名为 tomcat 的一条证书,指定使用 RSA 算法,生成文件 C:\Users\用户名.keystore;
- 注意:如果该目录已经有了 .keystore,创建不成功,删除后再次创建
步骤
- pom导入jar --无需导入
- 配置
- 1.将.ketstore 证书拷贝到src\main\resources文件夹下面。
- 2.全局配置application.properties
- 指定证书的位置和密码
- 说明:1和2的步骤使得web能够运行,但是只支持https,而不支持http了,如果想要http和https都支持,还需要下面的配置
- 3.添加配置类 WebMvcConfig,为 Servlet 容器添加 Http 连接器
- 目录结构
- WebMvcConfig.java
5.热部署配置
- 简介:在实际开发过程中,每次修改代码就得重启项目,对于一些大型应用来说,需要花费大量的时间成本,在 Java 开发领域,热部署一直是一个难以解决的问题,目前的 Java 虚拟机只能实现方法体的修改热部署,对于整个类的结构修改,仍然需要重启虚拟机,我们采用 Devtools 工具包完成热部署,操作简单,每次变更代码自动重启项目
- 步骤:
- 1.pom 导入 jar
<!--devtool-->
<!--暂时不使用热部署-->
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-devtools</artifactId>-->
<!-- </dependency>-->
- 2.application.properties中配置
# dev tools
#热部署生效
spring.devtools.restart.enabled=true
#设置重启的目录
spring.devtools.restart.additional-paths=src/main/java
- 3.应用:修改 Controller 中某接口返回内容,查看应用是否自动重启,调用接口,查看返回结果是否更新;
6.静态资源配置
- 简介:查看 ResourceProperties(高版本 Spring Boot 查看 WebProperties ---- Resources) 可知
- SpringBoot 默认静态资源路径为:private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { “classpath:/META-INF/resources/”, “classpath:/resources/”, “classpath:/static/”, “classpath:/public/” };
- 添加本地文件夹为静态资源路径,启动项目后,可直接通过 Url 访问该文件夹中的内容;
- 步骤
- 目录结构
- 1.pom.xml-无需导入jar包
- 2.1application.properties
- 2.2ResourceConfigBean.java
- 2.3WebMvcConfig.java,实现 addResourceHandlers 方法
- 3.应用
- 在本地资源文件夹 D:\javaTestworkplace\upload 中准备测试图片:test.png;
- 启动项目,访问该图片:http://127.0.0.1:端口号/upload/test.png || https://127.0.0.1:端口号/upload/test.png ;
- 目录结构
- 步骤
7.跨域配置
- 简介:协议、域名、端口其中之一不一样则是跨域请求;
- 三种不同类型的跨域
- 不同协议的跨域
- 不同端口的跨域
- 不同域名的跨域
- 方式一:局部 Controller 或控制器方法上添加 @CrossOrigin 注解
- 方式二:全局配置类
@Configuration
@AutoConfigureAfter({WebMvcAutoConfiguration.class})
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
// spring boot 版本 2.4.2
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")
.maxAge(3600)
.allowedOriginPatterns("*");
// .allowCredentials(true);
}
}
8.ORM–Mybatis
基本的增删改查
- Rusult.java(返回的数据封装到该VO中)
增
- dao—CityDao.java
- service-CityService.java &CityServiceImpl.java
- controller–TestCityController.java
改
- dao—CityDao.java
- service-CityService.java &CityServiceImpl.java
- controller–TestCityController.java
删
- dao—CityDao.java
- service-CityService.java &CityServiceImpl.java
- controller–TestCityController.java
查(返回单个对象)
- dao—CityDao.java
- service-CityService.java &CityServiceImpl.java
- controller–TestCityController.java
查(返回对象集合)
- dao—CityDao.java
- service-CityService.java &CityServiceImpl.java
- controller–TestCityController.java
查(一对多查询)
- 提示:通过countryId查询Country,Country有个字段是private List cites,所以需要映射。
- Country.java(pojo)
- CountryDao.java
- CountryService.java&CountryServiceImpl.java
- TestCountryController.java
多条件分页查询(多条件查询使用@PostMapping)
- 参数:currentPage,pageSize, orderBy,direction,keyword
- SearchBean.java
- dao—CityDao.java
- service-CityService.java &CityServiceImpl.java
- controller–TestCityController.java
批量插入多条数据
- dao—CityDao.java
- service-CityService.java &CityServiceImpl.java
- controller–TestCityController.java
9.JPA**(JPA是一种规范,具体实现有Hibernate)**
Hibernate**(全ORM,不用自己写sql语句)**
pom导入jar
配置
- application.properties
应用
自动生成表
- 例子:在这个例子中 班级和学生是多对多的关系
- AbstractEntity.java,下面的四个表的主键由这个类来生成
- 四个表
- 学生表(test_student)
- 学生证表(test_card)
- 学校表(test_school)
- 班级表(test_clazz)
- 学生表(test_student)
- 说明:由于此时默认生成的表的字段顺序并没有按照我们java中定义变量的顺序来书写。所以我们查看PropertyContainer类会发现,它是有TreeMap这种无序的集合存放的,想要有序的集合,就得自己将所有的TreeMap修改为LinkedHashMap(有序的)
- 将字段顺序和java中定义变量的顺序相同的步骤
- 1.找到PropertyContainer类,在我们的项目中配置一个PropertyContainer,并且包名就为jar包中的类名org.hibernate.cfg.
- 2.将里面的TreeMap全部替换为LinkedHashMap
关系(1对1,1对多,多对多)
接口链
增删改查接口
- 基本的增删改查都不需要在dao层编写方法,只需要继承接口就行
- 增和修改
- service层
- controller层
- 删除
- service层
- controller层
- 通过id查询单个对象
- service层
- controller层
- 查询全部对象
- service层
- controller层
属性查询接口
- 通过属性字段查询
- 1.通过name和email查询
- dao层
- service层
- controller层
- 1.通过name和email查询
多条件分页查询接口(还不如使用mybatis自己编写sql语句)
- 公有部分:
- SearchBean.java
- - StudentController.java
- - StudentService.java
-
- 方式一:
- dao层:这种方式需要实现JpaSpecificationExecutor
-
- ServieceImpl层
-
- 方式二:
- dao层:这种方式只需要继承JpaRepository
-
- ServiceImpl层
-
- SearchBean.java