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を使います。
CbenfigBefore類Application Runnerインターフェースを実現する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;
 }
}
CbenfigAfter類は単例モードとなります。

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);
 }
}
この時はgetCbeByAfter Testテストクラスを再起動し、OK、解決します。
解決しましたが、やはり疑問を持っています。幸いにも読み終わった同志に欠点を指摘してください。ありがとうございます。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。