开发环境:IntelliJ IDEA 2019.2.2
Spring Boot版本:2.1.8

新建一个名称为demo的Spring Boot项目。

一、默认配置文件

Spring Boot会读取名称application.properties(yml)的配置文件。
如果有多个同名文件,默认情况下,按照下面顺序读取:
(1)项目根目录的config目录
(2)项目根目录
(3)项目classpath下的config目录
(4)项目classpath根目录
如果同一个配置项出现在多份配置文件中,后面读取的值不会覆盖前面的。

测试:
在项目的4个位置各建立application.properties,内容如下:
(1)config/application.properties

test = config/application.properties
test1 = test1

(2)application.properties

test = application.properties
test2 = test2

(3)src/main/resources/config/application.properties

test = src/main/resources/config/application.properties
test3 = test3

(4)src/main/resources/application.properties

test = src/main/resources/application.properties
test4 = test4

修改默认生成的启动类 DemoApplication.java 代码:

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; @SpringBootApplication
@RestController
public class DemoApplication { public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
} @Autowired
private Environment env; @RequestMapping("/")
public String getProp(){
String test = env.getProperty("test");
String test1 = env.getProperty("test1");
String test2 = env.getProperty("test2");
String test3 = env.getProperty("test3");
String test4 = env.getProperty("test4");
return test + "," + test1 + "," + test2 + "," + test3 + "," + test4;
}
}

访问 http://localhost:8080/
输出:config/application.properties,test1,test2,test3,test4

二、指定配置文件

读取指定的配置文件,不使用默认的application.properties。

测试:
(1)src/main/resources/application.properties 内容:

test1 = application.properties

(2)在项目的src/main/resources新建目录config,新建配置文件myConfig.properties,内容:

test2= myConfig.properties

修改默认生成的启动类 DemoApplication.java 代码:

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; @SpringBootApplication
@RestController
public class DemoApplication { public static void main(String[] args) {
//SpringApplication.run(DemoApplication.class, args);
new SpringApplicationBuilder(DemoApplication.class).properties(
"spring.config.location=classpath:/config/myConfig.properties"
).run(args);
} @Autowired
private Environment env; @RequestMapping("/")
public String getProp(){
String test1 = env.getProperty("test1");
String test2 = env.getProperty("test2");
return test1 + "," + test2;
}
}

访问 http://localhost:8080/
输出:null,myConfig.properties
可见application.properties已读取不到,成功读取到配置文件myConfig.properties。

也可以使用spring.config.name指定配置文件的名称,如下面代码指定了myConfig,Spring Boot会到classpath下寻找myConfig.properties(yml)。

    public static void main(String[] args) {
//SpringApplication.run(DemoApplication.class, args);
/*new SpringApplicationBuilder(DemoApplication.class).properties(
"spring.config.location=classpath:/config/myConfig.properties"
).run(args);*/
new SpringApplicationBuilder(DemoApplication.class).properties(
"spring.config.name=myConfig").run(args);
}

三、使用profile指定配置

使用profile可以根据特定的环境来激活不同的配置。

src/main/resources/application.yml 内容如下:

spring:
profiles: mysql
jdbc:
driver:
com.mysql.jdbc.Driver
---
spring:
profiles: oracle
jdbc:
driver:
oracle.jdbc.driver.OracleDriver

修改默认生成的启动类 DemoApplication.java 代码:

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import java.util.Scanner; @SpringBootApplication
@RestController
public class DemoApplication { public static void main(String[] args) {
//SpringApplication.run(DemoApplication.class, args); Scanner scan = new Scanner(System.in);
String profile = scan.nextLine();
new SpringApplicationBuilder(DemoApplication.class).properties(
"spring.config.location=classpath:/application.yml"
).profiles(profile).run(args);
} @Autowired
private Environment env; @RequestMapping("/")
public String getProp(){
String res = env.getProperty("jdbc.driver");
return res;
}
}

在IDEA中点击Run按钮后,在控制台先敲回车再输入oracle,
访问 http://localhost:8080/ 输出:oracle.jdbc.driver.OracleDriver
重新Run,在控制台先敲回车再输入mysql,
访问 http://localhost:8080/ 输出:com.mysql.jdbc.Driver

还可以通过不同配置文件的名称来设置profile,创建下面3个文件。
(1)src/main/resources/application.yml 内容:

spring:
profiles:
active: oracle

(2)src/main/resources/application-mysql.yml 内容:

jdbc:
driver:
com.mysql.jdbc.Driver

(3)src/main/resources/application-oracle.yml 内容:

jdbc:
driver:
oracle.jdbc.driver.OracleDriver

修改默认生成的启动类 DemoApplication.java 代码:

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import java.util.Scanner; @SpringBootApplication
@RestController
public class DemoApplication { public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
} @Autowired
private Environment env; @RequestMapping("/")
public String getProp(){
String res = env.getProperty("jdbc.driver");
return res;
}
}

访问 http://localhost:8080/ 输出:oracle.jdbc.driver.OracleDriver

