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

Spring注解@Profile實現(xiàn)開發(fā)環(huán)境/測試環(huán)境/生產(chǎn)環(huán)境的切換

 更新時間:2023年04月14日 09:58:35   作者:劉牌  
在進行軟件開發(fā)過程中,一般會將項目分為開發(fā)環(huán)境,測試環(huán)境,生產(chǎn)環(huán)境。本文主要介紹了Spring如何通過注解@Profile實現(xiàn)開發(fā)環(huán)境、測試環(huán)境、生產(chǎn)環(huán)境的切換,需要的可以參考一下

前言

在進行軟件開發(fā)過程中,一般會將項目分為開發(fā)環(huán)境,測試環(huán)境,生產(chǎn)環(huán)境,開發(fā)人員在開發(fā)環(huán)境進行開發(fā),然后將代碼合并到測試環(huán)境讓 測試工程師進行測試,測試完成后,開發(fā)人員修改完bug,然后再進行測試,測試工程師測試沒有bug后,再將代碼合并到生產(chǎn)環(huán)境,生產(chǎn)環(huán)境 就是最終給用戶用的,現(xiàn)在的項目一般都是走CI/CD流水線,整個過程就是一條流水線,而在沒有CI/CD之前,開發(fā)人員開發(fā)完畢后,可能需要將代碼 部署上服務器,測試人員再進行測試,還有的直接讓測試人員拉代碼來自己運行,自己測試,這樣效率實在是太低了。那么在這么多環(huán)境之間進行切換, 我們應該需要一定的策略,下面我就是用Spring的@Profile注解來實現(xiàn)環(huán)境之間的切換。

環(huán)境搭建

項目結構

DruidDataSource
└── src
    └── main
        └── java
            └── com.steakliu.druiddatasource
               ├── controller
               │   └── DataSourceController.java
               └── datasource
               │   └── DataSourceConfiguration.java
               └── DruidDataSourceApplication.java
            └── resource
                └── application.yml
                └── application-dev.yml
                └── application-prod.yml
                └── application-test.yml

application.yml

application.yml內容如下,里面主要放的是公共的配置,比如項目的名稱啊,端口啊這些,使用spring.profiles.active = dev/test/prod切換不同的環(huán)境。

server:
  port: 8080
spring:
  profiles:
    active: dev

application-dev.yml

spring:
  datasource:
    druid:
      username: root
      password: xiaosi520@
      url: jdbc:mysql://127.0.0.1:3306/store-dev
      driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource

application-test.yml

spring:
  datasource:
    druid:
      username: root
      password: xiaosi520@
      url: jdbc:mysql://127.0.0.1:3306/store-test
      driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource

application-prod.yml

spring:
  datasource:
    druid:
      username: root
      password: xiaosi520@
      url: jdbc:mysql://127.0.0.1:3306/store-prod
      driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource

從上面我們知道,三個yaml文件主要配置的是數(shù)據(jù)庫,分為dev,test,prod三個庫,我也在數(shù)據(jù)庫創(chuàng)建了三個數(shù)據(jù),等一下我們要根據(jù)不同的配置獲取不同的數(shù)據(jù)庫的數(shù)據(jù), 三個數(shù)據(jù)庫如下,其中每個庫里面都有一張表,分別放了一條測試數(shù)據(jù)。

數(shù)據(jù)源配置DataSourceConfiguration

DataSourceConfiguration是一個數(shù)據(jù)源配置類,我們使用alibaba的Druid數(shù)據(jù)源,使用@Value注解來獲取yaml文件的數(shù)據(jù)庫配置, 定義了三個Bean,并使用@Profile來進行開發(fā)環(huán)境,測試環(huán)境,生產(chǎn)環(huán)境的區(qū)分,這里它會識別application.yml文件中的spring.profiles.active

package com.steakliu.druiddatasource.datasource;

import com.alibaba.druid.pool.DruidDataSource;
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;

import javax.sql.DataSource;

@Configuration
public class DataSourceConfiguration {

    @Value("${spring.datasource.druid.username}")
    private String username;
    @Value("${spring.datasource.druid.password}")
    private String password;
    @Value("${spring.datasource.druid.url}")
    private String url;
    @Value("${spring.datasource.druid.driver-class-name}")
    private String driverClassName;

    @Profile("dev")
    @Bean
    public DataSource devDataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        dataSource.setUrl(url);
        dataSource.setDriverClassName(driverClassName);
        return dataSource;
    }

    @Profile("test")
    @Bean
    public DataSource testDataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        dataSource.setUrl(url);
        dataSource.setDriverClassName(driverClassName);
        return dataSource;
    }

    @Profile("prod")
    @Bean
    public DataSource prodDataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        dataSource.setUrl(url);
        dataSource.setDriverClassName(driverClassName);
        return dataSource;
    }
}

DataSourceController測試Controller

創(chuàng)建一個Controller來測試獲取數(shù)據(jù),這里使用JdbcTemplate來獲取數(shù)據(jù),

package com.steakliu.druiddatasource.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;

@RestController
public class DataSourceController {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @GetMapping("datasource")
    public List<Map<String, Object>> datasource(){
        List<Map<String, Object>> maps = jdbcTemplate.queryForList("SELECT * FROM sys_env");
        return maps;
    }
}

