<返回更多

为什么Java程序员必须要会SpringBoot?

2020-07-11    
加入收藏

各位志同道合的朋友们大家好,我是一个一直在一线互联网踩坑十余年的编码爱好者,现在将我们的各种经验以及架构实战分享出来,如果大家喜欢,就关注我,一起将技术学深学透,我会每一篇分享结束都会预告下一专题

为什么要用 Spring Boot?

Spring Boot 来自于 Spring 大家族,是 Spring 官方团队(Pivotal 团队)提供的全新框架,它的诞生解决了 Spring 框架使用较为繁琐的问题。Spring Boot 的核心思想是约定优于配置,让开发人员不需要配置任何 XML 文件,就可以像 Maven 整合 Jar 包一样,整合并使用所有框架。

Spring Boot 特性

Spring Boot 2 对系统环境的要求

Spring Boot 使用

在开始之前,我们先来创建一个Spring Boot 项目。

Spring Boot 有两种快速创建的方式:Spring 官网在线网站创建和 IntelliJ IDEA 的 Spring Initializr 创建,下面分别来看。

创建 Spring Boot 项目

1)在线网站创建

在浏览器输入 https://start.spring.io,页面打开如下图所示:

为什么Java程序员必须要会SpringBoot?

 


为什么Java程序员必须要会SpringBoot?

 

填写相应的项目信息,选择对应的 Spring Boot 和 Java 版本点击 “Generate the project”按钮下载项目压缩文件,解压后用 IDEA 打开即可。

其中 Group 和 Artifact 是 Maven 项目用来确认依赖项目的标识,比如:

‹dependency›
    ‹groupId›org.springframework‹/groupId›
    ‹artifactId›spring-core‹/artifactId›
    ‹version›4.1.6.RELEASE‹/version›
‹/dependency›
为什么Java程序员必须要会SpringBoot?

 

Group 对应的是配置文件的 groupId,相当于项目的包名;而 Artifact 对应的是配置文件的 artifactId,相当于项目名。

2)使用 IntelliJ IDEA 创建

① 新建项目 → 选择 Spring Initialzr,如下图所示:

为什么Java程序员必须要会SpringBoot?

 


为什么Java程序员必须要会SpringBoot?

 

② 点击 Next 按钮,填写对应的项目信息(和在线网站创建的字段基本相同),如下图所示:

为什么Java程序员必须要会SpringBoot?

 


为什么Java程序员必须要会SpringBoot?

 

③ 点击 Next 按钮,选择相应的依赖信息,如下图所示:

为什么Java程序员必须要会SpringBoot?

 


为什么Java程序员必须要会SpringBoot?

 

④ 点击 Next 按钮,选择项目保存的路径,点击 Finish 创建项目完成,如下图所示:

为什么Java程序员必须要会SpringBoot?

 


为什么Java程序员必须要会SpringBoot?

 

创建一个 Web 应用

1)pom.xml 中添加 Web 模块的依赖,如下所示:

‹dependency›
  ‹groupId›org.springframework.boot‹/groupId›
  ‹artifactId›spring-boot-starter-web‹/artifactId›
‹/dependency›
为什么Java程序员必须要会SpringBoot?

 

2)创建后台代码

import org.springframework.web.bind.annotation.RequestMApping;
import org.springframework.web.bind.annotation.RestController;
 
@RestController
public class HelloController {
    @RequestMapping("/index")
    public String index(String name) {
        return "Hello, " + name;
    }
}
为什么Java程序员必须要会SpringBoot?

 

3)启动并访问项目

项目的启动类是标识了 @Spring BootApplication 的类,代码如下所示:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringbootlearningApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootlearningApplication.class, args);
    }
}
为什么Java程序员必须要会SpringBoot?

 

启动并访问 http://localhost:8080/index?name=laowang 效果如下:

为什么Java程序员必须要会SpringBoot?

 


为什么Java程序员必须要会SpringBoot?

 

到目前为止 Spring Boot 的项目就创建并正常运行了。

设置配置文件

Spring Boot 的配置文件,是 resources 目录下 application.properties 文件,如下图所示:

为什么Java程序员必须要会SpringBoot?

 


为什么Java程序员必须要会SpringBoot?

 

可以在配置文件中设置很多关于 Spring 框架的配置,格式如下配置所示:

