SpringBoot如何指定某些类优先启动
一、需求
1、项目中对某些IP地址和端口做了限制,只有写在配置文件的内容(ip)才可以访问项目。
2、在进行测试案例运行时保证读取配置文件中ip和port的类(CbeConfig)得提前运行。
二、工作
1、如下的测试时肯定不行
@Test publicvoidgetCbeTest(){ CbeConfigcbeConfig=newCbeConfig(); System.out.println("IP是"+cbeConfig.getIp()); System.out.println("Port是"+cbeConfig.port); }
2、保证CbeConfig类在程序运行起来的那一刻先存在,先写一个读取配置的类,程序运行起来后读取到配置后,然后再将读取的参数设置到另一个类(CbeConfigAfter)中,以后提取参数。都使用CbeConfigAfter。
CbeConfigBefore类实现ApplicationRunner接口的run方法
packagecom.example.demo; importlombok.Getter; importlombok.Setter; importorg.springframework.beans.factory.annotation.Value; importorg.springframework.boot.ApplicationArguments; importorg.springframework.boot.ApplicationRunner; importorg.springframework.stereotype.Component; @Component publicclassCbeConfigBeforeimplementsApplicationRunner{ @Value("${cbe.ip}") publicStringip; @Value("${cbe.port}") publicIntegerport; @Override publicvoidrun(ApplicationArgumentsapplicationArguments)throwsException{ System.out.println("我第一个启动"); System.out.println("哈哈ip"+ip); System.out.println("哈哈port"+port); CbeConfigAftercbeConfigAfter=CbeConfigAfter.getInstance(); cbeConfigAfter.setIp(ip); cbeConfigAfter.setPort(port); System.out.println("设置完毕"); } publicStringgetIp(){ returnip; } publicvoidsetIp(Stringip){ this.ip=ip; } publicintgetPort(){ returnport; } publicvoidsetPort(intport){ this.port=port; } }
CbeConfigAfter类写成单例模式
packagecom.example.demo; importlombok.Getter; importlombok.Setter; publicclassCbeConfigAfter{ publicStringgetIp(){ returnip; } publicvoidsetIp(Stringip){ this.ip=ip; } publicintgetPort(){ returnport; } publicvoidsetPort(intport){ this.port=port; } Stringip; intport; privatestaticCbeConfigAftercbeConfigAfter; privateCbeConfigAfter(){} publicstaticsynchronizedCbeConfigAftergetInstance(){ if(cbeConfigAfter==null){ cbeConfigAfter=newCbeConfigAfter(); } returncbeConfigAfter; } }
测试类
packagecom.example.demo.controllerTest; importcom.example.demo.CbeConfigAfter; importcom.example.demo.CbeConfigBefore; importorg.junit.Test; importorg.junit.runner.RunWith; importorg.junit.runners.JUnit4; importorg.springframework.beans.factory.annotation.Value; importorg.springframework.boot.SpringBootConfiguration; importorg.springframework.boot.context.properties.ConfigurationProperties; importorg.springframework.boot.test.context.SpringBootTest; importorg.springframework.test.context.TestPropertySource; importorg.springframework.test.context.junit4.SpringJUnit4ClassRunner; @SpringBootTest @RunWith(SpringJUnit4ClassRunner.class) publicclassCbeTest{ @Test publicvoidgetCbeByAfterTest(){ CbeConfigAfterinstance=CbeConfigAfter.getInstance(); System.out.println("IP是"+instance.getIp()); System.out.println("端口是"+instance.getPort()); } @Test publicvoidgetCbeBeforeTest(){ CbeConfigBeforecbeConfig=newCbeConfigBefore(); System.out.println("IP是"+cbeConfig.getIp()); System.out.println("Port是"+cbeConfig.port); } }
此时再运行getCbeByAfterTest测试类,OK,搞定。
虽然搞定,但是我还是仍有心有疑虑,请有幸读完的同志挑挑毛病。谢谢。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。