最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot全局域名替換的實(shí)現(xiàn)

 更新時(shí)間:2025年09月02日 08:17:46   作者:柯南二號(hào)  
本文主要介紹了SpringBoot全局域名替換的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

寫一個(gè) Spring Boot 全局域名替換 Demo,可以直接跑起來驗(yàn)證。

?? 項(xiàng)目結(jié)構(gòu)

springboot-global-domain-demo
 ├── src/main/java/com/example/demo
 │    ├── DemoApplication.java
 │    ├── config/AppProperties.java
 │    └── controller/TestController.java
 └── src/main/resources
      └── application.yml

?? 配置文件application.yml

server:
  port: 8081

app:
  base-domain: https://api.example.com
  services:
    user: ${app.base-domain}/user
    order: ${app.base-domain}/order

??? 配置類AppProperties.java

package com.example.demo.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.Map;

@Component
@ConfigurationProperties(prefix = "app")
public class AppProperties {
    private String baseDomain;
    private Map<String, String> services;

    public String getBaseDomain() {
        return baseDomain;
    }

    public void setBaseDomain(String baseDomain) {
        this.baseDomain = baseDomain;
    }

    public Map<String, String> getServices() {
        return services;
    }

    public void setServices(Map<String, String> services) {
        this.services = services;
    }
}

?? 控制器TestController.java

package com.example.demo.controller;

import com.example.demo.config.AppProperties;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    private final AppProperties appProperties;

    public TestController(AppProperties appProperties) {
        this.appProperties = appProperties;
    }

    @GetMapping("/test")
    public String test() {
        String userUrl = appProperties.getServices().get("user");
        String orderUrl = appProperties.getServices().get("order");
        return "User API: " + userUrl + " | Order API: " + orderUrl;
    }
}

?? 啟動(dòng)類DemoApplication.java

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

?? 運(yùn)行結(jié)果

啟動(dòng)應(yīng)用后訪問:

http://localhost:8081/test

返回結(jié)果:

User API: https://api.example.com/user | Order API: https://api.example.com/order

這樣你只需要在 application.yml 改一處:

app.base-domain=https://api.newdomain.com

所有地方就會(huì)自動(dòng)替換。

那么問題來了?現(xiàn)在這樣使用的話,全局每個(gè)Controller類里都需要注入這個(gè)AppProperties,不優(yōu)雅。

如果每個(gè) Controller 都要用 AppProperties,那就意味著每個(gè)類都要注入一遍。這樣雖然符合 Spring 的依賴注入設(shè)計(jì),但確實(shí)會(huì)有點(diǎn)麻煩。

有幾種 只需要注入一次,全局就能用 的做法??:

? 方案一:靜態(tài)常量 + @PostConstruct

AppProperties 初始化時(shí),把值放到靜態(tài)變量里,所有類直接靜態(tài)調(diào)用。

@Component
@ConfigurationProperties(prefix = "app")
public class AppProperties {
    private String baseDomain;

    public String getBaseDomain() {
        return baseDomain;
    }
    public void setBaseDomain(String baseDomain) {
        this.baseDomain = baseDomain;
    }

    // 靜態(tài)變量,供全局調(diào)用
    public static String BASE_DOMAIN;

    @PostConstruct
    public void init() {
        BASE_DOMAIN = baseDomain;
    }
}

使用:

String url = AppProperties.BASE_DOMAIN + "/user";

?? 好處:所有類都能直接訪問,不需要注入。
?? 缺點(diǎn):靜態(tài)變量屬于硬編碼,測(cè)試/Mock 不方便。

? 方案二:封裝成工具類(推薦一點(diǎn))

新建一個(gè)工具類,注入一次配置,然后全局靜態(tài)訪問。

@Component
public class DomainHolder {
    private static String baseDomain;

    @Value("${app.base-domain}")
    public void setBaseDomain(String baseDomain) {
        DomainHolder.baseDomain = baseDomain;
    }

    public static String getBaseDomain() {
        return baseDomain;
    }
}

使用:

String url = DomainHolder.getBaseDomain() + "/order";

? 方案三:利用 Spring 的 Environment

Spring Boot 本身有個(gè) Environment,可以隨時(shí)取配置:

@Autowired
private Environment env;

public void test() {
    String baseDomain = env.getProperty("app.base-domain");
    System.out.println(baseDomain);
}

如果不想每個(gè)地方都注入,可以同樣封裝成靜態(tài)工具類:

@Component
public class EnvUtils {
    private static Environment environment;

    @Autowired
    public void setEnvironment(Environment env) {
        EnvUtils.environment = env;
    }

