spring environment_SpringBoot实战8-Spring基础-应用环境
接上篇《SpringBoot实战7-Spring基础-Bean的生命周期》的学习,本文学习Spring的一个重要的概念Environment-应用环境。
2.7 应用环境 - Environment
Spring为我们提供了一个接口Environment用来代表当前运行应用的环境,这个环境包含两个部分:
- Profile:指的是一组命名的、定义在一起的Bean。我们通常为不同的应用场景(生产、开发,测试等)定义。
- Property:指的是配置属性,我们可以从properties文件、JVM系统属性、操作系统环境变量等外部来获得配置属性。
2.7.1 场景 - @Profile
我们可以通过@Profile注解指定当前的运行场景,@Profile可以和@Component等、@Configuration和@Bean一起使用,当然也分别限制了@Profile起效的Bean的分组。
下面使用需要显示不同操作系统的列表命令的Bean:
public class CommandService { private String listCommand; public CommandService(String listCommand) { this.listCommand = listCommand; } public void list(){ System.out.println("当前系统下列表命令是:" + listCommand); }}
在开发环境Windows下的配置为:
@Configuration@Profile("dev")public class WindowsProfileConfig { @Bean CommandService commandService(){ return new CommandService("dir"); }}
在生产环境Linux下的配置为:
@Configuration@Profile("production")public class LinuxProfileConfig { @Bean CommandService commandService(){ return new CommandService("ls"); }}
当我们配置好了两种不同场景下的Profile,我们需要在应用中配置哪个是激活的Profile,手动配置应该是像下面这样:
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); context.getEnvironment().setActiveProfiles("production"); context.scan("top.wisely");context.refresh();
但我们使用了Spring Boot,我们只需在application.properties文件配置:
spring.profiles.active=production
我们在JavaConfig里用CommandLineRunner分别运行将Profile置成production和dev:
@BeanCommandLineRunner profileClr(CommandService commandService){ return args -> commandService.list();}
2.7.2 属性配置 - @PropertySource
Spring的Environment的属性是由PropertySource组成的,我们可以通过@PropertySource指定外部配置文件的路径,这些配置文件的属性都会以PropertySource的形式注册到Environment中,@PropertySource支持xml和properties格式,不支持Spring Boot下的YAML格式。
如我们现在添加了2个外部配置文件:
- author.properties
author.name=wyf
- book.properties:
book.name=spring boot in battle
我们可以用一个配置类来接受这两个文件的配置:
@Configuration@PropertySources({ @PropertySource("classpath:author.properties"), @PropertySource("classpath:book.properties")}) //1public class ExternalConfig { Environment env; public ExternalConfig(Environment env) { //2 this.env = env; } @Value("${book.name}") //3 private String bookName; public void showEnv(){ System.out.println("作者名字是:" + env.getProperty("author.name")); //4 System.out.println("书籍名称是:" + bookName); }}
- 多个外部配置可以用@PropertySources,若只有一个可以只使用@PropertySource("classpath:book.properties");
- 注入Environment的Bean,因只有一个参数,可省略@Autowired;
- 可以@Value注解获得Environment中的属性,@Value的使用在Spring EL一节有更详细的讲解;
- 外部配置的属性都已经在Environment注册,可以直接获取。
下一篇《SpringBoot实战9-Spring基础-条件配置@Conditional》
spring environment_SpringBoot实战8-Spring基础-应用环境相关推荐
- Spring Security 实战:Spring Boot 下的自动配置
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 公众号「码农小胖哥」 1. 前言 我们在前几篇 ...
- 【struts2+hibernate+spring项目实战】Spring计时器任务 Spring整合JavaMail(邮件发送)(ssh)
一.常用数据频度维护 对于系统使用度较高的数据,客户在查看时希望这些数据最好先出现,此时需要为其添加排序规则.在进行排序时,使用次数成为排序的依据.因此需要设置一个字段用来描述某种数据的使用次数,也就 ...
- Spring Security 实战干货: RBAC权限控制概念的理解
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 码农小胖哥 来源 | 公众号「码农小胖哥」 1 ...
- Spring Security 实战:使用 JWT 认证访问接口
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 1. 前言 欢迎阅读Spring Security 实战 ...
- Spring Security 实战:基于配置的接口角色访问控制
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 码农小胖哥 来源 | 公众号「码农小胖哥」 1 ...
- Spring Security 实战:自定义异常处理
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 1. 前言 最近实在比较忙,很难抽出时间来继续更 [S ...
- Spring Security 实战干货:玩转自定义登录
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 1. 前言 前面的关于 Spring Security ...
- Spring Boot实战pdf
下载地址:网盘下载 Spring Boot实战以Spring应用程序开发为中心,全面讲解如何运用Spring Boot提高效率,使应用程序的开发和管理更加轻松有趣.作者行文亲切流畅,以大量示例讲解了S ...
- 【Spring Boot实战】源码解析Spring Boot自动配置原理
一.简介 Spring致力于让Java开发更简单,SpringBoot致力于让使用Spring进行Java开发更简单,SpringCloud致力于基于SpringBoot构建微服务生态圈,让微服务开发 ...
最新文章
- EasyUI——常见用法总结
- jQuery的DOM操作之取值/赋值(1)
- 一串事物中每个事物的前后位置与顺序编号的转换问题
- 计算机语言平均数怎么算,使用python怎么求三个数的平均值
- django 修改html无变化,Django Pycharm 修改html后立即刷新页面
- C#调用Server_SQL
- Obez'yanka-Nol
- angularjs实际工程目录结构
- LINUX下载编译libtheora
- lopatkin俄大神最新精简中文系统Windows 7 Professional VL SP1 7601.24496 x86-x64 ZH-CN DREY
- 计算机学科评估b是水平,学科评估B什么水平?
- Date Wed Mar 17 2021 13:52:00 GMT+0800 (中国标准时间) 转标准的日期格式
- 第一次OllyDbg逆向记录(分析思路和注意点其他文章)
- python列表的“增删改查”(python基础讲解第四天)
- 两台计算机上用网线共享打印机共享,怎么将打印机共享两台计算机用一根网线,其中一台有打...
- 新浪微博PC客户端(DotNet WinForm版)——功能实现分解介绍
- 1.2 SpringBoot构建Docker镜像并推送到Harbor
- 2019.12.31罗振宇2020年跨年演讲《时间的朋友》精华全文版本——思维决定一个人的上限,能力决定一个人的下限
- 小程序订阅消息流程及案例
- 力扣第314周赛第三题