环境要求
- jdk1.8
- maven:3.6.1
- springboot:2.1.6.RELEASE
- posgreSQL:9.2
- tomcat:内置
Springboot 2.x 要求 JDK 1.8 环境及以上版本
Springboot 2.x 只兼容 Spring Framework 5.0 及以上版本
为 Springboot 2.x 提供了相关依赖构建工具是 Maven,版本需要 3.2 及以上版本
建议用IntelliJ IDEA IntelliJ IDEA (简称 IDEA)
maven
为什么要用maven
- 它就像 node.js中的npm、PHP中的Composer,解决繁杂的依赖管理
- 每个Java项目的目录结构都没有一个统一的标准,配置文件到处都是,单元测试代码到底应该放在那里也没有一个权威的规范
- 可以用于校验、编译、测试、打包、部署、发布
maven的基本概念
-
代码目录
-
坐标
groupId , artifactId , version 三个元素是项目的坐标,唯一的标识这个项目。
groupId 项目所在组,一般是组织或公司
artifactId 是当前项目在组中的唯一ID;
version 表示版本,SNAPSHOT表示快照,表示此项目还在开发中,不稳定 -
命令
mvn compile 编译产生target文件
mvn clean 把target文件删掉重新生成的
mvn test 先编译,然后执行测试代码
mvn package 将项目打包成war或者jar包,在target的根目录下生成
mvn install 实际上就是把项目进行【清理】→【编译】→【测试】→【打包】
mvn clean compile 先清理再编译(常用的组合命令)
啥是springboot
-
spring
我们说到Spring,一般指的是Spring Framework,它是由框架来帮你管理这些对象。
核心概念:
spring的IOC
AOP(接口限流、事务、请求响应日志) -
springMVC
Spring MVC是Spring的一部分,Spring 出来以后,大家觉得很好用,于是按照这种模式设计了一个 MVC框架(一些用Spring 解耦的组件),主要用于开发WEB应用和网络接口。前几年最火的是SSM替代以前的SSH框架 -
springboot
随着项目越来越庞大,其配置文件也越来越繁琐,太多复杂的xml文件也一直是Spring被人诟病的地方,特别是近些年其他简洁的WEB方案层出不穷,如基于Python或Node.Js,几行代码就能实现一个WEB服务器。springboot 是基于spring框架上进行封装的。springboot的web框架默认集成的就是springMVC框架
核心功能:
简化配置
适应微服务的潮流
springboot的框架介绍
项目生成地址:https://start.spring.io/
项目结构
看代码
多环境配置
application-dev.yml(开发环境)
application-test.yml(测试环境)
application-uat.yml(预发布)
application-pro.yml(生产环境)
application.yml
spring:
profiles:
active: dev
启动模块
@SpringBootConfiguration:@EnableAutoConfiguration、@ComponentScan、@Configuration三个注解的集合
@ComponentScan注解作用:自动扫描@Controller、@Service、@Component、@Repository等等注解
基本注解
@Controller、@Service、@Component、@Repository
validate参数校验
pom.xml添加
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
ORM模块(JPA)
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
JPA自动生成表结构
jpa:
show-sql: true
hibernate:
ddl-auto: update
properties:
hibernate:
temp:
use_jdbc_metadata_defaults: false
model: @Entity
@Data
@Entity(name = "users")
public class UserEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "name")
private String name;
@Column(name = "age")
private Integer age;
}
orm: @Repository
public interface UserDao extends JpaRepository<User, Integer> {
}
事务:@Transactional
Springboot提供了一个@EnableTransactionManagement注解在配置类上来开启声明式事务的支持。注解@EnableTransactionManagement是默认打开的,想要关闭事务管理,想要在程序入口将这个注解改为false。找到service实现类,加上@Transactional 注解就行
缓存:
@EnableCaching 开启缓存
@Cacheable(cacheNames = “test”,key = “#id”,condition = “#id>0”) 缓存读取
@CachePut(value = “test”, key = “#result.id”) 缓存更新
@CacheEvict(value = “test”, key = “#id”, allEntries = true) 删除缓存
异常处理
SpringBoot 中异常处理非常简单,通过@ControllerAdvice 和@ExceptionHandler 注解,可以实现自定义的统一异常处理模块。
规范:所有异常都要往上抛,直接抛到controller层之后被统一异常处理。即使有些异常需要try-catch处理,则catch处理之后也要往上层抛
测试用例
swagger在线文档模块
pom.xml添加
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
@Api
@ApiOperation
@ApiResponses
在线文档地址:http://localhost:8080/publicSystem/swagger-ui.html#/
监控模块
Actuator是spring boot的一个附加功能,可帮助你在应用程序生产环境时监视和管理应用程序。可以使用HTTP的各种请求来监管,审计,收集应用的运行情况.返回的是json
pom.xml添加
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
配置文件添加
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: always
auditevents 显示当前应用程序的审计事件信息 Yes
beans 显示应用Spring Beans的完整列表 Yes
caches 显示可用缓存信息 Yes
conditions 显示自动装配类的状态及及应用信息 Yes
configprops 显示所有 @ConfigurationProperties 列表 Yes
env 显示 ConfigurableEnvironment 中的属性 Yes
flyway 显示 Flyway 数据库迁移信息 Yes
health 显示应用的健康信息(未认证只显示status,认证显示全部信息详情) No
info 显示任意的应用信息(在资源文件写info.xxx即可) No
liquibase 展示Liquibase 数据库迁移 Yes
metrics 展示当前应用的 metrics 信息 Yes
mappings 显示所有 @RequestMapping 路径集列表 Yes
scheduledtasks 显示应用程序中的计划任务 Yes
sessions 允许从Spring会话支持的会话存储中检索和删除用户会话。 Yes
shutdown 允许应用以优雅的方式关闭(默认情况下不启用) Yes
threaddump 执行一个线程dump Yes
httptrace 显示HTTP跟踪信息(默认显示最后100个HTTP请求 - 响应交换) Yes
Admin-UI底层使用actuator,实现监控信息 的界面
启动定时任务
定时任务:@EnableScheduling和@Scheduled搭配使用
固定等待时间 @Scheduled(fixedDelay = 时间间隔 )
@Component
public class TestTask {
@Scheduled(fixedRate = 2000)
public void testOut() {
System.out.println(11111);
}
}
固定间隔时间 @Scheduled(fixedRate = 时间间隔 )
@Component
public class TestTask {
@Scheduled(cron = "0/4 * * * * ?")
public void testOut() {
System.out.println(11111);
}
}
异步任务
异步任务:@EnableAsync可以开启异步任务,@Async用于注解说明当前方法是异步执行
面向切面编程
记录请求日志,返回日志
- aspect :切面,通知说明了干什么和什么时候干(什么时候通过方法名中的before,after,around等就能知道),而切入点说明了在哪干(指定到底是哪个方法),这就是一个完整的切面定义
- pointcut:切入点
- JoinPooint:连接点
- Advice:通知
项目启动方式
- IDE启动
- 命令行用maven启动
- 用maven打包成jar后 用java -jar启动
- 用maven生成war包 部署在tomcat下面
不想用自带的tomcat
pom.xml修订
修改打包形式
<packaging>war</packaging>
移除嵌入式tomcat插件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 移除嵌入式tomcat插件 -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
添加servlet-api的依赖
<!-- servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
热部署
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
javaWeb周边技术
- JVM参数优化
- SSM框架的搭建(spring+springMVC+mybatis)
- 微服务:SpringCloud或者Dubbao+zookeeper