使用Postman進行測試

spring.profiles.active = dev

spring:
  profiles:
    active: dev

spring.profiles.active = test

spring:
  profiles:
    active: test

spring.profiles.active = prod

spring:
  profiles:
    active: dev

到這里我們完成了開發(fā)環(huán)境,測試環(huán)境,生產(chǎn)環(huán)境的切換,其核心就是spring.profiles.active@Profile注解,那么這時候你可能會覺得,每次打包發(fā)布前都需要 去application.yml配置文件中修改spring.profiles.active,是不是有點麻煩,沒錯,確實會有點麻煩,那么我們下面對其改造,使用Maven的profile 來改造,實現(xiàn)勾選式的配置。

使用Maven配置

我們在maven中對dev,test,prod進行定義,如下,使用<profiles>標簽進行包裹,使用<activeByDefault>標簽將dev作為默認的環(huán)境, 在<properties>中定義環(huán)境標識(dev,test,prod),<mvn.profile>是自定義的,可以任意定義,它和application.yml 那邊進行對應。

pom.xml

<profiles>
        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <mvn.profile>dev</mvn.profile>
            </properties>
        </profile>
        <profile>
            <id>test</id>
            <properties>
                <mvn.profile>test</mvn.profile>
            </properties>
        </profile>
        <profile>
            <id>prod</id>
            <properties>
                <mvn.profile>prod</mvn.profile>
            </properties>
        </profile>
    </profiles>

application.yml

application.yml里面使用@mvn.profile@這種方式來讀取pom.xml中的配置。

spring:
  profiles:
    active: @mvn.profile@

定義好上面的pom.xmlapplication.yml后,會在我們IDEA編譯器右側的Maven欄下出現(xiàn)Profiles,就可以 進行選擇了,所實現(xiàn)的效果和直接在applicaiton.yml中修改是一樣的。 

除了上面的這兩種,我們還可以在IDEA里面進行指定,也能達到同樣的效果。

后記

關于使用Spring的@Profile實現(xiàn)環(huán)境之間的切換就說到這里,配置多環(huán)境有很多中方案,主要是看那種適合我們。

以上就是Spring注解@Profile實現(xiàn)開發(fā)環(huán)境/測試環(huán)境/生產(chǎn)環(huán)境的切換的詳細內容,更多關于Spring @Profile環(huán)境切換的資料請關注腳本之家其它相關文章!

相關文章

  • Java數(shù)據(jù)結構中的HashMap和HashSet詳解

    Java數(shù)據(jù)結構中的HashMap和HashSet詳解

    HashMap和HashSet都是存儲在哈希桶之中,通過本文我們可以先了解一些哈希桶是什么,本文結合實例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2023-10-10
  • 在Spring中自動裝配Bean的屬性

    在Spring中自動裝配Bean的屬性

    今天小編就為大家分享一篇關于在Spring中自動裝配Bean的屬性,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Java并發(fā)程序刺客之假共享的原理及復現(xiàn)

    Java并發(fā)程序刺客之假共享的原理及復現(xiàn)

    前段時間在各種社交平臺“雪糕刺客”這個詞比較火,而在并發(fā)程序中也有一個刺客,那就是假共享。本文將通過示例詳細講解假共享的原理及復現(xiàn),需要的可以參考一下
    2022-08-08
  • 詳解Spring Boot中使用AOP統(tǒng)一處理Web請求日志

    詳解Spring Boot中使用AOP統(tǒng)一處理Web請求日志

    本篇文章主要介紹了詳解Spring Boot中使用AOP統(tǒng)一處理Web請求日志,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • IDEA 顯示Run Dashboard窗口的2種方式(推薦)

    IDEA 顯示Run Dashboard窗口的2種方式(推薦)

    這篇文章主要介紹了IDEA 顯示Run Dashboard窗口的2種方式,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • POI通用導出Excel(.xls,.xlsx)的方法

    POI通用導出Excel(.xls,.xlsx)的方法

    這篇文章主要介紹了POI通用導出Excel(.xls,.xlsx)的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • Spring Boot下如何自定義Repository中的DAO方法

    Spring Boot下如何自定義Repository中的DAO方法

    這篇文章主要介紹了Spring Boot下如何自定義Repository中的DAO方法,需要的朋友可以參考下
    2017-06-06
  • Java中filter用法完整代碼示例

    Java中filter用法完整代碼示例

    這篇文章主要介紹了Java中filter用法完整代碼示例,分享了瀏覽器不緩存頁面的過濾器,檢測用戶是否登陸的過濾器等相關實例,小編覺得還是挺不錯的,這里分享給大家,需要的朋友可以參考下
    2018-01-01
  • 帶你入門Java的方法

    帶你入門Java的方法

    這篇文章主要介紹了java基礎之方法詳解,文中有非常詳細的代碼示例,對正在學習java基礎的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-07-07
  • 詳解關于mybatis-plus中Service和Mapper的分析

    詳解關于mybatis-plus中Service和Mapper的分析

    這篇文章主要介紹了詳解關于mybatis-plus中Service和Mapper的分析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09

最新評論