一、配置文件application

  springboot配置文件,默认配置文件application.propertie或者application.yml,可同时存在。

  基础使用

    application.propertie增加配置:local.ip=192.168.1.1

    application.yml增加配置【使用缩进】:

jdbc:
name: lhx

  默认位置:classpath、classpath:/config、file:/、file:config下

  注意:application.properties==application-default.properties

1.1、读取方式

方式一、Environment方式读取

context.getEnvironment().getProperty("local.ip","默认值")

@SpringBootApplication
public class App {
@Bean
public Runnable createRunnable() {
return () -> {
System.out.println("spring boot is running");
};
} public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(App.class, args);
context.getBean(Runnable.class).run();
System.out.println(context.getEnvironment().getProperty("local.ip"));
context.close();
}
}

其实相当于自定义注入Environment ,然后使用env.getProperty("local.ip")即可

@Component
public class UserConfig { @Autowired
private Environment env; public void show() {
System.out.println("local.ip=" + env.getProperty("local.ip"));
}
}

另一种设置默认值方式

        HashMap<String, Object> defaultProperties = new HashMap<>();
defaultProperties.put("server.host", "127.0.0.1");
application.setDefaultProperties(defaultProperties);

方式二、使用@Value注解

    @Value("${local.port}")
private String localPort;

默认必须有配置项,如果没有配置项可以增加默认值

    @Value("${tomcat.port:9090}")
private String tomcatPort2;

这种的:@Value("tomcat.port") 也可以使用。具体没查

方式三、使用@ConfigurationProperties(prefix="ds")

在application配置文件中增加ds.url=jdbc:mysql://spring

增加读取类

@Component
@ConfigurationProperties(prefix="ds")
public class DataSourceProperties {
private String url;
public void show() {
System.out.println("url"+url);
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
} }

其他处使用即可。

注意:@ConfigurationProperties(prefix="ds")也支持指定具体路径文件配置@ConfigurationProperties(prefix="ds",localtions="classpath:/ds.properties")

注入数组、集合,在配置文件中增加

ds.host[]=192.168.1.1
ds.host[]=192.168.1.2
ds.host[]=192.168.1.3

代码中

private List<String> hosts = new ArrayList<>();

即可,注意增加getter,setter,

注:支持配置引用配置

name=springboot
aap.name=this is ${name}

1.2、指定具体名称配置

如不使用application.properties,改为app.proerties.

方式一、启动参数中修改:

--spring.config.name=app

或者 有路径的 --spring.config.location=classpath:cong/app.propertis

或者 多个用逗号隔开

或者 file目录    --spring.config.location=classpath:cong/app.propertis,file:E:/app.properties

方式二、文件注解@PropertySource

增加jdbc.properties配置文件

增加Config配置类

@Configuration
@PropertySource("classpath:jdbc.properties")
public class FileConfig { }

然后使用即可 PropertySource 可以列多个

或者多个可以使用 @PropertySources({@PropertySource("classpath:jdbc.properties")})

@PropertySource: 用于引入外部属性配置,和Environment 配合一起使用。其中ignoreResourceNotFound 表示没有找到文件是否会报错,默认为false,就是会报错,一般开发情况应该使用默认值,设置为true相当于生吞异常,增加排查问题的复杂性.

引入PropertySource,注入Environment,然后就能用environment 获取配置文件中的value值。

二、EnvironmentPostProcessor配置文件扩展

需要注册到META-INF/spring.factories文件

1.增加此文件,并增加内容

org.springframework.boot.env.EnvironmentPostProcessor=com.lhx.spring.springboot_config.MyEnvironmentPostProcessor

2.增加实现类文件MyEnvironmentPostProcessor

三、Profiles

增加两个配置文件

方式一、程序读取

在application-dev.properties中添加

jdbc.url=jdbc:mysql://127.0.0.1/spring_dev

在application-test.properties中添加

jdbc.url=jdbc:mysql://127.0.0.1/spring_test

程序使用

        SpringApplication app = new SpringApplication(App3.class);
app.setAdditionalProfiles("test");//test 读取application-test.properties
ConfigurableApplicationContext context = app.run(args);
context.getBean(Runnable.class).run();
System.out.println(context.getEnvironment().getProperty("jdbc.url"));
context.close();

注:可在setAdditionalProfiles配置多个,会被覆盖

方式二、参数配置

启动参数增加,多个使用逗号分割,配置多个 多个同时生效

--spring.profiles.active=test

使用

执行java -jar xxx.jar,可以观察到服务端口被设置为8001,也就是默认的开发环境(dev)

执行java -jar xxx.jar --spring.profiles.active=test,可以观察到服务端口被设置为8002,也就是测试环境的配置(test)

执行java -jar xxx.jar --spring.profiles.active=prod,可以观察到服务端口被设置为8003,也就是生产环境的配置(prod)

总结多环境的配置思路:

  application.properties中配置通用内容,并设置spring.profiles.active=dev,以开发环境为默认配置

  application-{profile}.properties中配置各个环境不同的内容

  通过命令行方式去激活不同环境的配置

方式三、@Profile注解

@SpringBootConfiguration
public class MyConfig {
@Bean
public Runnable createRunnable() {
System.out.println("--------1--------");
return ()->{};
} @Bean
@Profile("dev")
public Runnable createRunnable2() {
System.out.println("--------2--------");
return ()->{};
} @Bean
@Profile("test")
public Runnable createRunnable3() {
System.out.println("--------3--------");
return ()->{};
}
}

