SpringBootはどのように特定のクラスの優先起動を指定しますか?
一、需要
1、プロジェクトにはいくつかのIPアドレスとポートが制限されています。プロファイルの内容(ip)に書いてこそ、プロジェクトにアクセスできます。
2、テストケースの運転を行う時に、プロファイルのipとportのクラス(CbeConfig)の読み取りを事前に実行することを保証します。
二、仕事
1、次のようなテストは絶対だめです。
CbenfigBefore類Application Runnerインターフェースを実現するrun方法
解決しましたが、やはり疑問を持っています。幸いにも読み終わった同志に欠点を指摘してください。ありがとうございます。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
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、解決します。解決しましたが、やはり疑問を持っています。幸いにも読み終わった同志に欠点を指摘してください。ありがとうございます。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。