Spring Boot节省了配置吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot节省了配置吗?相关的知识,希望对你有一定的参考价值。
参考技术A 当我们提到Spring Boot的时候,都会朗朗上口“约定大于配置”。当我细想一下Spring Boot大约节省了哪些配置的时候,突然卡了壳。想了解Spring Boot节约了哪些配置,我们就得知道不使用Spring Boot需要配置什么。拿一个SSM的项目来举个例子吧。
首先是spring。
然后是Spring MVC。
最简单的spring + spring mvc配置大概就是这样了,接下来看看spring Boot的配置。
在pom.xml中加入web的模块包就好了。
然后在appplication.properties中加入
server.port=8081
一个简单的web项目就配置好了。
确实省了好多配置。
对Spring Boot还陌生吗?
Spring Framework 饱受非议的一点就是大量的XML配置以及复杂的依赖管理,开发人员不仅需要编写XML,而且在一些场景中需要编写繁琐的import语句,Boot描述了如何使用该框架在140个字符内实现可运行的web应用,从而获得了极大的关注度。
为什么要使用Spring Boot
答: Spring Boot基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目周期。
Spring Boot的特点
- 为基于Spring的开发提供更快的入门体验
- 开箱即用,没有代码生成,也无需XML配置。同时也可以修改默认值来满足特定的需求
- 提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等
- SpringBoot不是对Spring功能上的增强,而是提供了一种快速使用Spring的方式
IDEA如何搭建SpringBoot项目
本身SpringBoot就是一个Maven项目,以上工具的方式,只是生成了一些默认的内容,如以下项目结构为工具生成
- 创建一个普通的maven项目路
- 在resources包下创建一个static包和public包,生成两个空文件夹,然后再生成一个Spring Boot的配置文件,默认为空,并在org.example下写一个启动类如:
3. 配置pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 默认使用的Spring Framework版本为5.2.10.RELEASE -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>org.example</groupId>
<artifactId>springboot-study</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- spring-boot-starter-web: 基于SpringBoot开发的依赖包,
会再次依赖spring-framework中基本依赖包,aop相关依赖包,web相关依赖包,
还会引入其他如json,tomcat,validation等依赖 -->
<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>
<!-- 添加 Undertow 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
<!--引入AOP依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!-- spring-boot-devtools: SpringBoot的热部署依赖包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<!-- 不能被其它模块继承,如果多个子模块可以去掉 -->
<optional>true</optional>
</dependency>
<!-- lombok: 简化bean代码的框架 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- spring-boot-starter-test: SpringBoot测试框架 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<!-- SpringBoot的maven打包插件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- 明确指定一些插件的版本,以免受到 maven 版本的影响 -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.3</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
</plugin>
</plugins>
</build>
</project>
注意:
- SpringBoot引入的是内嵌式服务器Tomcat9.0.39,该版本的Tomcat内嵌服务器,在启
动时为了提高性能会加载本地库(需要下载该库文件),并且会使用 JDK9 以上版本的API,在启动就会
报错(抛异常),虽然不影响使用,但是体验总归不太好。
2.可以改用另一种服务器,Undertow,该 Web服务器是红帽公司(RedHat)采用 Java 开发的灵活的高
性能 Web 服务器,它具有如下特性:
1). 完全内嵌式的Web服务器,直接使用 API 就可以启动一个 Web 服务器。
2). 完全兼容 Java EE Servlet 4 和低级非堵塞的处理器。
3). 提供包括阻塞和基于 NIO 的非堵塞机制。
在高并发请求的系统中,从性能测试的对比数据上看,Undertow 比 Tomcat 在内存和性能的表现更优,目前很多使用SpringBoot 的项目都将默认内嵌的 Tomcat 服务器更换为了 Undertow。 在SpringBoot中更换 Web 服务器非常方便,只需要调整 Maven 依赖,移除默认内嵌的 Tomcat 服务器,加入 Undertow 服务器即可,而使用上和 Tomcat 没什么不同。
基于SpringBoot项目的Web开发说明
嵌入式的Web服务器:SpringBoot 已经集成了 Tomcat,以后就不用像传统 Web 开发那样还需要下载一个 Tomcat程序,配置启动了。只需要启动生成的启动类即可。
- 默认的Web资源文件夹
SpringBoot 默认会使用 src/main/resources 目录下的如下文件夹作为Web资源文件夹:
- /static:静态资源文件夹,如html,js,css等存放
- /public:静态资源文件夹,同上
注:在以上路径中的资源,服务路径不需要在前边再加 /static,/public。如在 static 文件夹下的
home.html ,服务路径为:/home.html
如果是使用普通Maven项目搭建,可以自行创建以上文件夹,在 src/main/resources 下创建
public 和 static 文件夹即可。
-
默认自动扫描
SpringBoot默认会扫描启动类所在包,只要位于该包以下的使用了Spring注解的类,都可以注册到容器
中,如以前学过的@Controller,@Service等 -
默认配置文件
SpringBoot默认使用 src/main/resource/application.properties 作为启动的配置文件,可以自
定义如启动端口等等配置。
如果是使用普通Maven项目搭建,在 src/main/resources 下创建 application.properties ,内容
为空即可。 -
默认上下文路径
SpringBoot启动的Web项目,应用上下文路径默认为 / -
常用配置
以上是关于Spring Boot节省了配置吗?的主要内容,如果未能解决你的问题,请参考以下文章