# 项目运行端口
server.port=8086
# 请求编码格式
server.tomcat.uri-encoding=UTF-8

Spring Boot 的其他功能开发和 Spring 相同(Spring Boot 2 是基于 Spring Framework 5 构建的),本文就不过多的介绍了,感兴趣的朋友可以点击这里查看

Spring Boot 发布

Spring Boot 项目的发布方式有两种:

内置容器运行

1)打包应用

使用窗口命令,在 pom.xml 同级目录下:

mvn clean package -Dmaven.test.skip=true

Dmaven.test.skip=true 表示不执行测试用例,也不编译测试用例类。

2)启动应用

后台启动 Java 程序, 命令如下:

nohup java -jar springbootlearning-0.0.1-SNAPSHOT.jar &

停止程序

首先查询 Java 程序的 pid

ps -ef|grep java

再停止程序

kill -9 pid

操作如下图所示:

为什么Java程序员必须要会SpringBoot?

 


为什么Java程序员必须要会SpringBoot?

 

扩展内容

指定程序运行日志文件

nohup java -jar springbootlearning-0.0.1-SNAPSHOT.jar 1››logs 2››errlog &

其中:

外置容器(Tomcat)运行

1)排除内置 Tomcat

‹dependency›
    ‹groupId›org.springframework.boot‹/groupId›
    ‹artifactId›spring-boot-starter-tomcat‹/artifactId›
    ‹scope›provided‹/scope›
‹/dependency›
为什么Java程序员必须要会SpringBoot?

 

将 scope 属性设置为 provided,表示打包不会包含此依赖。

2)配置启动类

在项目的启动类中继承 Spring BootServletInitializer 并重写 configure() 方法:

@SpringBootApplication
public class PackageApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(PackageApplication.class);
    }
    public static void main(String[] args) {
        SpringApplication.run(PackageApplication.class, args);
    }
}
为什么Java程序员必须要会SpringBoot?

 

3)打包应用

使用窗口命令,在 pom.xml 同级目录下:

mvn clean package -Dmaven.test.skip=true

4)部署应用

打包完成会在 target 目录下生成:项目名 + 版本号.war 文件,复制到 Tomcat 的 webapps 目录下,运行 Tomcat 即可。

相关面试题

1.Spring Boot 2.0 支持最低的 JDK 版本是?

A:JDK 6B:JDK 7C:JDK 8D:JDK 9

答:C

2.Spring、Spring Boot、Spring Cloud 是什么关系?

答:它们都是来自于 Spring 大家庭,Spring Boot 是在 Spring 框架的基础上开发而来,让更加方便使用 Spring;Spring Cloud 是依赖于 Spring Boot 而构建的一套微服务治理框架。

3.Spring Boot 项目有哪些优势?

答:Spring Boot 项目优势如下:

4.如何将 Spring Boot 项目打包成 war 包?

答:在 pom.xml 里设置 ‹packaging›war‹/packaging› 。

5.在 Maven 项目中如何修改打包名称?

答:在 pom.xml 文件的 build 节点中,添加 finalName 节点并设置为要的名称即可,配置如下:

‹build›
  ‹finalName›warName‹/finalName›
‹/build›

6.Ant、Maven、Gradle 有什么区别?

答:Ant、Maven、Gradle 是 Java 领域中主要有三大构建工具,它们的区别如下:

Spring Boot 官方支持 Maven 和 Gradle 作为项目构建工具。Gradle 虽然有更好的理念,但是相比 Maven 来讲其行业使用率偏低,并且 Spring Boot 官方默认使用 Maven。

7.Maven 如何设置发布的包名?

答:在 build 节点下设置 finalName 就是发布的包名,如下代码所示:

‹build›
     ‹finalName›biapi‹/finalName›
‹/build›

8.Spring Boot 热部署有几种方式?

答:Spring Boot 热部署主要有两种方式:Spring Loaded、Spring-boot-devtools。

方式 1:Spring Loaded

在 pom.xml 文件中添加如下依赖:

‹plugin›
      ‹groupId›org.springframework.boot‹/groupId›
      ‹artifactId›spring-boot-maven-plugin‹/artifactId›
      ‹dependencies›
        ‹dependency›
          ‹groupId›org.springframework‹/groupId›
          ‹artifactId›springloaded‹/artifactId›
          ‹version›1.2.6.RELEASE‹/version›
        ‹/dependency›
      ‹/dependencies›
      ‹configuration›
        ‹mainClass›此处为入口类‹/mainClass›
      ‹/configuration›
 ‹/plugin›
