亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

0. 需求

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

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

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

當(dāng)SpringBoot項(xiàng)目只使用一個(gè)配置文件(application.yml或application.properties)時(shí),如果想在這個(gè)配置文件中通過配置切換不同數(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. 測試代碼

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. 測試結(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)境的配置信息,感覺不太好...

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

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

2.1 . 三個(gè)環(huán)境對應(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

測試結(jié)果:

2.4.2. 開啟test

測試結(jié)果:

2.4.3. 開啟prod

測試結(jié)果:

3. 使用建議

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

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

相關(guān)文章

最新評論