Spring Boot允许使用propertities文件、yaml文件或者命令行参数作为外部配置。

命令行参数配置

Spring Boot可以基于jar包运行,打成jar包的程序可以直接通过下面的命令运行:

java -jar xx.jar

可以通以下命令修改Tomcat端口号:

java -jar xx.jar --server.port=9090

常规属性配置

在Spring Boot里,我们只需要在application.properties定义属性,直接使用@Value注入即可。

(1)application.properties属性

blog.author = 佛大Java程序员
blog.subject = Spring Boot --外部配置的属性注入

(2)修改入口类

@RestController
@SpringBootApplication
public class PropertiesdemoApplication { @Value("${blog.author}")
private String blogAuthor;
@Value("${blog.subject}")
private String blogSubject; /**
* 常规属性配置
* 注意路径/properties
* @return
*/
@RequestMapping("/properties")
String index(){
return "blog author is:" + blogAuthor + " and blog subject is:" + blogSubject;
} public static void main(String[] args) {
SpringApplication.run(PropertiesdemoApplication.class, args);
} }

(3)运行,浏览器访问http://localhost:8080/properties/

类型安全的配置

类型安全一句话理解:可以批量将属性注入对象中的方法。

基于系统配置文件

(1)application.properties属性

blog.author = 佛大Java程序员
blog.subject = Spring Boot --外部配置的属性注入

(2) 类型安全的Bean

/**
* @author 佛大Java程序员
* @since 1.0.0
*/
@Component
@ConfigurationProperties(prefix = "blog")
public class BlogSetting {
private String author;private String subject; public String getAuthor() {
return author;
} public void setAuthor(String author) {
this.author = author;
} public String getSubject() {
return subject;
} public void setSubject(String subject) {
this.subject = subject;
}
}

注解解释

@ConfigurationProperties加载properties文件内的配置,通过prefix属性指定properties的配置的前缀。

(3)入口类

@RestController
@SpringBootApplication
public class PropertiesdemoApplication { @Autowired
private BlogSetting blogSetting; /**
* 类型安全的配置 -- 系统属性文件
* 注意请求路径/ConfigurationProperties
* @return
*/
@RequestMapping("/ConfigurationProperties")
String index0(){
return "blog author is:" + blogSetting.getAuthor() + " and blog subject is:" + blogSetting.getSubject();
} public static void main(String[] args) {
SpringApplication.run(PropertiesdemoApplication.class, args);
} }

注解说明:使用@Autowires直接注入该配置。

 (4) 运行

浏览器访问 -- http://localhost:8080/ConfigurationProperties

基于自定义配置文件

我们也可以新建一个自定义的properties文件,需要我们在安全类型Bean上添加@PropertySource来指定自定义的属性文件的位置。

(1) 添加自定义属性文件

customize.properties 

article.author = 博客作者 -- 佛大Java程序员
article.subject = 博客主题 -- 外部配置的属性注入

(2)  类型安全的Bean

/**
* @author 佛大Java程序员
* @since 1.0.0
*/
@Component
@ConfigurationProperties(prefix = "article")
@PropertySource(value={"classpath:config/customize.properties"})
public class BlogSetting { private String author;
private String subject; public String getAuthor() {
return author;
} public void setAuthor(String author) {
this.author = author;
} public String getSubject() {
return subject;
} public void setSubject(String subject) {
this.subject = subject;
}
}

注意:

@ConfigurationProperties(prefix = "article")
@PropertySource(value={"classpath:config/customize.properties"})

(3)入口类

@RestController
@SpringBootApplication
public class PropertiesdemoApplication { @Autowired
private BlogSetting blogSetting; /**
* 类型安全的配置 -- 自定义属性文件
* 注意请求路径/customizeProperties
* @return
*/
@RequestMapping("/customizeProperties")
String index1(){
return "article author is:" + blogSetting.getAuthor() + " and article subject is:" + blogSetting.getSubject();
} public static void main(String[] args) {
SpringApplication.run(PropertiesdemoApplication.class, args);
} }

 (4) 运行

浏览器输入 --  http://localhost:8080/customizeProperties/

补充说明:

(1) 在SpringBoot1.4之后取消了@ConfigurationProperties中的属性location,原本可以用来指定属性文件的位置,上面的例子是实现使用自定义配置属性的方法之一。

(2) 注意Spring Boot常规属性配置和Spring中的注入配置文件属性中的内容的区别

Spring环境下中需要使用@PropertySource指定文件地址,若使用@Value注入,则要配置一个PropertySourcePlaceholderConfigurer的Bean。注意@Value中使用的是的“$“不是”#“。

Spring Boot中只需要在application.properties定义属性,直接使用@Value注入即可。

常见面试题:

(1) 项目中用到了Spring Boot中的哪些注解?怎么用的?(蓝月亮1-3年)

(2)项目中怎么引入外部配置中的属性?(蓝月亮1-3年)

参考:

《Spring Boot实战》-- 汪云飞 编著

