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,搞定。
虽然搞定,但是我还是仍有心有疑虑,请有幸读完的同志挑挑毛病。谢谢。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。