峰哥说技术:04-Spring Boot基本配置
Spring Boot深度课程系列
峰哥说技术—2020庚子年重磅推出、战胜病毒、我们在行动
04 Spring Boot基本配置
1)容器的相关配置
在Spring Boot中可以内置Tomcat、Jetty、undertow、Netty等容器,当开发者在pom.xml中spring-boot-starter-web依赖后,会默认配置Tomcat容器。如果需要对Tomcat进行进一步的配置,可以在application.properties中进行如下的配置。
#配置端口号 |
在上面的配置中有解释说明,更多的配置请参考spring boot的官网。这里给大家列出详细的地址。
其他容器的配置,这里举例说明Jetty容器的配置。它的主要步骤分为两步。分别如下
A) 在spring-boot-starter-web中排除掉tomcat
<dependency> |
B)在pom.xml中添加spring-boot-starter-jetty依赖即可。
<dependency> |
启动服务后,在控制台发现如下信息,说明配置成功。
切换容器,可以清楚的看到在application.properties中的配置也不需要修改,它也会在新的容器中起作用。
2)Spring的属性注入
在spring boot中采用了大量的自动配置,但是很多时候不可避免要使用用户的自定义配置,我们一般可以在application.properties或者application.yml文件中进行配置即可。至于.properties和.yml的选择我们在后面进行介绍。application.properties可以出现在4个位置。
A)项目根目录的config文件夹
B)项目的根目录
C)classpath的config文件夹
D)classpath下面,这个是默认值。
这里不给大家演示,有兴趣的同学可以自行尝试。它的覆盖顺序就是上面的所说的顺序。如果是.yml文件,跟这个顺序是一样的。
由于 Spring Boot 源自 Spring ,所以 Spring 中存在的属性注入,在 Spring Boot 中一样也存在。由于 Spring Boot 中,默认会自动加载 application.properties 文件,所以简单的属性注入可以直接在这个配置文件中写。
案例:演示普通属性的注入,在工程中创建包entity,并编写Book类,添加相关属性,同时修改HelloController。
A)编写Book类
package com.java.chapter01.entity; import org.springframework.beans.factory.annotation.Value; @Component //省略getter和setter |
B)修改HelloController
package com.java.chapter01.controller; import com.java.chapter01.entity.Book; @RestController |
注意:Book类必须要能被Spring容器所管理,所以添加注解@Component,然后在HelloController中用@Autowired进行注入。
C)修改application.properties文件,进行属性值的初始化操作.
#配置端口号 #普通属性的注入 |
需要注意的是,如果属性值是字符串不需要写分号。汉字会出现中文乱码问题,解决方法非常简单。如下图所示,操作即可。
最后进行测试,在浏览器输入http://localhost:9090/web01/book,最终效果如下:
一般来说,我们在 application.properties 文件中主要存放系统配置,这种自定义配置不建议放在该文件中,可以自定义 properties 文件来存在自定义配置。
案例:将上面的案例编写自定义属性文件book.properties文件,然后进行属性的注入。
A)编写自定义属性文件book.properties,放在resources文件夹下面。
#普通属性的注入 |
B)修改Book类,添加注解@PropertySource("classpath:book.properties")
@Component //getter和setter省略 |
项目截图如下所示
测试结果和上面的案例相同,这里省略。
3)类型安全的属性注入
Spring Boot 引入了类型安全的属性注入,如果采用 Spring 中的配置方式,当配置的属性非常多的时候,工作量就很大了,而且容易出错。使用类型安全的属性注入,可以有效的解决这个问题。
案例:采用属性安全的方式进行注入,使用注解@ConfigurationProperties(prefix="book"),可以省略@Value在各个属性字段的注入。
@Component //getter和setter省略 } |
4)yaml配置
yaml是JSON的超集,简洁而强大,是一种专门用来书写配置文件的语言。它可以代替application.properties。在创建一个Spring boot项目时,引入的spring-boot-starter-web依赖间接的引入了snakeyaml依赖,snakeyaml会实现对YAML配置的支持。它使用非常简单,可以利用缩进来表示层级关系,并且大小写敏感。我们只要在resources文件夹下面创建application.yml文件即可。
案例:使用.yml来实现容器的上下文和端口的配置。
实现步骤:
A)删除application.properties属性配置文件。
B)在resources文件夹下面创建application.yml。在文件中编写如下配置即可。
server: |
这里必须说明的是必须有缩进以及每个冒号后面有空格,否则配置会报错。
C)测试,在浏览器中输入:http://localhost:8080/chapter01/book.结果如下。
很显然配置文件中配置的端口号和上下文起作用了。
在yaml中可以进行复杂属性的配置,比如数组、集合、Bean,掌握这些配置,基本上就够用了。
案例:通过yml进行数组、集合和Bean的配置。
A)编写User类。
@Component //getter和setter省略... |
B)编写HelloController
@RestController |
C)编写application.yml文件
server: |
D)测试结果
从结果可以看出,对于数组我们用短横线或者直接写出逗号分隔就可以,对于List集合,用短横线。这些东西非常简单,大家稍做练习就可以掌握。
5)Profile相关知识
开发者开发项目之前,一般需要频繁的在开发环境、测试环境、生产环境直接频繁的进行切换。这个时候大量的配置需要频繁的进行修改,比如数据库的配置、redis的配置、mogodb的配置等。频繁的修改带来了巨大的工作量,Spring提供了@Profile注解,在Spring boot对该功能进行了进一步的简化操作。在Spring boot中约定不同的环境的命名规则为:application-{profile}.properties,这个占位符{profile}表示当前环境的名称。那么开发环境就是application-dev.properties,测试环境就是application-test.properties,生产环境就是application-prod.properties.
这里必须说明的是,我们如何切换这些环境呢?很简单在application.properties中加上spring.profiles.active=环境名即可。
案例:配置开发环境和生产环境,并通过profile进行激活。为了简单演示效果,我们只设置端口号,开发环境8080,生产环境9090,并进行测试。
步骤如下:
A)在resources下面创建application-pro.properties,并编写如下的配置。
server.port=9090 |
B)在resources下面创建application-dev.properties,并编写如下的配置。
server.port=8080 |
C)在resources下面创建application.properties,并编写如下的配置。
#spring.profiles.active=dev |
测试,在浏览器输入:http://localhost:9090/hello,可以看到结果。激活dev的操作类似。这里就不在进行说明,大家可以进行测试。
那么我们可以.yml方式进行吗?答案是肯定的。它支持多文档块方式,大家可以参考如下方式进行测试。
spring: |
这里需要注意的是文档块直接用三个短横线隔开即可。配置书写的时候需要注意缩进。
峰哥说技术:04-Spring Boot基本配置
峰哥说技术:04-Spring Boot基本配置的更多相关文章
- 峰哥说技术:10-Spring Boot静态资源处理
Spring Boot深度课程系列 峰哥说技术—2020庚子年重磅推出.战胜病毒.我们在行动 10 峰哥说技术:Spring Boot静态资源处理 今天我们聊聊关于 Spring Boot 中关于静 ...
- 峰哥说技术:09-Spring Boot整合JSP视图
Spring Boot深度课程系列 峰哥说技术—2020庚子年重磅推出.战胜病毒.我们在行动 09 峰哥说技术:Spring Boot整合JSP视图 一般来说我们很少推荐大家在Spring boot ...
- 峰哥说技术:08-Spring Boot整合FreeMarker视图
Spring Boot深度课程系列 峰哥说技术—2020庚子年重磅推出.战胜病毒.我们在行动 08 峰哥说技术:Spring Boot整合FreeMarker视图 前面带着大家整合了Thymelea ...
- 峰哥说技术:03-Spring Boot常用注解解读
Spring Boot深度课程系列 峰哥说技术—2020庚子年重磅推出.战胜病毒.我们在行动 03 Spring Boot常用注解解读 在Spring Boot中使用了大量的注解,我们下面对一些常用的 ...
- 峰哥说技术:01-Spring Boot介绍
Spring Boot深度课程系列 峰哥说技术—2020庚子年重磅推出.战胜病毒.我们在行动 Spring Boot介绍 A.Spring Boot是什么? 由于Spring是一个轻量级的企业开发框架 ...
- 峰哥说技术:06-手撸Spring Boot自定义启动器,解密Spring Boot自动化配置原理
Spring Boot深度课程系列 峰哥说技术—2020庚子年重磅推出.战胜病毒.我们在行动 06 峰哥说技术:手撸Spring Boot自定义启动器,解密Spring Boot自动化配置原理 Sp ...
- 峰哥说技术:02-第一个Spring Boot应用程序
Spring Boot深度课程系列 峰哥说技术—2020庚子年重磅推出.战胜病毒.我们在行动 02第一个Spring Boot应用程序 1.版本要求 集成开发环境:IntelliJ IDEA 2017 ...
- 峰哥说技术: 05-Spring Boot条件注解注解
Spring Boot深度课程系列 峰哥说技术—2020庚子年重磅推出.战胜病毒.我们在行动 05 峰哥说技术 Spring Boot条件注解 @EnableAutoConfiguration开启自 ...
- 峰哥说技术:07-SpringBoot 正好Thymeleaf视图
Spring Boot深度课程系列 峰哥说技术—2020庚子年重磅推出.战胜病毒.我们在行动 07 峰哥说技术:SpringBoot 正好Thymeleaf视图 Spring Boot视图介绍 虽然 ...
随机推荐
- StartDT AI Lab | 视觉智能引擎——从Face ID说起,浅析顾客数字化
“顾客就是上帝”,这句西谚揭示了顾客占据着商业活动中心地位这一客观规律.为了能更好地服务顾客,优化商家自身的服务与产品,对顾客的分析与需求调研一直是商业经营分析中的重中之重. 在商业互联网化.社会数字 ...
- mysql数据库-索引-长期维护
############### 索引介绍 ############## """ 1. 索引介绍 需求: 一般的应用系统,读写比例在10:1左右,而且插入操作和 ...
- 瑞星:以虚拟化安全“Hold住”企业用户
自从云计算的概念诞生的哪一天起,就吸引了无数人的目光.自从2006年开始,云计算经过了雾里看花的朦胧.众说纷纭的迷茫,到现在各类应用与服务呈现出了百花齐放的姿态,引领着信息科技迈入了新纪元,而服务器虚 ...
- python之操作数据库
一.操作mysql 首先,python3操作mysql.需要安装第三方模块pymysql,在python2中则使用的是pysqldb.这里使用pymysql. 直接使用pip install pymy ...
- 蓝桥杯-PREV45-图形排版
这是2017年蓝桥杯C组C++的压轴题,拿到之后没什么想法.但是蓝桥杯有部分分.所以直接敲了个大暴力提交上去过了一半的数据.后来想到了DP,但是没能实现出来,感觉还是有问题的.后来看了解题视频发现是预 ...
- http协议和网络模型
传输层 传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输. 在传输层有两个性质不同的协议:TCP(Transmission ControlProtocol,传输控制协议)和 UD ...
- 从广义线性模型(GLM)理解逻辑回归
1 问题来源 记得一开始学逻辑回归时候也不知道当时怎么想得,很自然就接受了逻辑回归的决策函数--sigmod函数: 与此同时,有些书上直接给出了该函数与将 $y$ 视为类后验概率估计 $p(y=1|x ...
- Mybatis--Statement Builders
SelectBuilder 的秘密 SelectBuilder 类并不神奇, 如果你不了解它的工作机制也不会有什么好的作用. 别犹豫, 让我们来看看它是怎么工作的. SelectBuilder 使用了 ...
- python ftp sftp
ftp 上传下载文件 12345678910111213141516171819202122232425262728293031323334 from ftplib import FTPimport ...
- ES6中的数组
数组是js中很重要的数据类型,虽然在 ES5 中,关于数组的方法和属性很多.但为了更加简洁.高效的操作数组,ES6 中又在数组原型上和实例上新增了一些方法. 一.Array方法 1.1 Array.f ...