Spring Boot -- 外部配置的属性使用的更多相关文章

  1. 【串线篇】spring boot外部配置加载顺序

    SpringBoot也可以从以下位置加载配置: 原则仍然是优先级从高到低:高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置 1.命令行参数 所有的配置都可以在命令行上进行指定 java -j ...

  2. Spring Boot常用配置

    概述 本文主要写了下Spring Boot的一些常用配置. Spring Boot基本配置 入口类: Spring Boot通常有一个名为*Application的入口类,入口类里面有一个main方法 ...

  3. Spring Boot 外部化配置(一)- Environment、ConfigFileApplicationListener

    目录 前言 1.起源 2.外部化配置的资源类型 3.外部化配置的核心 3.1 Environment 3.1.1.ConfigFileApplicationListener 3.1.2.关联 Spri ...

  4. Spring Boot 外部化配置(二) - @ConfigurationProperties 、@EnableConfigurationProperties

    目录 3.外部化配置的核心 3.2 @ConfigurationProperties 3.2.1 注册 Properties 配置类 3.2.2 绑定配置属性 3.1.3 ConfigurationP ...

  5. 玩转Spring Boot 自定义配置、导入XML配置与外部化配置

    玩转Spring Boot 自定义配置.导入XML配置与外部化配置       在这里我会全面介绍在Spring Boot里面如何自定义配置,更改Spring Boot默认的配置,以及介绍各配置的优先 ...

  6. Spring Boot自动配置原理(转)

    第3章 Spring Boot自动配置原理 3.1 SpringBoot的核心组件模块 首先,我们来简单统计一下SpringBoot核心工程的源码java文件数量: 我们cd到spring-boot- ...

  7. Spring Boot自动配置如何工作

    通过使用Mongo和MySQL DB实现的示例,深入了解Spring Boot的@Conditional注释世界. 在我以前的文章“为什么选择Spring Boot?”中,我们讨论了如何创建Sprin ...

  8. Spring Boot 自动配置的原理、核心注解以及利用自动配置实现了自定义 Starter 组件

    本章内容 自定义属性快速入门 外化配置 自动配置 自定义创建 Starter 组件 摘录:读书是读完这些文字还要好好用心去想想,写书也一样,做任何事也一样 图 2 第二章目录结构图 第 2 章 Spr ...

  9. 玩转spring boot——properties配置

    前言 在以往的java开发中,程序员最怕大量的配置,是因为配置一多就不好统一管理,经常出现找不到配置的情况.而项目中,从开发测试环境到生产环境,往往需要切换不同的配置,如测试数据库连接换成生产数据库连 ...

随机推荐

  1. SUCTF pythonigx

    0x00知识点 nginx配置 配置文件存放目录:/etc/nginx主配置文件:/etc/nginx/conf/nginx.conf管理脚本:/usr/lib64/systemd/system/ng ...

  2. [极客大挑战 2019]HardSQL updatexml报错注入小结

    报错注入链接: https://www.cnblogs.com/richardlee97/p/10617115.html报错原因: 其原因主要是因为虚拟表的主键重复.按照MySQL的官方说法,grou ...

  3. java springboot@GeneratedValue 注解

    springboot中@GeneratedValue作用: (1)@GeneratedValue注解存在的意义主要就是为一个实体生成一个唯一标识的主键.@GeneratedValue提供了主键的生成策 ...

  4. c#如何取出指定的中间文本

    ///<summary> ///取出文本中间内容 ///<summary> ///<param name="left">左边文本</par ...

  5. Acwing 734. 能量石

    贪心(微扰) + dp 这道题还是比较难的,前置知识: 贪心的微扰(邻项交换)证法,例题:国王游戏,耍杂技的牛 01背包 算法1:暴力\(O(T * n! * n)\) 可以\(dfs\)全排列枚举所 ...

  6. Vue高仿网易云网页端源码

      音乐播放器虽然烂大街了,但是作为前端没自己撸一个一直是个遗憾, 而且偶然间发现 pc 端 web 版的网易云音乐做的实在是太简陋了, 社区仿 pc 客户端的网易云也不多见,为了弥补这个遗憾, 就用 ...

  7. Golang之应用测试

    Go 应用测试 测试的覆盖率 命令: go test ./ -v -cover 在<Go Web 编程>一书中,有以下结论: 这并不是绝对的,测试文件可以在不同的包,进行测试也是不会出现问 ...

  8. vue 按键修饰符 keyup

    按键修饰符 keyup 通过官方文档可查询到特殊的按键修饰符 .enter .tab .delete (捕获"删除"和"退格"键) .esc .space .u ...

  9. 云原生网络代理(MOSN)的进化之路

    本文系云原生应用最佳实践杭州站活动演讲稿整理.杭州站活动邀请了 Apache APISIX 项目 VP 温铭.又拍云平台开发部高级工程师莫红波.蚂蚁金服技术专家王发康.有赞中间件开发工程师张超,分享云 ...

  10. Java中instanceof注意的地方

    instanceof只能用于对象的判断,不能用于基本类型的判断,以下代码会编译不通过 'A' instanceof Character instanceof特有的规则:若左操作数是null,结果就直接 ...