SpringBoot如何指定某些类优先启动
一、需求
1、项目中对某些IP地址和端口做了限制,只有写在配置文件的内容(ip)才可以访问项目。
2、在进行测试案例运行时保证读取配置文件中ip和port的类(CbeConfig)得提前运行。
二、工作
1、如下的测试时肯定不行
@Test public void getCbeTest(){ CbeConfig cbeConfig = new CbeConfig(); System.out.println("IP是" + cbeConfig.getIp()); System.out.println("Port是" + cbeConfig.port); }
2、保证CbeConfig类在程序运行起来的那一刻先存在,先写一个读取配置的类,程序运行起来后读取到配置后,然后再将读取的参数设置到另一个类(CbeConfigAfter)中,以后提取参数。都使用CbeConfigAfter。
CbeConfigBefore类实现ApplicationRunner接口的run方法
package com.example.demo; import lombok.Getter; import lombok.Setter; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.stereotype.Component; @Component public class CbeConfigBefore implements ApplicationRunner { @Value("${cbe.ip}") public String ip; @Value("${cbe.port}") public Integer port; @Override public void run(ApplicationArguments applicationArguments) throws Exception { System.out.println("我第一个启动"); System.out.println("哈哈ip" + ip); System.out.println("哈哈port" + port); CbeConfigAfter cbeConfigAfter = CbeConfigAfter.getInstance(); cbeConfigAfter.setIp(ip); cbeConfigAfter.setPort(port); System.out.println("设置完毕"); } public String getIp() { return ip; } public void setIp(String ip) { this.ip = ip; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } }
CbeConfigAfter类写成单例模式
package com.example.demo; import lombok.Getter; import lombok.Setter; public class CbeConfigAfter { public String getIp() { return ip; } public void setIp(String ip) { this.ip = ip; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } String ip; int port; private static CbeConfigAfter cbeConfigAfter; private CbeConfigAfter (){} public static synchronized CbeConfigAfter getInstance() { if (cbeConfigAfter == null) { cbeConfigAfter = new CbeConfigAfter(); } return cbeConfigAfter; } }
测试类
package com.example.demo.controllerTest; import com.example.demo.CbeConfigAfter; import com.example.demo.CbeConfigBefore; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringBootConfiguration; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @SpringBootTest @RunWith(SpringJUnit4ClassRunner.class) public class CbeTest { @Test public void getCbeByAfterTest(){ CbeConfigAfter instance = CbeConfigAfter.getInstance(); System.out.println("IP是" + instance.getIp()); System.out.println("端口是" + instance.getPort()); } @Test public void getCbeBeforeTest(){ CbeConfigBefore cbeConfig = new CbeConfigBefore(); System.out.println("IP是" + cbeConfig.getIp()); System.out.println("Port是" + cbeConfig.port); } }
此时再运行getCbeByAfterTest测试类,OK,搞定。
虽然搞定,但是我还是仍有心有疑虑,请有幸读完的同志挑挑毛病。谢谢。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
赞 (0)