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

SpringBoot之Profile的兩種使用方式詳解

 更新時(shí)間:2024年10月04日 08:57:08   作者:太自由  
當(dāng)在不同的環(huán)境下,想通過(guò)修改配置文件來(lái)連接不同的數(shù)據(jù)庫(kù),比如在開發(fā)過(guò)程中啟動(dòng)項(xiàng)目時(shí),想連接開發(fā)環(huán)境對(duì)應(yīng)的數(shù)據(jù)庫(kù),可以在配置文件中指定environment=dev,其他環(huán)境類似,此時(shí)就需要用到Spring為我們提供的Profile功能,本文給大家介紹了SpringBoot之Profile的兩種使用方式

0. 需求

通常項(xiàng)目開發(fā)過(guò)程中,會(huì)經(jīng)歷多種環(huán)境轉(zhuǎn)換,典型的如開發(fā)環(huán)境(dev)、測(cè)試環(huán)境(test)和生產(chǎn)環(huán)境(prod)。在這三種不同的環(huán)境下,連接數(shù)據(jù)庫(kù)時(shí)使用的配置信息是不同的,即三個(gè)不同環(huán)境對(duì)應(yīng)三個(gè)不同的數(shù)據(jù)庫(kù)。

現(xiàn)在的需求是:當(dāng)在不同的環(huán)境下,想通過(guò)修改配置文件來(lái)連接不同的數(shù)據(jù)庫(kù)。比如在開發(fā)過(guò)程中啟動(dòng)項(xiàng)目時(shí),想連接開發(fā)環(huán)境對(duì)應(yīng)的數(shù)據(jù)庫(kù),可以在配置文件中指定 environment = dev。其他環(huán)境類似,此時(shí)就需要用到Spring為我們提供的Profile功能。

1. 采用一個(gè)配置文件的情況

當(dāng)SpringBoot項(xiàng)目只使用一個(gè)配置文件(application.yml或application.properties)時(shí),如果想在這個(gè)配置文件中通過(guò)配置切換不同數(shù)據(jù)源,可以按照如下步驟:

1.1. 數(shù)據(jù)源類

package com.shg.spring.ioc.bean;
 
import lombok.Data;
 
@Data
public class MyDataSource {
    
    private String username;
 
    private String password;
 
    private String url;
    private String driver;
    
}

1.2. 數(shù)據(jù)源配置類

package com.shg.spring.ioc.config;
 
import com.shg.spring.ioc.bean.MyDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
 
@Configuration
public class MyDataSourceConfig {
 
    @Value("${jdbc.user.dev}")
    private String usernameForDev;
    @Value("${jdbc.password.dev}")
    private String passwordForDev;
    @Value("${jdbc.jdbcUrl.dev}")
    private String urlForDev;
    @Value("${jdbc.driverClass.dev}")
    private String driverForDev;
 
    @Value("${jdbc.user.test}")
    private String usernameForTest;
    @Value("${jdbc.password.test}")
    private String passwordForTest;
    @Value("${jdbc.jdbcUrl.test}")
    private String urlForTest;
    @Value("${jdbc.driverClass.test}")
    private String driverForTest;
 
    @Value("${jdbc.user.prod}")
    private String usernameForProd;
    @Value("${jdbc.password.pro}")
    private String passwordForProd;
    @Value("${jdbc.jdbcUrl.pro}")
    private String urlForProd;
    @Value("${jdbc.driverClass.pro}")
    private String driverForProd;
 
    @Profile(value = {"default", "dev"})
    @Bean
    public MyDataSource dev() {
        MyDataSource myDataSource = new MyDataSource();
        myDataSource.setDriver(driverForDev);
        myDataSource.setUrl(urlForDev);
        myDataSource.setUsername(usernameForDev);
        myDataSource.setPassword(passwordForDev);
        return myDataSource;
    }
 
    @Profile(value = {"test"})
    @Bean
    public MyDataSource test() {
        MyDataSource myDataSource = new MyDataSource();
        myDataSource.setDriver(driverForTest);
        myDataSource.setUrl(urlForTest);
        myDataSource.setUsername(usernameForTest);
        myDataSource.setPassword(passwordForTest);
        return myDataSource;
    }
 
    @Profile(value = {"prod"})
    @Bean
    public MyDataSource prod() {
        MyDataSource myDataSource = new MyDataSource();
        myDataSource.setDriver(driverForProd);
        myDataSource.setUrl(urlForProd);
        myDataSource.setUsername(usernameForProd);
        myDataSource.setPassword(passwordForProd);
        return myDataSource;
    }
}

1.3 DAO層用到數(shù)據(jù)源

