手记

springboot

环境要求

  1. jdk1.8
  2. maven:3.6.1
  3. springboot:2.1.6.RELEASE
  4. posgreSQL:9.2
  5. 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

  1. 它就像 node.js中的npm、PHP中的Composer,解决繁杂的依赖管理
  2. 每个Java项目的目录结构都没有一个统一的标准,配置文件到处都是,单元测试代码到底应该放在那里也没有一个权威的规范
  3. 可以用于校验、编译、测试、打包、部署、发布

maven的基本概念

  1. 代码目录

  2. 坐标
    groupId , artifactId , version 三个元素是项目的坐标,唯一的标识这个项目。
    groupId 项目所在组,一般是组织或公司
    artifactId 是当前项目在组中的唯一ID;
    version 表示版本,SNAPSHOT表示快照,表示此项目还在开发中,不稳定

  3. 命令
    mvn compile 编译产生target文件
    mvn clean 把target文件删掉重新生成的
    mvn test 先编译,然后执行测试代码
    mvn package 将项目打包成war或者jar包,在target的根目录下生成
    mvn install 实际上就是把项目进行【清理】→【编译】→【测试】→【打包】
    mvn clean compile 先清理再编译(常用的组合命令)

啥是springboot

  1. spring
    我们说到Spring,一般指的是Spring Framework,它是由框架来帮你管理这些对象。
    核心概念:
    spring的IOC
    AOP(接口限流、事务、请求响应日志)

  2. springMVC
    Spring MVC是Spring的一部分,Spring 出来以后,大家觉得很好用,于是按照这种模式设计了一个 MVC框架(一些用Spring 解耦的组件),主要用于开发WEB应用和网络接口。前几年最火的是SSM替代以前的SSH框架

  3. 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:通知

项目启动方式

  1. IDE启动
  2. 命令行用maven启动
  3. 用maven打包成jar后 用java -jar启动
  4. 用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周边技术

  1. JVM参数优化
  2. SSM框架的搭建(spring+springMVC+mybatis)
  3. 微服务:SpringCloud或者Dubbao+zookeeper
0人推荐
随时随地看视频
慕课网APP