springboot读取系统级环境变量,和读写系统属性以及unittest来获取环境变量的方法

环境变量的读取以及系统属性的设置 环境变量只能读取,不能修改,系统属性可以修改

系统变量的读取方式: System.getEnv()

系统属性有多重读取和修改方式:

其修改方式为:

  • 读取系统属性:
@Autowired
AbstractEnvironment environment;

System.setProperty("today","tuesday");
environment.getProperty("test");
  • 增加新的系统属性:
Map<String, Object> map = new HashMap<String, Object>();
map.put("hello","world");

MapPropertySource mapPropertySource = new MapPropertySource("VCAP_SERVICES", map);

environment.getPropertySources().addLast(mapPropertySource);

environment.getPropertySources().addFirst(mapPropertySource);

Test获取系统环境变量

有时候业务中需要读取环境变量时,而unittest又读取不到环境变量,System.getEnv()的值是null 此时就用到一个开源的包来解决这个问题了

testCompile("com.github.stefanbirkner:system-rules:1.16.1")

使用方法

创建一个自定义的SpringJUnit4ClassRunner类来集成SpringJUnit4ClassRunner类,设置环境变量, 其中@Rule注解代表可以运行在测试过程中创建临时文件或者临时目录,当测试结束后,框架会自动删除。

package tools;

import org.junit.Rule;
import org.junit.contrib.java.lang.system.EnvironmentVariables;
import org.junit.runners.model.InitializationError;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

public class MySpringJUnit4ClassRunner extends SpringJUnit4ClassRunner {

    @Rule
    public final EnvironmentVariables environmentVariables
            = new EnvironmentVariables();
    /**
     * Construct a new {@code SpringJUnit4ClassRunner} and initialize a
     * {@link TestContextManager} to provide Spring testing functionality to
     * standard JUnit tests.
     *
     * @param clazz the test class to be run
     * @see #createTestContextManager(Class)
     */
    public MySpringJUnit4ClassRunner(Class<?> clazz) throws InitializationError {
        super(clazz);
        String str="hello world!";
        environmentVariables.set("test", str);

    }
}

下面是unittest

package tools;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import tools.MySpringJUnit4ClassRunner;

@RunWith(MySpringJUnit4ClassRunner.class)
public class Test {

    @Test
    public void should_return_test() throws AppException {
        System.out.println(System.getenv("test"));

        Assert.assertEquals("hello world", redisService.get("test"));
    }

}

原文地址:https://www.cnblogs.com/kelelipeng/p/11317967.html

时间: 2024-10-10 23:04:29

springboot读取系统级环境变量,和读写系统属性以及unittest来获取环境变量的方法的相关文章

[CSAPP笔记][第十章 系统级I/O]

第十章 系统级I/O 输入/输出(I/O) : 是指主存和外部设备(如磁盘,终端,网络)之间拷贝数据过程. 高级别I/O函数 scanf和printf <<和>> 使用系统级I/O函数实现 系统级I/O函数. Q:大多数时候高级别I/O函数都运行良好,为什么我们还要学Unix I/O A: 了解Unix I/O将帮助你理解其他的系统概念. 要深入理解其他概念,必须理解I/O. 有时你除了使用Unix I/O别无选择 标准I/O库没有提供读取文件元数据的方式. 如文件大小或文件创建时

android 系统级 service详解

一.android 系统级 service简要说明 android系统级的服务包含了Android Service 和Native Service . Android Service 也称作 Java Service ,是用JAVA语言编写的,实现在框架层. Native Service 也称作 System Service ,是用C++语言编写的,实现在Runtime层. 对于这两种service来说,两个对等service通讯都是利用binder,只不过一种利用*.aidl,一种利用IInt

java通过反射获取调用变量以及方法

一:反射概念 可以通过Class类获取某个类的成员变量以及方法,并且调用之. 二:通过反射获取方法.变量.构造方法 1 @Test 2 // 通过反射获取类定义的方法 3 public void testMethod() throws Exception { 4 @SuppressWarnings("rawtypes") 5 Class clazz = Class.forName("java.lang.String"); 6 Method[] m = clazz.g

PHP 闭包获取外部变量和global关键字声明变量的区别

最近在学习workerman的时候比较频繁的接触到回调函数,使用中经常会因为worker的使用方式不同,会用这两种不同的方式去调用外部的worker变量,这里就整理一下PHP闭包获取外部变量和global关键字声明变量的区别. 闭包 闭包是一个常见的概念,我们通常可以将其与回调函数配合使用,可以使代码更加简洁易读. 闭包可以通过拷贝的方式让函数使用父作用域中的变量.如: $global = 'hello'; $bbb = function()use($global){ echo $global.

00112_通过反射获取成员变量并使用

1.在反射机制中,把类中的成员变量使用类Field表示: 2.通过Class类中提供的方法获取成员变量: (1)返回一个成员变量 public Field getField(String name) 获取指定的 public修饰的变量 public Field getDeclaredField(String name) 获取指定的任意变量 (2)返回多个成员变量 public Field[] getFields() 获取所有public 修饰的变量 public Field[] getDecla

系统级性能分析工具perf的介绍与使用

测试环境:Ubuntu14.04  on VMWare Kernel:3.13.0-32 系统级性能优化通常包括两个阶段:性能剖析(performance profiling)和代码优化.性能剖析的目标是寻找性能瓶颈,查找引发性能问题的原因及热点代码.代码优化的目标是针对具体性能问题而优化代码或编译选项,以改善软件性能. 在性能剖析阶段,需要借助于现有的profiling工具,如perf等.在代码优化阶段往往需要借助开发者的经验,编写简洁高效的代码,甚至在汇编级别合理使用各种指令,合理安排各种指

系统级I/O学习记录

重要知识点 输入/输出(I/O) I/O是主存和外部设备(如磁盘驱动器.终端和网络)之间拷贝数据的过程. 输入操作是从I/O设备拷贝数据到主存. 输出操作是从主存拷贝到I/O设备. Unix I/O 在unix中所有的I/O设备都被模型化为文件,这使得所有的输入输出都能以一种统一的方式进行. 打开文件:一个应用程序通过要求内核打开相应的文件,来宣告它想要访问一个I/O设备.内核返回一个小的非负整数,叫做描述符,它在后续对此文件的所有操作中标识这个文件. Unix外壳创建的每个进程开始时都有三个打

第十章 系统级I/O

第十章 系统级I/O 一.Unix I/O 1.一个unix文件就是一个m个字节的序列 2.unix外壳创建的每个进程开始时都有三个打开的文件:标准输入(0) .标准输出(1)和标准错误(-1). 二.打开个关闭文件 1.int open(char *filename, int flags, mode_t mede );       //将filename转换为一个文件描述符,并且返回描述数字 filename 文件名 flag 如何访问或更多位掩码 mode 指定新文件的访问权限 2.clos

第10章 系统级I/O

第10章 系统级I/O 10.1 Unix I/O 一个Unix文件就是一个m个字节的序列:B0,B1,…,BK,…,Bm-1 Unix I/O:一种将设备优雅地映射为文件的方式,允许Unix内核引出一个简单.低级的应用接口,这使得所有的输入输出都能以一种统一且一致的方式来执行: 打开文件: 内核返回一个小的非负整数,叫做描述符. Unix外壳创建的每个进程开始时都有三个打开的文件:标准输入(描述符为0).标准输出(描述符为1).标准错误(描述符为2). 改变当前文件位置: 对于每个打开的文件,