😄
xlzy520
  • README
  • 执笔
    • 2017
      • 01 网站动态标题的两种方式
      • 02 RN App 外部唤醒踩坑记
    • 2018
      • 01 图片加解密二三事
      • 02 优雅实现 BackTop
      • 03 Vue 一键导出 PDF
      • 04 不一样の烟火
      • 05 Python 之禅
      • 06 Python 文件操作
    • 2019
      • 01 Aurora 食用指南
      • 02 Godaddy 域名找回记事
      • 03 一个接口的诞生
      • 04 SpringMVC 前后端传参协调
      • 05 主题集成友链访问统计功能
      • 06 Github Style 博客主题
      • 07 动态加载 JS 文件
      • 08 WebSocket 心跳重连机制
      • 09 洗牌算法实现数组乱序
      • 10 React Hook 定时器
      • 11 Fetch data with React Hooks
      • 12 字符编码の小常识
      • 13 WSL 安装 Docker 实录
      • 14 Eriri comic reader
  • 书斋
    • ES6 标准入门
      • 01 变量声明与解构赋值
      • 02 语法的扩展
      • 03 数据类型与数据结构
      • 04 Proxy 和 Reflect
      • 05 异步编程 Promise
      • 06 Iterator 和 for of 循环
      • 07 Generator 函数
      • 08 Async 函数
      • 09 Class 类
    • JavaScript 设计模式
      • 01 基础知识
      • 02 设计模式(上)
      • 03 设计模式(下)
      • 04 设计原则和编程技巧
  • 前端
    • JavaScript
      • 01 JavaScript 秘密花园
      • 02 JavaScript 正则技巧
      • 03 从浏览器解析 JS 运行机制
      • 04 Canvas 基础用法
      • 05 Flex 弹性布局
      • 06 Blob Url And Data Url
      • 07 函数节流与函数防抖
      • 08 排序算法初探
    • Node
      • 01 Node Tips
      • 02 七天学会 NodeJS
    • Note
      • 01 Note
      • 02 Snippets
      • 03 Interview
      • 04 Git
      • 05 Docker
      • 06 Line
    • React
      • 01 React Props Children 传值
      • 02 Use a Render Prop!
      • 03 React Hook
      • 04 React 和 Vue 中 key 的作用
    • Vue
      • 01 Vue Tips
      • 02 Vue 构建项目写入配置文件
      • 03 Vue 项目引入 SVG 图标
  • 后端
    • Java
      • 01 浅析 Java 反射
      • 02 Java 服务端分层模型
    • Note
      • 01 Note
      • 02 Linux
      • 03 MySQL
    • Spring
      • 01 Spring Boot
      • 02 Spring Data
      • 03 JPA
      • 04 Swagger
      • 05 AOP
      • 06 SSM
    • Project
      • 01 微信点餐系统
由 GitBook 提供支持
在本页
  • 初遇 Spring Boot
  • 组件自动装配
  • 嵌入式 Web 容器
  • 生产准备特性
  • 启动方式
  • 配置
  • 基本配置
  • 自定义配置
  • 注解
  • @RestController
  • @GetMapping

这有帮助吗?

  1. 后端
  2. Spring

01 Spring Boot

初遇 Spring Boot

Spring Boot 是 Spring MVC 的升级版,两者没有必然联系。

Spring Boot 的角色:Spring Framework -> Spring Boot -> Spring Cloud。

Spring Boot 的三大特性:

  1. 组件自动装配:Web MVC、Web Flux、JDBC 等

  2. 嵌入式 Web 容器:Tomcat、Jetty 以及 Undertow

  3. 生产准备特性:指标、健康检查、外部化配置等

组件自动装配

  1. 激活:@EnableAutoConfiguration

  2. 配置:/META-INF/spring.factories

  3. 实现:XXXAutoConfiguration

嵌入式 Web 容器

  1. Web Servlet:Tomcat、Jetty 和 Undertow

  2. Web Reactive:Netty Web Serve

