美文网首页
SpringBoot 单元测试 添加Listener

SpringBoot 单元测试 添加Listener

作者: 暮丶晓 | 来源:发表于2018-09-11 11:00 被阅读0次

    最近写SpringBoot项目,因为有一些配置需要在线程中使用,准备通过添加Listener的方式实现配置文件的获取,在写单元测试的时候,发现Listener为启用,进过尝试,解决了,方法如下:

    Listener类:

    public class PropertyListener implements ApplicationListener<ContextRefreshedEvent> {

    private static final LoggerLOGGER = LoggerFactory.getLogger(PropertyListener.class);

        @Override

        public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {

    Environment env = (Environment) contextRefreshedEvent.getApplicationContext()

    .getBean("environment");

            String fileName ="application.properties";

            Map map =new HashMap<>();

            getProperties(fileName, map);

            if (env.getActiveProfiles() !=null && env.getActiveProfiles().length >0) {

    fileName ="application-" + env.getActiveProfiles()[0] +".properties";

                getProperties(fileName, map);

            }

    PropertyUtil.getInstance(map, fileName);

        }

    private void getProperties(String fileName, Map map) {

    try {

    Resource resource =new ClassPathResource(fileName);

                InputStream is = resource.getInputStream();

                Properties ps =new Properties();

                ps.load(is);

                ps.forEach((key, value) -> {

    map.put(String.valueOf(key), value ==null ?null : String.valueOf(value));

                });

            }catch (IOException e) {

         LOGGER.error("读取配置文件异常:", e);

            }

    }

    }

    单元测试类:

    @RunWith(SpringRunner.class)

    @SpringBootTest

    public class SpringBootApplicationTests {

    @Test

        public void testParam() {

           Param param = ParamsUtil.getParam("xxxx");

            System.out.println(param.toJson());

        }

    }

    方法一:通过在单元测试类上添加@Import注解实现:

    此时,单元测试类如下:

    @RunWith(SpringRunner.class)

    @SpringBootTest

    @Import(PropertyListener.class)

    public class SpringBootApplicationTests {

    @Test

        public void testParam() {

            Param param = ParamsUtil.getParam("xxxx");

            System.out.println(param.toJson());

        }

    }

    方法二:通过给Listener类添加@Component注解,将其交给spring管理,也能实现,而且更方便,常规启动项目也能使用,非常方便,推荐方式:

    @Component

    public class PropertyListener implements ApplicationListener<ContextRefreshedEvent>

    相关文章

      网友评论

          本文标题:SpringBoot 单元测试 添加Listener

          本文链接:https://www.haomeiwen.com/subject/ggtegftx.html