    public static String get(String key) {
        return environment.getProperty(key);
    }
}

使用:

String url = EnvUtils.get("app.base-domain") + "/user";

? 總結(jié)

  • 如果配置只在少量地方用:直接注入 AppProperties 更優(yōu)雅。
  • 如果幾乎所有 Controller 都要用:推薦 方案二(DomainHolder 工具類),寫法簡(jiǎn)潔,還支持占位符。
  • 如果想最大靈活:用 Environment 封裝成工具類。

要不要我?guī)湍銓懸粋€(gè) 方案二的完整 Demo,這樣所有 Controller 里就不用再注入了?

到此這篇關(guān)于SpringBoot全局域名替換的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)SpringBoot全局域名替換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java實(shí)現(xiàn)文件分片上傳接口的示例代碼

    Java實(shí)現(xiàn)文件分片上傳接口的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用Java語言實(shí)現(xiàn)文件分片上傳的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2022-07-07
  • 基于Java實(shí)現(xiàn)簡(jiǎn)單的身材計(jì)算程序

    基于Java實(shí)現(xiàn)簡(jiǎn)單的身材計(jì)算程序

    這篇文章主要為大家詳細(xì)介紹了如何利用Java實(shí)現(xiàn)簡(jiǎn)單的身材計(jì)算程序,可以計(jì)算身體的體脂率以及BMI數(shù)值等,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-12-12
  • Java使用easyExcel實(shí)現(xiàn)導(dǎo)入功能

    Java使用easyExcel實(shí)現(xiàn)導(dǎo)入功能

    這篇文章介紹了Java使用easyExcel實(shí)現(xiàn)導(dǎo)入功能的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • Java開發(fā)實(shí)現(xiàn)的Socket雙向通信功能示例

    Java開發(fā)實(shí)現(xiàn)的Socket雙向通信功能示例

    這篇文章主要介紹了Java開發(fā)實(shí)現(xiàn)的Socket雙向通信功能,結(jié)合實(shí)例形式分析了java基于socket實(shí)現(xiàn)的服務(wù)器端與客戶端雙向通信相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • 使用spring容器在初始化Bean時(shí)前和后的操作

    使用spring容器在初始化Bean時(shí)前和后的操作

    這篇文章主要介紹了使用spring容器在初始化Bean時(shí)前和后的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 使用 Java8 實(shí)現(xiàn)觀察者模式的方法(下)

    使用 Java8 實(shí)現(xiàn)觀察者模式的方法(下)

    這篇文章主要介紹了使用 Java8 實(shí)現(xiàn)觀察者模式的方法(下)的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • JAVA多線程的使用場(chǎng)景與注意事項(xiàng)總結(jié)

    JAVA多線程的使用場(chǎng)景與注意事項(xiàng)總結(jié)

    這篇文章主要給大家介紹了關(guān)于JAVA多線程的使用場(chǎng)景與注意事項(xiàng)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Springboot使用test無法啟動(dòng)問題的解決

    Springboot使用test無法啟動(dòng)問題的解決

    這篇文章主要介紹了Springboot使用test無法啟動(dòng)問題的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 解決Maven中的依賴導(dǎo)包問題(組合技巧)

    解決Maven中的依賴導(dǎo)包問題(組合技巧)

    自從我開始接觸了以spring為框架的項(xiàng)目學(xué)習(xí)后,這個(gè)maven導(dǎo)包老是出現(xiàn)問題,每次在這個(gè)上面花費(fèi)好多時(shí)間,于是乎打算寫一個(gè)秘籍出來,這篇文章主要介紹了解決Maven中的依賴導(dǎo)包問題,需要的朋友可以參考下
    2023-11-11
  • Flutter瀑布流仿寫原生的復(fù)用機(jī)制詳解

    Flutter瀑布流仿寫原生的復(fù)用機(jī)制詳解

    這篇文章主要給大家介紹了關(guān)于Flutter瀑布流仿寫原生的復(fù)用機(jī)制的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用flutter具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-07-07

最新評(píng)論

驻马店市| 湘乡市| 望城县| 南郑县| 中江县| 饶阳县| 剑阁县| 黎平县| 宁南县| 日土县| 万荣县| 成安县| 古交市| 临澧县| 冕宁县| 乌拉特前旗| 华坪县| 陆河县| 兴安盟| 五华县| 武功县| 灵宝市| 吴川市| 玛纳斯县| 重庆市| 方正县| 桐庐县| 响水县| 西充县| 眉山市| 绥阳县| 东方市| 高清| 股票| 大港区| 凤台县| 铁力市| 策勒县| 澄迈县| 广丰县| 温泉县|