小编给大家分享一下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,搞定。
虽然搞定,但是我还是仍有心有疑虑,请有幸读完的同志挑挑毛病。谢谢。
看完了这篇文章,相信你对“SpringBoot指定某些类优先启动的实现方法”有了一定的了解,如果想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。