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

网友投稿 532 2023-07-19

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

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 porthttp://;

@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.poryzntzt = 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;yzntz

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

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:spring Security的自定义用户认证过程详解
下一篇:springboot无法跳转页面的问题解决方案
相关文章

 发表评论

暂时没有评论,来抢沙发吧~