package com.shg.spring.ioc.dao;
 
import com.shg.spring.ioc.bean.MyDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
 
@Repository
public class HelloDao {
 
    // DAO層需要注入數(shù)據(jù)源
    @Autowired
    private MyDataSource myDataSource;
 
    // 保存發(fā)貨信息
    public void saveDelivery() {
        System.out.println("保存發(fā)貨信息...用的數(shù)據(jù)源信息是:" + myDataSource);
    }
 
}

1.4. 配置文件

spring.application.name=spring-01-ioc
 
spring.profiles.active=dev
 
jdbc.jdbcUrl.dev=jdbc:mysql://localhost:3306/dev
jdbc.driverClass.dev=com.mysql.jdbc.Driver
jdbc.user.dev=root
jdbc.password.dev=123
 
jdbc.jdbcUrl.test=jdbc:mysql://localhost:3306/test
jdbc.driverClass.test=com.mysql.jdbc.Driver
jdbc.user.test=root
jdbc.password.test=123
 
jdbc.jdbcUrl.prod=jdbc:mysql://localhost:3306/prod
jdbc.driverClass.prod=com.mysql.jdbc.Driver
jdbc.user.prod=root
jdbc.password.prod=123

1.5. 測(cè)試代碼

package com.shg.spring.ioc;
 
import com.shg.spring.ioc.dao.HelloDao;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
 
@SpringBootApplication
public class Spring01IocApplication {
 
    public static void main(String[] args) {
        ConfigurableApplicationContext ioc = SpringApplication.run(Spring01IocApplication.class, args);
        HelloDao helloDao = ioc.getBean(HelloDao.class);
        helloDao.saveDelivery();
    }
    
}

1.6. 測(cè)試結(jié)果

 1.6.1 配置文件中的spring.profiles=dev

1.6.2 配置文件中的spring.profiles=test

1.6.3 配置文件中的spring.profiles=prod

 2. 采用多個(gè)配置文件的情況

上面的例子中,只使用一個(gè)配置文件。需要在這個(gè)配置文件中配置三種環(huán)境的配置信息,感覺不太好...

【你也可能會(huì)反駁說(shuō),我直接使用一組配置信息,不分什么dev,test和prod環(huán)境,在配置類中也不用標(biāo)注@Profile注解,而是在部署對(duì)應(yīng)環(huán)境的時(shí)候,修改這個(gè)數(shù)據(jù)源的配置信息,這當(dāng)然也是可以的,但是不要忘了我們現(xiàn)在是在討論 Profile這個(gè)功能,這樣舉例子會(huì)更加清楚明了】

下面我們采用另一種方式,來(lái)實(shí)現(xiàn)我們的需求,即:在不同的環(huán)境下,可以直接通過(guò)修改配置文件來(lái)連接不同的數(shù)據(jù)庫(kù)。

2.1 . 三個(gè)環(huán)境對(duì)應(yīng)的配置文件

2.1.1 dev環(huán)境的配置信息

2.1.2 test環(huán)境的配置信息

2.1.3 prod環(huán)境的配置信息

2.2. 數(shù)據(jù)源類

package com.shg.spring.ioc.bean;
 
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
 
@Data
@Component
public class MyDataSource {
 
    @Value("${jdbc.user}")
    private String usernameForDev;
    
    @Value("${jdbc.password}")
    private String passwordForDev;
    
    @Value("${jdbc.jdbcUrl}")
    private String urlForDev;
    
    @Value("${jdbc.driverClass}")
    private String driverForDev;
    
}

2.3. DAO層需要用到數(shù)據(jù)源

package com.shg.spring.ioc.dao;
 
import com.shg.spring.ioc.bean.MyDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
 
@Repository
public class HelloDao {
 
    // DAO層需要注入數(shù)據(jù)源
    @Autowired
    private MyDataSource myDataSource;
 
    // 保存發(fā)貨信息
    public void saveDelivery() {
        System.out.println("保存發(fā)貨信息...用的數(shù)據(jù)源信息是:" + myDataSource);
    }
 
}

2.4. 在主配置文件中開啟需要使用哪個(gè)環(huán)境的配置文件

2.4.1. 開啟dev

測(cè)試結(jié)果:

2.4.2. 開啟test

測(cè)試結(jié)果:

2.4.3. 開啟prod

測(cè)試結(jié)果:

3. 使用建議

在實(shí)際項(xiàng)目中,推薦在不同環(huán)境使用不同的配置文件。 

