精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件

内容简介:本文介绍 Spring Boot 的配置文件和配置管理,以及介绍了三种读取配置文件的方式,并进行代码演示。

在 Spring Boot 出现之前,一个 Spring 项目普遍会存在很多个配置文件,例如有配置与 web 服务器相关信息的 web.xml,有配置 Spring 本身的各种 application-xxx.xml,一份 xxx 对应 Sping 的一个功能模块,例如 MVC 和 Data Source,还有第三方插件 如 log4j 等配置文件。此外,应用程序本身也可能存在多个配置文件,刚去数这些配置文件的数目都让人感觉晕脑袋,更别说去管理和配置它们了。

Spring Boot 技术的到来,大大地简化了这些配置文件的管理和读取。对于 Spring.配置信息,它所支持的第三方框架的配置信息,应用自定义的配置信息,通通都整合了在一个application.properties 文件中,过去可能存在近10个的配置文件,如今只需要一个即可。不用再像以前那样,配置信息散落在应用的不同配置文件。这显然大大的简化了配置信息的管理工作,当然也相应地减少了出错的概率。

1、Web 服务器的配置

Spring Boot 启动的默认 web 服务器是 Tomcat,而端口为 8080,上下文是“/”。对于这些默认设置,我们都可以在 appication.properties 中重新配置。

我们现在在 appication.properties 中添加两行代码

server.port=9090

server.servlet.context-path=/home



【图1 设置服务器属性】

按快捷键 Shift + F10 运行程序,输入原先的 网址 http://localhost:8080/hello,发现找不到服务器。原因是我们已经利用上面两行代码修改的 Tomcat 的端口号和应用的上下文。我们输入以下网址就可以看到结果了。

http://localhost:9090/home/hello



【图2 Hello, Spring Boot】

2、用 Undertow 替换默认的 Tomcat 服务器

Spring Boot 默认内置的 web 服务器是 Tomcat。事实上,它支持三种嵌套的 web 服务器,另外两种是 Jetty 和 Undertow,而 Undertow 性能最优,可以将它设置为 web 服务器,取代另外两种。

Spring Boot 的 spring-boot-starter-web 默认嵌套了 Tomcat。当我们更换为其它 web 服务器时,如更换为 Undertow,需要把 Tomcat 给屏蔽掉。同时,还需要引进相应 web 服务器对应的 starter。

现在我们尝试把 web 服务器切换为 Undertow,像下面那样修改 pom.xml



【图3 配置 Undertow 】

网上所查到的切换 web 服务器方案大多如上,但是在 IDEA 中编译运行程序,它总是

顽固地使用 Tomcat,而不启用 Undertow。这时候有足够理由怀疑这是 IDEA 的缓存问题所造成的,需要像下面这样刷新一下 IDEA 的 Maven 项目。



【图4 IDEA 刷新 Maven 项目】

刷新 Maven 项目后,然后再使用 Maven 来编译一下程序,像下图那样双击 install。



【图5 Maven Install 】

编译完之后,按快捷键 Shift + F10 运行程序,此时可以看见日志输出显示 Undertow 已经成功启动了。



【图6 Undertow 成功启动】

3、读取 Spring Boot 的配置

可以在应用中读取 application.properties 的配置文件,并获取其中配置信息,以供应用程序使用。事实上 Spring Boot 提供了三种方式来读取配置文件。

第 1 种方法是通过 Environment 类 的 getPropery() 方法读取。

第 2 种方法是通过 @Value 注解来自动注入属性值。

第 3 种方法是将一组属性自动注入到一个配置类中。

我们先在 application.properties 中加入如下四行配置,然后分别用三种方法来读取。

app.message1=Hi, Felix!

app.message2=You are really an IT expert.

app.num1=4

app.num2=5

现在修改 HelloWorld 的 sayHello 方法,使用 @Value 注解的方法读取 app.message1,用 Enviornment.getProperty() 读取 app.message2,用 @Autowired 把Environment 注入进来,就可以调用它的 getProperty() 方法了。代码如下:



【图7 Environment & @Value】

启动程序后,成功用两种方式读出配置文件的数据,在浏览器的输出结果如下:



【图8 Felix IT Expert】

第 3 种读取配置文件的方法是将一组属性自动注入到一个配置类中,这时需要借助注解 @ConfigurationProperties 和 @Configuration,我们用这种方式读取 app.num1 和 app.num2 的值,并对它们求和,然后输出结果。还是上代码。



【图9 Configuration Properties 】

AppConfig 类使用了两个注解 @ConfigurationProperties 和 @Configuration,在 @ConfigurationProperties 中输入了参数 “app”,它是属性 app.num1 和 app.num2 的前缀,从以下代码可以看出 AppConfig 就是一个普通的 POJO 文件,只不过是加上了注解。

接下来再看如何使用 AppConfig 这个类。现在我们新建一个求和的控制器 SumController,使用注解 @Autowired 把 AppConfig 自动注入进来,就可以使用了,是不是很方便、很简单。



【图10 求和控制器】

按 Shift + F10 启动程序,输入 Sum 方法对应的 url http://localhost:9090/home/sum,即可看到结果。



【图11 求和结果】

好了,飞仙时空写的第三篇 Spring Boot 到此结束,欢迎转发和关注。

