首页 > 编程 > Java > 正文

SpringBoot如何指定某些类优先启动

2019-11-26 08:31:20
字体:
来源:转载
供稿:网友

一、需求

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;@Componentpublic 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,搞定。

虽然搞定,但是我还是仍有心有疑虑,请有幸读完的同志挑挑毛病。谢谢。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表