以上就是SpringBoot之Profile的兩種使用方式詳解的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot Profile使用方式的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • IntelliJ IDEA 2020下載與安裝教程圖文詳解

    IntelliJ IDEA 2020下載與安裝教程圖文詳解

    這篇文章主要介紹了IDEA 2020下載與安裝的教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Java實(shí)現(xiàn)表白小程序

    Java實(shí)現(xiàn)表白小程序

    本文講述了Java實(shí)現(xiàn)表白的代碼實(shí)例。具有很好的參考價(jià)值,希望對(duì)大家有所幫助,一起跟隨小編過(guò)來(lái)看看吧,具體如下:
    2018-05-05
  • SpringSecurity Jwt Token 自動(dòng)刷新的實(shí)現(xiàn)

    SpringSecurity Jwt Token 自動(dòng)刷新的實(shí)現(xiàn)

    這篇文章主要介紹了SpringSecurity Jwt Token 自動(dòng)刷新的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Java橋接模式原理及用法解析

    Java橋接模式原理及用法解析

    這篇文章主要介紹了Java橋接模式原理及用法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • SpringBoot集成圖片驗(yàn)證碼框架easy-captcha的詳細(xì)過(guò)程

    SpringBoot集成圖片驗(yàn)證碼框架easy-captcha的詳細(xì)過(guò)程

    本文介紹了如何將Easy-Captcha框架集成到SpringBoot項(xiàng)目中,實(shí)現(xiàn)圖片驗(yàn)證碼功能,Easy-Captcha是一款輕量級(jí)的開源驗(yàn)證碼框架,通過(guò)簡(jiǎn)潔的API和高度可定制性,可以快速實(shí)現(xiàn)驗(yàn)證碼功能,文章詳細(xì)介紹了如何配置、生成和展示驗(yàn)證碼,并提供了Easy-Captcha的GitHub地址
    2025-03-03
  • SpringBoot對(duì)數(shù)據(jù)訪問(wèn)層進(jìn)行單元測(cè)試的方法詳解

    SpringBoot對(duì)數(shù)據(jù)訪問(wèn)層進(jìn)行單元測(cè)試的方法詳解

    我們公司作為一個(gè)面向銀行、金融機(jī)構(gòu)的TO B類企業(yè),頻繁遇到各個(gè)甲方爸爸提出的國(guó)產(chǎn)化數(shù)據(jù)庫(kù)的改造需求,包括OceanBase, TiDB,geldenDB等等,本文就介紹一種快高效、可復(fù)用的解決方案——對(duì)數(shù)據(jù)訪問(wèn)層做單元測(cè)試,需要的朋友可以參考下
    2023-08-08
  • Java JAR包運(yùn)行與反編譯實(shí)踐

    Java JAR包運(yùn)行與反編譯實(shí)踐

    這篇文章主要介紹了Java JAR包運(yùn)行與反編譯實(shí)踐,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2026-03-03
  • Spring?Boot?基于?SCRAM?認(rèn)證集成?Kafka?的過(guò)程詳解

    Spring?Boot?基于?SCRAM?認(rèn)證集成?Kafka?的過(guò)程詳解

    在本篇文章中,我們將探討如何在?Spring?Boot?應(yīng)用中集成?Kafka?并使用?SCRAM?認(rèn)證機(jī)制進(jìn)行安全連接,并實(shí)現(xiàn)動(dòng)態(tài)創(chuàng)建賬號(hào)、ACL?權(quán)限、Topic,以及生產(chǎn)者和消費(fèi)者等操作,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • java實(shí)現(xiàn)自定義時(shí)鐘并實(shí)現(xiàn)走時(shí)功能

    java實(shí)現(xiàn)自定義時(shí)鐘并實(shí)現(xiàn)走時(shí)功能

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)自定義時(shí)鐘并實(shí)現(xiàn)走時(shí)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 關(guān)于Java類的構(gòu)造方法詳解

    關(guān)于Java類的構(gòu)造方法詳解

    這篇文章主要介紹了關(guān)于Java類的構(gòu)造方法詳解的相關(guān)資料,需要的朋友可以參考下
    2023-01-01

最新評(píng)論

丹寨县| 大兴区| 阿克| 法库县| 且末县| 德钦县| 卢氏县| 怀柔区| 邵阳市| 普洱| 曲阜市| 葫芦岛市| 台中市| 英山县| 磴口县| 广昌县| 屯门区| 泗水县| 资源县| 金塔县| 义乌市| 潼南县| 青海省| 津南区| 通化县| 讷河市| 桓台县| 南江县| 砚山县| 宁河县| 阿瓦提县| 吉林市| 阿拉善左旗| 都兰县| 措勤县| 门源| 平罗县| 莎车县| 荔波县| 江陵县| 定南县|