目前没有系统学习过 Spring 框架,参与工作时,直接参与到了 Spring Boot 项目的开发。目前还比较菜,所以,你要是和我一样,不妨也跳过 Spring 框架的学习,直接学习 Sring Boot。

官方文档 的一段介绍:

Spring Boot makes it easy to create stand-alone, production-grade Spring-based Applications that you can run. We take an opinionated view of the Spring platform and third-party libraries, so that you can get started with minimum fuss. Most Spring Boot applications need very little Spring configuration.

You can use Spring Boot to create Java applications that can be started by using java -jar or more traditional war deployments. We also provide a command line tool that runs “spring scripts”.

大体意思是说,Spring Boot 可以轻松创建可以运行的独立的,基于生产级 Spring 的应用程序。这个框架简化了我们 Spring 的配置。可以使用 Spring Boot 创建 Java 应用,只需要使用 java -jarwar 包部署方式就可以启动。也内嵌了 Tomcat ,在开发时无需以 war 包也可以运行应用。

环境

下面是本文编写时,我机器的环境:

  • Java 1.8.0_181
  • Maven 3.5.4

创建项目

本文目的是创建一个基本的 RESTful Web 服务。创建 Spring Boot 服务的方式主要有两种:

  • 在 IDEA 中使用 Spring Initializr 创建,我个人比较倾向这种方式,方便快捷;
  • 访问网站 Spring Initializr 网站,勾选相关项目依赖,最后生成一个初始化项目,导入 IDE。
 

下面主要介绍 IDEA 如何初始化一个 Sring Boot 项目:

1.File-New-Porject,选择 Spring Initializr ,选择 SDK 版本;

2.输入项目的元数据信息,关系到项目的路径、 pom 文件中项目的 Maven 坐标( GAV ),;

3.选择需要的 Maven 依赖,这里 Spring Boot 版本,我选择了 2.1.6 版本;

4.最后一步指定项目存放位置;

  • src/main/java 中有项目代码文件,根目录下是入口类: SpringBootHelloWorldApplication 类。 @SpringBootApplication 注解,这是整个 Spring Boot 的核心注解,它的目的就是开启 Spring Boot 的自动配置。
  • src/main/resources 下是配置文件: application.properties
  • src/test/ 下的测试入口:Chapter1ApplicationTests

添加控制器类 —— Controller

通常在项目中对外提供的 API 都会放在叫做 Controller 的包下。
这里向大家推荐一个测试交流圈q裙:790047143。
我们创建一个 Controller 的包,并添加一个叫做 HelloWorld 的类:

@RestController
public class HelloWorld { @GetMapping("/hello")
public String sayHello() {
return "Hello World";
} }
  • @RestController 注解加在这个类上,使之变为一个 Controller

这是我们启动项目,便可以通过地址 localhost:8080/hello127.0.0.1:8080/hello 看到 sayHello 函数执行的内容。

查看控制台的输出,我们可以知道 Spring Boot 项目启动时,默认的端口是 8080

Profile

官方文档中有关于 Profile 的描述。 Prorile轮廓、外形、简况 的含义,这里我就把它理解为「配置描述」好了。

在实际项目中,生产、beta 不同环境将采用不同的配置,比如数据库配置等等。这时候,我们只需要创建多分 Profile 文件即可。

除了 application.properties 文件,配置文件还可以采用下面的命名规则 application-{profile}.properties 。Environment 中具有一组可选的值。如果没有设置需要激活什么配置文件,就默认激活 default 配置,即 application-default.properties

指定的配置文件都是从同一个位置被激活,即从标准的配置文件 application.properties

如果指定了多个配置文件,采取 last-win 策略,即「最后获胜侧率」。这句话意思是什么呢,就是说,在你的 application.properties 中如果指定了激活好几个配置文件,那么,最后指定的那个配置文件才会生效。

我们分别创建两个环境配置文件:

  • application-dev.properties 测试环境

server.port=8081

  • application-prod.properties 生产环境

#server.port=8082

通过 application.prperties 指定 Profile

applcation.properties 公共配置文件。激活 Dev 配置文件,需要在 application.properties 设置:

#这里定义8080主要是为了看端口设置是否会被 dev 覆盖
server.port=8080
spring.profiles.active=dev

这时候启动程序时,我们查看控制台就可看到 Dev 环境被激活了,应用端口是 8081 。这时候观察 application.properties 的端口设置是否会会生效。经过测试可以发现,此时 8080 端口被 Dev 的配置覆盖了。

接着,我们激活 Prod 配置,注意,此时我将 Prod 端口配置注释掉了,这时候观察 application.properties 的端口设置是否会会生效。经过测试可以发现,此时 8080 端口生效了。

通过 Environment 指定 Profile

除了上面在 application.properties 指定激活的配置外,还可以在 Envirionment 中设置相关环境变量激活:

image

经过测试,我在 Environment 中设置环境变量激活了 Dev 的配置,然后在 application.properties 激活的是 Prod 的配置,最终控制台日志显示, Dev 配置被激活。

jar 方式运行时

如果采用 mvn clean package 打出 jar 包,那么可以使用如下方式指定 Profile:

java -jar spring-boot-hello-world-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev

Property 值获取

我们可以在 Profile 中指定一些 propety 的值,在程序中可以获取到。
application-dev.properties 定义如下:

server.port=8081
author.name=Michael

接着,我们在 Controller 类中使用 @Value 注,即可获取到这个属性:

@RestController
public class HelloWorld {
@Value(value = "${author.name}")
private String authorName; @GetMapping("/hello")
public String sayHello() {
return "Hello World By " + authorName;
} }

定制 Banner

Banner 就是指我们在启动应用时控制台一开始打印的那个内容,默认是打印 Spring Boot

  1. src/main/resorces 下新建一个名为 banner.txt 的内容;
  2. 复制你想显示的内容到 banner.txt

个性化 Banner 来源:

送一个有趣的 Banner:

////////////////////////////////////////////////////////////////////
// _ooOoo_ //
// o8888888o //
// 88" . "88 //
// (| ^_^ |) //
// O\ = /O //
// ____/`---'\____ //
// .' \\| |// `. //
// / \\||| : |||// \ //
// / _||||| -:- |||||- \ //
// | | \\\ - /// | | //
// | \_| ''\---/'' | | //
// \ .-\__ `-` ___/-. / //
// ___`. .' /--.--\ `. . ___ //
// ."" '< `.___\_<|>_/___.' >'"". //
// | | : `- \`.;`\ _ /`;.`/ - ` : | | //
// \ \ `-. \_ __\ /__ _/ .-` / / //
// ========`-.____`-.___\_____/___.-`____.-'======== //
// `=---=' //
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //
// 佛祖保佑 永不宕机 永无BUG //
////////////////////////////////////////////////////////////////////

补充知识

spring-boot-starter

Spring Boot 提供了很多”开箱即用“的依赖模块,都是以 spring-boot-starter-xx 作为命名的。下面列举一些常用的模块:

  • spring-boot-starter-logging :使用 Spring Boot 默认的日志框架 Logback。
  • spring-boot-starter-log4j :添加 Log4j 的支持。
  • spring-boot-starter-web :支持 Web 应用开发,包含 Tomcat 和 spring-mvc。
  • spring-boot-starter-tomcat :使用 Spring Boot 默认的 Tomcat 作为应用服务器。
  • spring-boot-starter-jetty :使用 Jetty 而不是默认的 Tomcat 作为应用服务器。
  • spring-boot-starter-test :包含常用的测试所需的依赖,如 JUnit、Hamcrest、Mockito 和 spring-test 等。
  • spring-boot-starter-aop :包含 spring-aop 和 AspectJ 来支持面向切面编程(AOP)。
  • spring-boot-starter-security :包含 spring-security。
  • spring-boot-starter-jdbc :支持使用 JDBC 访问数据库。
  • spring-boot-starter-redis :支持使用 Redis。
  • spring-boot-starter-data-mongodb :包含 spring-data-mongodb 来支持 MongoDB。
  • spring-boot-starter-data-jpa :包含 spring-data-jpa、spring-orm 和 Hibernate 来支持 JPA。
  • spring-boot-starter-amqp :通过 spring-rabbit 支持 AMQP。
  • spring-boot-starter-actuator : 添加适用于生产环境的功能,如性能指标和监测等功能。

SpringBoot 目录结构

目录结构理解

  • controller:控制层,前端控制器,负责页面访问控制,主要是对外提供的API接口,用户使用服务时的入口处,可以结合swagger生成对应的API文档
  • service:业务层,逻辑层,主要是业务类代码,归档了前端控制器中相关服务的操作方法接口类,该文件夹下包含子impl文件夹,归档对应的实现接口
  • domain:实体类,归档对应的实体(Entity),一个实体尝尝就对应着数据库中一张表
  • dao:数据访问层,实体类对应的数据库操作接口类,它与数据库进行交互,封装了对数据库的CURD操作
  • config:配置信息类
  • utils:工具类
  • constant:常量接口类

当请求来了,controller 就会将相应的请求分发到相应的 service层,在 service 层中再调用 dao 层进行数据库交互。这里的 dao 层其实就是之前的 model 层,封装了对数据库的操作。这样一来,就把业务处理逻辑从 controller 中分离出来,从而实现了解耦。
感谢您的观看,如有不足之处,欢迎批评指正。

获取资料

本次给大家推荐一个免费的学习群,里面概括Java架构/分布式/微服务/docker/高性能高并发以及面试资源等。对Java架构感兴趣的程序猿,欢迎加入Q群:790047143,不管你是刚入行得还是大牛我都欢迎,还有大牛整理的一套高效率学习路线和教程与您免费分享,同时每天更新视频资料。
最后,祝大家早日学有所成。

Spring Boot 实战 入门的更多相关文章

  1. Spring Boot 从入门到实战汇总

    之前写过几篇spring boot入门到实战的博文,因为某些原因没能继续. 框架更新迭代很快,之前还是基于1.x,现在2.x都出来很久了.还是希望能从基于该框架项目开发的整体有一个比较系统的梳理,于是 ...

  2. Spring Boot 实战与原理分析视频课程

    Spring Boot 实战与原理分析视频课程 链接:https://pan.baidu.com/share/init?surl=PeykcoeqZtd1d9lN9V_F-A 提取码: 关注公众号[G ...

  3. Spring Boot 实战 —— MyBatis(注解版)使用方法

    原文链接: Spring Boot 实战 -- MyBatis(注解版)使用方法 简介 MyBatis 官网 是这么介绍它自己的: MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过 ...

  4. 《Spring Boot实战》笔记(目录)

    目录 目 录第一部分 点睛Spring 4.x第1 章 Spring 基础 .............................................................. ...

  5. spring boot实战(第十三篇)自动配置原理分析

    前言 spring Boot中引入了自动配置,让开发者利用起来更加的简便.快捷,本篇讲利用RabbitMQ的自动配置为例讲分析下Spring Boot中的自动配置原理. 在上一篇末尾讲述了Spring ...

  6. spring boot实战(第十二篇)整合RabbitMQ

    前言 最近几篇文章将围绕消息中间件RabbitMQ展开,对于RabbitMQ基本概念这里不阐述,主要讲解RabbitMQ的基本用法.Java客户端API介绍.spring Boot与RabbitMQ整 ...

  7. Spring Boot 快速入门

    Spring Boot 快速入门 http://blog.csdn.net/xiaoyu411502/article/details/47864969 今天给大家介绍一下Spring Boot MVC ...

  8. Spring Boot快速入门(二):http请求

    原文地址:https://lierabbit.cn/articles/4 一.准备 postman:一个接口测试工具 创建一个新工程 选择web 不会的请看Spring Boot快速入门(一):Hel ...

  9. 《spring boot 实战》读书笔记

    前言:虽然已经用spring boot开发过一套系统,但是之前都是拿来主义,没有系统的,全面的了解过这套框架.现在通过学习<spring boot实战>这本书,希望温故知新.顺便实现自己的 ...

随机推荐

  1. Jenkins + Pipeline + Git + Maven (十)

    一.准备环境介绍 192.168.5.71 # gitlab 仓库IP 192.168.5.72 # 开发环境,用于提交代码等 192.168.5.73 # tomcat 部署solo服务站点 192 ...

  2. (八)OpenStack---M版---双节点搭建---Cinder安装和配置

    ↓↓↓↓↓↓↓↓视频已上线B站↓↓↓↓↓↓↓↓ >>>>>>传送门 1.创建数据库并授权 2.获得admin凭证执行管理员命令并创建服务证书 3.创建块存储设备AP ...

  3. layer.js的一些常用的技巧

    我们在一些弹出框或者其他的一些表单的样式逻辑当中会用到layer的组件,针对我遇到的问题做个小结 1.在使用checkbox进行多选的时候,默认的layer会有一个对勾的样式,但是我们通常在做单选或者 ...

  4. true false

    #include<stdio.h> int main(void) { /* true 1 false 0 */ printf( == ); printf( > ); printf( ...

  5. 跟着ALEX 学python day4集合 装饰器 生成器 迭代器 json序列化

    文档内容学习于 http://www.cnblogs.com/xiaozhiqi/  装饰器 : 定义: 装饰器 本质是函数,功能是装饰其他函数,就是为其他函数添加附加功能. 原则: 1.不能修改被装 ...

  6. docker-nginx

    docker pull nginx docker run --name nginx -p 8080:80 -d nginx mkdir -p /data/nginx/www /data/nginx/l ...

  7. 201871010126 王亚涛 《面向对象程序设计 Java》 第十五周学习总结

    内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/11 ...

  8. day11_7.11 闭包函数与装饰器

    补充: callable 代表可调用的,加括号可以执行.(函数或者类) import this  查看python之禅 一.闭包函数 所谓闭包函数,就是定义在函数内部的函数,也就是函数定义的嵌套.而在 ...

  9. zz:一个框架看懂优化算法之异同 SGD/AdaGrad/Adam

    首先定义:待优化参数:  ,目标函数: ,初始学习率 . 而后,开始进行迭代优化.在每个epoch  : 计算目标函数关于当前参数的梯度:  根据历史梯度计算一阶动量和二阶动量:, 计算当前时刻的下降 ...

  10. Codeforces Round #607 (Div. 2) 题解

    Suffix Three Azamon Web Services Cut and Paste Beingawesomeism Jeremy Bearimy Miss Punyverse Suffix ...