Enjoy coding.

精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件的更多相关文章

  1. Spring实现初始化和销毁bean之前进行的操作,三种方式

    关于在spring  容器初始化 bean 和销毁前所做的操作定义方式有三种: 第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作 第二 ...

  2. java 4种方式读取配置文件 + 修改配置文件

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] 方式一采用ServletContext读取读取配置文件的realpath然后通过文件流读取出来 方式二采用ResourceB ...

  3. 【spring Boot】spring boot获取资源文件的三种方式【两种情况下】

    首先声明一点,springboot获取资源文件,需要看是 1>从spring boot默认的application.properties资源文件中获取 2>还是从自定义的资源文件中获取 带 ...

  4. Spring笔记03(Spring创建对象的三种方式)

    1.创建对象的三种方式和bean的生命周期的验证: Animal接口代码: package cn.pb.dao; /** * 动物接口 */ public interface Animal { //吃 ...

  5. spring学习(03)之bean实例化的三种方式

    bean实体例化的三种方式 在spring中有三中实例化bean的方式: 一.使用构造器实例化:(通常使用的一个方法,重点) 二.使用静态工厂方法实例化: 三.使用实例化工厂方法实例化 第一种.使用构 ...

  6. spring @Value 获取配置文件为 null 常见的几种方式

    第一种方式: xx.properties 属性名称错误,未与@Value("${xxx}") 进行对应 第二种方式: 该类未注入到spring bean容器中 @Component ...

  7. 【Spring】的【bean】管理(XML配置文件)【Bean实例化的三种方式】

    Bean实例化的三种方式 说明:通过配置文件创建对象就称为Bean实例化. 第一种:使用类的无参构造创建(重点) 实体类 package com.tyzr.ioc; public class User ...

  8. Spring中bean实例化的三种方式

    之前我已经有好几篇博客介绍Spring框架了,不过当时我们都是使用注解来完成注入的,具体小伙伴可以参考这几篇博客(Spring&SpringMVC框架案例).那么今天我想来说说如何通过xml配 ...

  9. 【Java EE 学习 52】【Spring学习第四天】【Spring与JDBC】【JdbcTemplate创建的三种方式】【Spring事务管理】【事务中使用dbutils则回滚失败!!!??】

    一.JDBC编程特点 静态代码+动态变量=JDBC编程. 静态代码:比如所有的数据库连接池 都实现了DataSource接口,都实现了Connection接口. 动态变量:用户名.密码.连接的数据库. ...

随机推荐

  1. NXNSAttack漏洞简析

    漏洞简介: 该漏洞为DNS 放大攻击,是 DDoS 攻击,攻击者利用 DNS 服务器中的漏洞将小查询转换为可能破坏目标服务器的更大负载. 在 NXNSAttack 的情况下,远程攻击者可以通过向易受攻 ...

  2. VsCode中代码折叠快捷键

    ctrl+K  ctrl+[  折叠本级 ctrl+K  ctrl+]  取消折叠本级 ctrl+K  ctrl+0  折叠全部 ctrl+K  ctrl+J  取消折叠全部

  3. Spring学习日记01_IOC_xml的三种注入方式

    什么是IOC 控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理 使用IOC目的:为了耦合度降低 做入门案例就是IOC实现 IOC底层原理 xml解析 工厂模式 反射 原始方式 cla ...

  4. 用VSCode终端实现重定向比较程序输出和正确输出

    在刷 OJ 题目或者进行编程考试或比赛时,经常需要对编写好的程序进行测试,即运行编写好的程序,输入样例输入或者自己编写的输入数据,查看程序输出结果和样例输出或者正确输出是否一致.这种方法有很多弊端,当 ...

  5. 跟我一起学Go系列:Go gRPC 安全认证方式-Token和自定义认证

    Go gRPC 系列: 跟我一起学Go系列:gRPC安全认证机制-SSL/TLS认证 跟我一起学 Go 系列:gRPC 拦截器使用 跟我一起学 Go 系列:gRPC 入门必备 接上一篇继续讲 gRPC ...

  6. [心得体会]spring事务源码分析

    spring事务源码分析 1. 事务的初始化注册(从 @EnableTransactionManagement 开始) @Import(TransactionManagementConfigurati ...

  7. tomcat shutdown后,进程还存在linux系统中的解决办法

    基本原理为启动tomcat时记录启动tomcat的进程id(pid),关闭时强制杀死该进程 第一步 :vim修改tomcat下bin/catalina.sh文件,添加点东西,主要是记录tomcat的p ...

  8. php解决约瑟夫环

    今天偶遇一道算法题 "约瑟夫环"是一个数学的应用问题:一群猴子排成一圈,按1,2,-,n依次编号.然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数, 再数到第m只,在把 ...

  9. nmon工具安装及nmon analyser的使用

    步骤一:下载nmon及nmon analyser工具 nmon:http://nmon.sourceforge.net/pmwiki.php 根据自己系统的版本下载相应的版本即可 nmon analy ...

  10. Xshell怎么连接数据库

    之前一直用Navicat Premium链接数据库,其实在xshell也可以链接数据库,本文将先介绍如何用xshell链接数据库的方法. 1.打开xshell,连接上 输入指令:mysql -h 19 ...