为什么Java程序员必须要会SpringBoot?

 

方式 2:Spring-boot-devtools

在 pom.xml 文件中添加如下依赖:

‹dependency›
      ‹groupId›org.springframework.boot‹/groupId›
      ‹artifactId›spring-boot-devtools‹/artifactId›
      ‹scope›provided‹/scope›
      ‹optional›true‹/optional›
‹/dependency›
为什么Java程序员必须要会SpringBoot?

 

9.Spring Boot 2.0 可以在 Tomcat 7 运行吗?为什么?

答:Spring Boot 2.0 无法在 Tomcat 7 上运行。因为 Spring Boot 2.0 使用的是 Spring Framework 5,Spring Framework 5 使用的是 Servlet 3.1,而 Tomcat 7 最高支持到 Servlet 3.0,所以 Spring Boot 2.0 无法在 Tomcat 7 上运行。

10.如何使用 Jetty 代替 Tomcat?

答:在 spring-boot-starter-web 移除现有的依赖项,添加 Jetty 依赖,配置如下:

‹dependency›
    ‹groupId›org.springframework.boot‹/groupId›
    ‹artifactId›spring-boot-starter-web‹/artifactId›
    ‹exclusions›
        ‹exclusion›
            ‹groupId›org.springframework.boot‹/groupId›
            ‹artifactId›spring-boot-starter-tomcat‹/artifactId›
        ‹/exclusion›
    ‹/exclusions›
‹/dependency›
‹dependency›
    ‹groupId›org.springframework.boot‹/groupId›
    ‹artifactId›spring-boot-starter-jetty‹/artifactId›
‹/dependency›
为什么Java程序员必须要会SpringBoot?

 

11.Spring Boot 不支持以下哪个内嵌容器?

A:TomcatB:JettyC:UndertowD:Nginx

答:D

题目解析:Jetty 容器支持如下:

‹dependency›
   ‹groupId›org.springframework.boot‹/groupId›
   ‹artifactId›spring-boot-starter-web‹/artifactId›
   ‹exclusions›
      ‹exclusion›
         ‹groupId›org.springframework.boot‹/groupId›
         ‹artifactId›spring-boot-starter-tomcat‹/artifactId›
      ‹/exclusion›
   ‹/exclusions›
‹/dependency›
‹dependency›
   ‹groupId›org.springframework.boot‹/groupId›
   ‹artifactId›spring-boot-starter-jetty‹/artifactId›
‹/dependency›
为什么Java程序员必须要会SpringBoot?

 

Undertow 容器支持如下:

‹dependency›
    ‹groupId›org.springframework.boot‹/groupId›
    ‹artifactId›spring-boot-starter-web‹/artifactId›
    ‹exclusions›
        ‹exclusion›
            ‹groupId›org.springframework.boot‹/groupId›
            ‹artifactId›spring-boot-starter-tomcat‹/artifactId›
        ‹/exclusion›
    ‹/exclusions›
‹/dependency›
‹dependency›
    ‹groupId›org.springframework.boot‹/groupId›
    ‹artifactId›spring-boot-starter-undertow‹/artifactId›
‹/dependency›
为什么Java程序员必须要会SpringBoot?

 

12.Spring Boot 中配置文件有几种格式?

答:Spring Boot 中有 .properties 和 .yml 两种配置文件格式,它们主要的区别是书写格式不同。

.properties 配置文件格式如下:

app.user.name = hellojava

.yml 配置文件格式如下:

app:
    user:
        name: hellojava

13.项目中有两个配置 application.properties 和 application.yml,以下说法正确的是?

A:application.properties 的内容会被忽略,只会识别 application.yml 的内容。B:两个配置文件同时有效,有相同配置时,以 application.properties 文件为主。C:application.yml 的内容会被忽略,只会识别 application.properties 的内容。D:两个配置文件同时有效,有相同配置时,以 application.yml 文件为主。

答:B

14.RequestMapping 和 GetMapping 有什么不同?

答:RequestMapping 和 GetMapping 区别如下:

15.以下关于 @RestController 和 @Controller 说法正确的?

A:@Controller 返回 JSON 数据B:@RestController 返回 JSON 数据C:@APIController 返回 JSON 数据D:以上都对