Spring Boot 2 读取配置文件的更多相关文章

  1. 【转】spring boot mybatis 读取配置文件

    spring boot mybatis 配置整理 一.加载mybatis的配置 1.手写配置,写死在代码里 import java.io.IOException; import java.util.P ...

  2. spring boot中读取配置文件的两种方式

    application.properties test.name=测试 test.url=www.test.com 1.@Value注解 在controller里可以这样直接调用 @Value(&qu ...

  3. spring boot 项目从配置文件中读取maven 的pom.xml 文件标签的内容。

    需求: 将pom.xml 文件中的版本号读取到配置文件并打印到日志中. 第一步: 在pom.xml 中添加以下标签. 第二步: 将version 标签的值读取到配置文件中 这里使用 @@  而不是  ...

  4. spring boot 无法读取application.properties问题

    spring boot 无法读取application.properties问题 https://bbs.csdn.net/topics/392374488 Spring Boot 之注解@Compo ...

  5. # spring boot + mybatis 读取数据库

    spring boot + mybatis 读取数据库 创建数据库 use testdb; drop table if exists t_city; create table t_city( id i ...

  6. Spring Boot 的核心配置文件有哪几个?它们的区别是什么?

    Spring Boot 的核心配置文件是 application 和 bootstrap 配置文件.application 配置文件这个容易理解,主要用于 Spring Boot 项目的自动化配置.b ...

  7. Spring Boot的properties配置文件读取

    我在自己写点东西玩的时候需要读配置文件,又不想引包,于是打算扣点Spring Boot读取配置文件的代码出来,当然只是读配置文件没必要这么麻烦,不过反正闲着也是闲着,扣着玩了.具体启动过程以前的博客写 ...

  8. 解决Spring boot中读取属性配置文件出现中文乱码的问题

    问题描述: 在配置文件application.properties中写了 server.port=8081 server.servlet.context-path=/boy name=张三 age=2 ...

  9. Spring Boot 获取yaml配置文件信息

    Spring boot 项目启动过程中: org.springframework.boot.SpringApplication#prepareEnvironment 当程序步入listeners.en ...

随机推荐

  1. java月考题JSD1908第二次月考(含答案和解析)

    考试 .container { clear: both; margin: 0 auto; text-align: left; /*width: 1200px;*/ } .container:after ...

  2. ORA-07217 environment variable cannot be evaluated

    问题描述:还是rman的问题,一个很沙雕的问题,改了半天,准备是要做数据库的全备,和归档的备份 1.连接rman进行备份,这里要保持数据库为mount状态,因为要对数据库全备 [oracle@orcl ...

  3. CSDN不限积分代下载,知网、万方、sci、IEEE论文代下载,智慧树、超星尔雅刷课

    下载内容: 1.CSDN不限积分代下载. 2.知网.万方.sci.IEEE论文代下载. 3.超星尔雅,智慧树刷课. 注:由于本人手抖买一个CSDN会员,想挽回一点损失,所以创立了一个下载群,绝对不是骗 ...

  4. JavaWeb 实现简单登录、注册功能

    1.首先创建一个简单的动态Javaweb项目 2.然后手动建立文件目录: 项目创建好之后,在src下建几个包: controller:控制器,负责转发请求,对请求进行处理,主要存放servlet: d ...

  5. React: 高阶组件(HOC)

    一.简介 如我们所知,JavaScript有高阶函数这么一个概念,高阶函数本身是一个函数,它会接收或者返回一个函数,进而对该函数进行操作.其实,在React中同样地有高阶组件这么一个东西,称为HOC, ...

  6. Spring Cloud进阶之路 | 一:服务注册与发现(nacos)

    转载请注明作者及出处: 作者:银河架构师 原文链接:https://www.cnblogs.com/luas/p/12068846.html 1.版本 最新稳定版本为1.1.4,也可以从发版说明.博客 ...

  7. 对token机制的学习和分析

    token,中文意思为令牌,是用户登录后会返回的一个字符串,里面包括用户信息.登录时间等,但是是加密过的密文,其加解密方式由后端决定. 在登录之后的接口请求中,前端需在请求中统一加上token,从而识 ...

  8. 分布式全局唯一ID的实现

    分布式全局唯一ID的实现 前言 上周末考完试,这周正好把工作整理整理,然后也把之前的一些素材,整理一番,也当自己再学习一番. 一方面正好最近看到几篇这方面的文章,另一方面也是正好工作上有所涉及,所以决 ...

  9. Pick of the Week'19 | Nebula 第 45 周看点--Nebula 到底是不是原生存储?

    每周五 Nebula 为你播报每周看点,每周看点由本周大事件.用户问答.Nebula 产品动态和推荐阅读构成. 今天是 2019 年第 45 个工作周的周五,来和 Nebula 看看本周有什么图数据库 ...

  10. ling to sql创建临时变量 let的使用

    使用let赋值给临时变量 var dailys = from f in _postgreDbContext.draws let temp = f.review_time.Value.Date wher ...