欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

0. 需求

通常項目開發(fā)過程中,會經歷多種環(huán)境轉換,典型的如開發(fā)環(huán)境(dev)、測試環(huán)境(test)和生產環(huán)境(prod)。在這三種不同的環(huán)境下,連接數據庫時使用的配置信息是不同的,即三個不同環(huán)境對應三個不同的數據庫。

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

1. 采用一個配置文件的情況

當SpringBoot項目只使用一個配置文件(application.yml或application.properties)時,如果想在這個配置文件中通過配置切換不同數據源,可以按照如下步驟:

1.1. 數據源類

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. 數據源配置類

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層用到數據源

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層需要注入數據源
    @Autowired
    private MyDataSource myDataSource;
 
    // 保存發(fā)貨信息
    public void saveDelivery() {
        System.out.println("保存發(fā)貨信息...用的數據源信息是:" + 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. 測試代碼

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. 測試結果

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

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

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

 2. 采用多個配置文件的情況

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

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

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

2.1 . 三個環(huán)境對應的配置文件

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

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

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

2.2. 數據源類

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層需要用到數據源

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層需要注入數據源
    @Autowired
    private MyDataSource myDataSource;
 
    // 保存發(fā)貨信息
    public void saveDelivery() {
        System.out.println("保存發(fā)貨信息...用的數據源信息是:" + myDataSource);
    }
 
}

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

2.4.1. 開啟dev

測試結果:

2.4.2. 開啟test

測試結果:

2.4.3. 開啟prod

測試結果:

3. 使用建議

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

以上就是SpringBoot之Profile的兩種使用方式詳解的詳細內容,更多關于SpringBoot Profile使用方式的資料請關注腳本之家其它相關文章!

相關文章

  • spring?boot集成redisson的最佳實踐示例

    spring?boot集成redisson的最佳實踐示例

    這篇文章主要為大家介紹了spring?boot集成redisson的最佳實踐示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-03-03
  • SpringBoot內置tomcat參數調優(yōu)的實現(xiàn)

    SpringBoot內置tomcat參數調優(yōu)的實現(xiàn)

    springboot內置了tomcat, 并給我們設置了默認參數, 我們怎么樣修改springboot內置的tomcat參數,本文就詳細的來介紹一下,感興趣的可以了解一下
    2023-09-09
  • java關于Date日期類型的大小比較

    java關于Date日期類型的大小比較

    這篇文章主要介紹了java關于Date日期類型的大小比較,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Java中一些基礎概念的使用詳解

    Java中一些基礎概念的使用詳解

    本篇文章是對在Java中一些基礎概念的使用進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 使用springmvc臨時不使用視圖解析器的自動添加前后綴

    使用springmvc臨時不使用視圖解析器的自動添加前后綴

    這篇文章主要介紹了使用springmvc臨時不使用視圖解析器的自動添加前后綴,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Spring?Boot騰訊云短信申請與使用示例

    Spring?Boot騰訊云短信申請與使用示例

    這篇文章主要介紹了Spring?Boot騰訊云短信申請與使用,本文通過實例代碼圖文相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • java多線程編程技術詳解和實例代碼

    java多線程編程技術詳解和實例代碼

    這篇文章主要介紹了 java多線程編程技術詳解和實例代碼的相關資料,需要的朋友可以參考下
    2017-04-04
  • 淺談spring中用到的設計模式及應用場景

    淺談spring中用到的設計模式及應用場景

    下面小編就為大家?guī)硪黄獪\談spring中用到的設計模式及應用場景。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • 解決eclipse上傳svn忽略target文件夾的坑

    解決eclipse上傳svn忽略target文件夾的坑

    這篇文章主要介紹了解決eclipse上傳svn忽略target文件夾的坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 基于Java中Math類的常用函數總結

    基于Java中Math類的常用函數總結

    下面小編就為大家?guī)硪黄贘ava中Math類的常用函數總結。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09

最新評論