答:B

16.Spring Cache 常用的缓存注解有哪些?

答:Spring Cache 常用注解如下:

17.Spring Boot Admin 和 Spring Boot Actuator 的关系是什么?

答:Spring Boot Admin 使用了 Spring Boot Actuator 接口进行 UI 美化封装的监控工具,它以图形化的方式查询单个应用的详细状态,也可以使用 Spring Boot Admin 来监控整个集群的状态。

18.如何理解 Spring Boot 中的 Stater?

答:Stater 可以理解为启动器,它是方便开发者快速集成其他框架到 Spring 中的一种技术。比如,spring-boot-starter-data-jpa 就是把 JPA 快速集成到 Spring 中。

19.常见的 starter 有哪些?

答:常见的 starter 如下:

20.Spring Boot Starter JDBC 和 Spring JDBC 有什么关系?

答:spring-boot-starter-jdbc 是 Spring Boot 针对 JDBC 的使用提供了对应的 Starter 包,在 Spring JDBC 上做了进一步的封装,方便在 Spring Boot 生态中更好的使用 JDBC。

21.Spring Boot 有哪几种读取配置的方式?

答:Spring Boot 可以通过 @Value、@Environment、@ConfigurationProperties 这三种方式来读取。

例如,配置文件内容如下:

app.name=中文

① Value 方式

@Value("${app.name}")
private String appName;

② Environment 方式

public class HelloController {
    @Autowired
    private Environment environment;
    @RequestMapping("/index")
    public String index(String hiName) {
        // 读取配置文件
        String appName = environment.getProperty("app.name");
        return "Hello, " + hiName + " |@" + appName;
    }
}
为什么Java程序员必须要会SpringBoot?

 

③ ConfigurationProperties 方式

@ConfigurationProperties(prefix = "app")
public class HelloController {
    // 读取配置文件,必须有 setter 方法
    private String name;
    public void setName(String name) {
        this.name = name;
    }
    @RequestMapping("/index")
    public String index(String hiName) {
        System.out.println("appname:" + name);
        return "Hello, " + hiName + " |@" + appName;
    }
}
为什么Java程序员必须要会SpringBoot?

 

22.使用 @Value 读取中文乱码是什么原因?如何处理?

答:这是因为配置文件的编码格式导致的,需要把编码格式设置为 UTF-8,如下图所示:

为什么Java程序员必须要会SpringBoot?

 


为什么Java程序员必须要会SpringBoot?

 

设置完成之后,重新启动 IDEA 就可以正常显示中文了。

总结

通过本文我们学习了 Spring Boot 的两种创建方式:在线网站创建和 IntelliJ IDEA 方式创建。知道了 Spring Boot 发布的两种方式:内置容器和外置 Tomcat,知道了 Spring Boot 项目特性,以及配置文件 .properties 和 .yml 的差异,掌握了读取配置文件的三种方式:@Value、@Environment、@ConfigurationProperties。

下一篇:MyBatis 核心知识

在公众号[架构师修炼]菜单中可自行获取专属架构视频资料,包括不限于 java架构、Python系列、人工智能系列、架构系列,以及最新面试、小程序、大前端均无私奉献,你会感谢我的哈

往期精选(全集WX公号【架构师修炼】)

分布式数据之缓存技术,一起来揭开其神秘面纱

分布式数据复制技术,今天就教你真正分身术

数据分布方式之哈希与一致性哈希,我就是个神算子

分布式存储系统三要素,掌握这些就离成功不远了

想要设计一个好的分布式系统,必须搞定这个理论

分布式通信技术之发布订阅,干货满满

分布式通信技术之远程调用:RPC

消息队列Broker主从架构详细设计方案,这一篇就搞定主从架构

消息中间件路由中心你会设计吗,不会就来学学

消息队列消息延迟解决方案,跟着做就行了

秒杀系统每秒上万次下单请求,我们该怎么去设计

【分布式技术】分布式系统调度架构之单体调度,非掌握不可

CDN加速技术,作为开发的我们真的不需要懂吗?

烦人的缓存穿透问题,今天教就你如何去解决

分布式缓存高可用方案,我们都是这么干的

每天百万交易的支付系统,生产环境该怎么设置JVM堆内存大小

你的成神之路我已替你铺好,没铺你来捶我

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>