生产准备特性

  1. 指标:/actuator/metrics

  2. 健康检查:/actuator/health

  3. 外部化配置:/actuator/configprops

启动方式

  1. mvn 启动:

mvn spring-boot:run
  1. 打成 jar 包启动:

# 打包
mvn clean package

# 启动
java -jar target/luckymoney-0.0.1-SNAPSHOT.jar

配置

基本配置

# 启动端口和路径
server:
  port: 3000
  servlet:
    context-path: /luckymoney

# 数据库和JPA
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 1124chanshiyu
    url: jdbc:mysql://127.0.0.1:3306/sell?characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
  jpa:
    show-sql: true

自定义配置

  1. 单个引入

# 自定义配置
minMoney: 1
description: 最少金额${minMoney}元

在程序中引用自定义的配置参数:

@RestController
public class HelloController {

    @Value("${minMoney}")
    private BigDecimal minMoney;

    @Value("${description}")
    private String description;

    @GetMapping("/hello")
    public String sayHello() {
        return description;
    }
}
  1. 多个引入

limit:
  minMoney: 1
  maxMoney: 10
  description: 最少金额${limit.minMoney}元,最大金额${limit.maxMoney}元

提取配置:

@Data
@Component
@ConfigurationProperties(prefix = "limit")
public class LimitConfig {

    private BigDecimal minMoney;

    private BigDecimal maxMoney;

    private String description;
}

引入配置:

@RestController
public class HelloController {

    @Autowired
    private LimitConfig limitConfig;

    @GetMapping("/hello")
    public String sayHello() {
        return limitConfig.getDescription();
    }
}
  1. 区分开发与生产环境

将 application.yml 复制两份文件 application-dev.yml 和 application-prod.yml,然后再在 application.yml 中引入:

spring:
  profiles:
    active: dev

开发环境使用 dev,发布到线上时不需要更改,只需启动时加入参数启动:

java -jar -Dspring.profiles.active=prod target\luckymoney-0.0.1-SNAPSHOT.jar

注解

@RestController

@RestController = @Controller + @ResponseBody

@RestController 注解相当于 @Controller 与 @ResponseBody 这两个注解的结合。

在使用 SpringMVC 框架的时候,在处理 json 的时候需要注解 @ResponseBody 或者 @RestController,这两个注解都会处理返回的数据格式,使用了该类型注解后返回的不再是视图,不会进行转跳,而是返回 json 或 xml 数据格式,输出在页面上。

所以在定义 Controller 的时候如果需要返回 jsp 界面就用 @Controller 注解,只需要返回 string 或 json 的时候就用 @RestController 注解。

两者区别:

@ResponseBody: 一般是使用在单独的方法上的,需要哪个方法返回 json 数据格式,就在哪个方法上使用,具有针对性。 @RestController:一般是使用在类上的,它相当于 @Controller 与 @ResponseBody 这两个注解的结合,本质相当于在该类的所有方法上都统一使用了 @ResponseBody 注解。

@GetMapping

注解 @GetMapping 支持数组,多个路径可以访问同一个接口:

@GetMapping({"/hello", "/hi"})

获取路由参数有两种方式,一种是 /hello/200 路径,另外一种是 /hello?id=200 路径,方式分别如下:

// /hello/200
@GetMapping("/hello/{id}")
public String sayHello(@PathVariable("id") Integer id) {
    return "id:" + id;
}

// /hello?id=200
@GetMapping("/hello")
public String sayHello(@RequestParam("id") Integer id) {
    return "id:" + id;
}

更细致控制非必传和默认值:

@GetMapping("/hello")
public String sayHello(@RequestParam(value = "id", required = false, defaultValue = "0") Integer id) {
    return "id:" + id;
}

@RequestParam 注解可以兼容 @PostMapping

@PostMapping("/hello")
public String sayHello(@RequestParam(value = "id", required = false, defaultValue = "0") Integer id) {
    return "id:" + id;
}
上一页Spring下一页02 Spring Data

最后更新于5年前

这有帮助吗?