005-Spring Boot配置分析-配置文件application、EnvironmentPostProcessor、Profiles
一、配置文件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的更多相关文章
- Spring boot 梳理 - 全局配置文件application.properties或者是application.yml,在resources目录下或者类路径下的/config下,一般我们放到resources下。
全局配置文件application.properties或者是application.yml,在resources目录下或者类路径下的/config下,一般我们放到resources下.
- Spring Boot中注入配置文件application.properties中的list 对象参数
例如要注入下列参数: dyn.spring.datasources[0].name=branchtadyn.spring.datasources[0].driverClassName=oracle.j ...
- Spring Boot配置,读取配置文件
Spring Boot配置,读取配置文件 一.配置Spring Boot 1.1 服务器配置 1.2 使用其他Web服务器 1.3 配置启动信息 1.4 配置浏览器显示ico 1.5 Yaml语法 1 ...
- Spring Boot 启动(四) EnvironmentPostProcessor
Spring Boot 启动(四) EnvironmentPostProcessor Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698. ...
- Spring boot配置MongoDB以及Morphia踩坑记录
pom 因为项目中采用Morphia(MongoDB的ODM框架,对象-文档映射(object-document mapper)),因此需要在pom文件中引入相应依赖: <dependency& ...
- Redis篇之操作、lettuce客户端、Spring集成以及Spring Boot配置
Redis篇之操作.lettuce客户端.Spring集成以及Spring Boot配置 目录 一.Redis简介 1.1 数据结构的操作 1.2 重要概念分析 二.Redis客户端 2.1 简介 2 ...
- Spring Boot -- 配置切换指南
一般在一个项目中,总是会有好多个环境.比如: 开发环境 -> 测试环境 -> 预发布环境 -> 生产环境 每个环境上的配置文件总是不一样的,甚至开发环境中每个开发者的环境可能也会有一 ...
- Spring Boot 配置优先级顺序
一般在一个项目中,总是会有好多个环境.比如: 开发环境 -> 测试环境 -> 预发布环境 -> 生产环境 每个环境上的配置文件总是不一样的,甚至开发环境中每个开发者的环境可能也会有一 ...
- 笔记:Spring Boot 配置详解
Spring Boot 针对常用的开发场景提供了一系列自动化配置来减少原本复杂而又几乎很少改动的模板配置内容,但是,我们还是需要了解如何在Spring Boot中修改这些自动化的配置,以应对一些特殊场 ...
随机推荐
- Openvpn搭建详解
说明:公司新购进一批阿里云ESC服务器,计划只有一台有公网IP,其他都通过内网连接.那么问题来了,平时维护时,如果要通过远程工具连接其他服务器就需要先登录公网服务器(A),然后跳转到其内网其他机器上, ...
- Word Representations 词向量
常用的词向量方法word2vec. 一.Word2vec 1.参考资料: 1.1) 总览 https://zhuanlan.zhihu.com/p/26306795 1.2) 基础篇: 深度学习wo ...
- Batch Normalization原理
Batch Normalization导读 博客转载自:https://blog.csdn.net/malefactor/article/details/51476961 作者: 张俊林 为什么深度神 ...
- Windows平台下载、安装、配置Apache全攻略
本文介绍了如何在windows平台进行apache服务器的下载.安装和配置过程. 1.下载 首先进入apache for windows的官方下载地址[猛戳这里],依次在下列页面进行下载操作: 我这里 ...
- 常用CSS3
(ಥ_ಥ) 啊啊,我的胃好疼啊.感觉最近胃又开始不舒服了.啊——果然老了呢,想当初,我也是不坏金刚之身来着呢,唉,我的可怜的小胃胃 (ಥ_ಥ) 记录几个已经常见的不能再常见的css3样式. ...
- PostgreSQL安装详细步骤windows
PostgreSQL安装:一.windows下安装过程安装介质:postgresql-9.1.3-1-windows.exe(46M),安装过程非常简单,过程如下:1.开始安装: 2.选择程序安装目录 ...
- Django JSON,AJAX
JSON 概念 JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本数据交换格式 JSON 独立于语言 * JSON 具 ...
- Ubuntu和Windows双系统的安装
本菜鸡的ACM生涯大概是结束了 最有希望的EC和焦作也顺利的铁了,一路走来还是怪自己不努力,整日整日的划水,算了,铁牌退役,也是自己应有的惩罚,静下心来吧 下面介绍如何装windows10和Ubunt ...
- COGS 2396 2397 [HZOI 2015]有标号的强连通图计数
题意:求n个点有向图其中SCC是一个的方案数 考虑求出若干个不连通的每个连通块都是SCC方案数然后再怎么做一做.(但是这里不能用Ln,因为推不出来) 设$f_n$为答案, $g_n$为n个点的有向图, ...
- <五>企业级开源仓库nexus3实战应用–使用nexus3配置npm私有仓库
一两个星期之前,你如果在我跟前说起私服的事情,我大概会绕着你走,因为我对这个东西真的一窍不通.事实上也正如此,开发同学曾不止一次的跟我说公司的私服版本太旧了,许多新的依赖编译之后不会从远程仓库自动缓存 ...