温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

SpringBoot指定某些类优先启动的实现方法

发布时间:2021-02-02 14:36:04 来源:亿速云 阅读:284 作者:小新 栏目:编程语言

小编给大家分享一下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指定某些类优先启动的实现方法”有了一定的了解,如果想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI