博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何在Spring加载bean之前设置系统属性
阅读量:6373 次
发布时间:2019-06-23

本文共 1499 字,大约阅读时间需要 4 分钟。

hot3.png

Spring Junit 单元测试 在bean初始化前设置系统属性

背景:

已有代码,有些工厂类通过System.getProperty("xxx")来得到配置信息, 进行单元测试时想通过代码来显式设置系统属性, 而不是手工在eclispe中配置,如-Ddbconfig=/etc/config/db.config. 

203638_Qg2n_1175066.png

失败尝试一:

刚开始天真的以为只要在运行测试方法前设置系统属性即可,如下所示:

 @org.junit.Before  public void setUp() {       System.setProperty("dbconfig", "/etc/config/db.config");  }

结果证明在进入setUp时,spring就已完成了bean的初始话了, 故在进入setUp前,就会抛出空指针异常.

失败尝试二:

想能不能在spring加载bean之前,就设置系统属性,尝试了如下的方法,

    
        
        
        
        
                    

即在applicationContext一开始就设置系统属性,发现也不灵,spring加载bean时,加载上述的MethodInvokingFactoryBean bean的顺序是随机的,故有可能在加载它之前就报空指针异常了.

可以观察如下的日志输出:

INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@543e710e: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,......org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor]; root of factory hierarchy

成功尝试:

最后尝试了如下的方法,可以满足要求,即程序运行一开始就添加系统属性

static {    System.out.println("Set system properties...");       System.setProperty("dbconfig", "/etc/config/db.config");  }

即将添加系统属性的代码放在在测试类中的静态代码块中,这样的话运行单元测试时,便会首先执行静态代码块中的内容了.

参考文档:

转载于:https://my.oschina.net/zhuguowei/blog/480941

你可能感兴趣的文章
stm32系列单片机之printf重定向
查看>>
如何从windows平台自动连接到Linux/Mac机运行shell脚本?
查看>>
【HBase从入门到精通系列】如何避免HBase写入过快引起的各种问题
查看>>
新功能:阿里云负载均衡SLB支持HTTP访问强制跳转HTTPS
查看>>
抖音网红小姐姐和她的老板带你玩转阿里云双11
查看>>
sysbench的框架实现介绍
查看>>
ESX 4.0 vsd-mount 错误
查看>>
Linux性能优化 第二章 性能工具:系统CPU
查看>>
收集FreeBSD 磁盘实时IO数据脚本
查看>>
我的友情链接
查看>>
nginx日志的错误级别
查看>>
第19集 介系词
查看>>
远程桌面服务
查看>>
Oracle数据导入导出
查看>>
使用Varnish实现web前置缓存加速
查看>>
用dos命令启动服务程序或关闭服务程序
查看>>
android中的dp概念以及关系换算
查看>>
Fail Open Hav
查看>>
通过shell脚本实现对oracle RMAN备份集压缩并异地备份
查看>>
FlowVisor入门教程
查看>>