启动对应环境时候生效

 

005-Spring Boot配置分析-配置文件application、EnvironmentPostProcessor、Profiles的更多相关文章

  1. Spring boot 梳理 - 全局配置文件application.properties或者是application.yml,在resources目录下或者类路径下的/config下,一般我们放到resources下。

    全局配置文件application.properties或者是application.yml,在resources目录下或者类路径下的/config下,一般我们放到resources下.

  2. Spring Boot中注入配置文件application.properties中的list 对象参数

    例如要注入下列参数: dyn.spring.datasources[0].name=branchtadyn.spring.datasources[0].driverClassName=oracle.j ...

  3. Spring Boot配置,读取配置文件

    Spring Boot配置,读取配置文件 一.配置Spring Boot 1.1 服务器配置 1.2 使用其他Web服务器 1.3 配置启动信息 1.4 配置浏览器显示ico 1.5 Yaml语法 1 ...

  4. Spring Boot 启动(四) EnvironmentPostProcessor

    Spring Boot 启动(四) EnvironmentPostProcessor Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698. ...

  5. Spring boot配置MongoDB以及Morphia踩坑记录

    pom 因为项目中采用Morphia(MongoDB的ODM框架,对象-文档映射(object-document mapper)),因此需要在pom文件中引入相应依赖: <dependency& ...

  6. Redis篇之操作、lettuce客户端、Spring集成以及Spring Boot配置

    Redis篇之操作.lettuce客户端.Spring集成以及Spring Boot配置 目录 一.Redis简介 1.1 数据结构的操作 1.2 重要概念分析 二.Redis客户端 2.1 简介 2 ...

  7. Spring Boot -- 配置切换指南

    一般在一个项目中,总是会有好多个环境.比如: 开发环境 -> 测试环境 -> 预发布环境 -> 生产环境 每个环境上的配置文件总是不一样的,甚至开发环境中每个开发者的环境可能也会有一 ...

  8. Spring Boot 配置优先级顺序

    一般在一个项目中,总是会有好多个环境.比如: 开发环境 -> 测试环境 -> 预发布环境 -> 生产环境 每个环境上的配置文件总是不一样的,甚至开发环境中每个开发者的环境可能也会有一 ...

  9. 笔记:Spring Boot 配置详解

    Spring Boot 针对常用的开发场景提供了一系列自动化配置来减少原本复杂而又几乎很少改动的模板配置内容,但是,我们还是需要了解如何在Spring Boot中修改这些自动化的配置,以应对一些特殊场 ...

随机推荐

  1. idea中war和war exploded的区别及修改jsp必须重新启动tomcat才能生效的问题

    刚开始使用idea,发现工程每次修改JS或者是JSP页面后,并没有生效,每次修改都需要重启一次Tomcat这样的确不方便.我想Idea肯定有设置的方法,不可能有这么不方便的功能存在. 需要在Tomca ...

  2. jsp篇 之 Jsp中的内置对象和范围对象

    Jsp中的内置对象: 在jsp页面代码中不需要声明,直接可以使用的对象. 一共有[9个内置对象]可以直接使用. 对象类型           名字 PageContext          pageC ...

  3. 【题解】放球游戏A

    题目描述 校园里在上活动课,Red和Blue两位小朋友在玩一种游戏,他俩在一排N个格子里,自左到右地轮流放小球,每个格子只能放一个小球.每个人一次只能放1至5个球,最后面对没有空格而不能放球的人为输. ...

  4. Codeforces437 B. The Child and Set

    题目类型:位运算 传送门:>Here< 题意:给出\(sum和limit\),求一个集合\(S\),其中的元素互不相同且不超过\(limit\),他们的\(lowbit\)之和等于\(su ...

  5. CRLF在过滤XSS语句后打Cookie方式

    看了很长时间的漏洞奖励计划,学到了不少骚姿势,我觉得这个姿势很不错,总结下写篇文章发出来.针对CRLF漏洞打cookie的方法. 这里不讲概念挖掘方式了,以实战为主: 阅读文章前先参考文章:http: ...

  6. POJ--3349 Snowflake Snow Snowflakes(数字hash)

    链接:Snowflake Snow Snowflakes 判断所有的雪花里面有没有相同的 每次把雪花每个角的值进行相加和相乘 之后hash #include<iostream> #incl ...

  7. 深入理解JVM(3)——类加载机制

    1.类加载时机 类的整个生命周期包括了:加载( Loading ).验证( Verification ).准备( Preparation ).解析( Resolution ).初始化( Initial ...

  8. css实现弹出框

    弹出框也是前端里面经常使用的一个应用场景了,最开始想到的是用js实现这个效果,看到codepen上面有用css实现的.其实就是用到了css里面的一个:target选择器+visibility属性. U ...

  9. 小米平板2 win10 MIUI互刷教程

    在这篇文章中,我们会为大家提供Windows 10版小米平板2刷入MIUI和MIUI版小米平板2刷入Windows 10的两组教程. 不过从Win 10刷MIUI需要用原生安卓系统过渡来统一bios版 ...

  10. linux线程(一)

    线程的优先级无法保障线程的执行次序.只不过优先级高的线程获取 CPU 资源的概率大一点而已. 线程相关函数(1)-pthread_create(), pthread_join(), pthread_e ...