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

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

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

前言

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

環(huán)境搭建

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

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內(nèi)容如下,里面主要放的是公共的配置,比如項(xiàng)目的名稱啊,端口啊這些,使用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

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

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

DataSourceConfiguration是一個(gè)數(shù)據(jù)源配置類,我們使用alibaba的Druid數(shù)據(jù)源,使用@Value注解來(lái)獲取yaml文件的數(shù)據(jù)庫(kù)配置, 定義了三個(gè)Bean,并使用@Profile來(lái)進(jìn)行開(kāi)發(fā)環(huán)境,測(cè)試環(huán)境,生產(chǎn)環(huán)境的區(qū)分,這里它會(huì)識(shí)別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測(cè)試Controller

創(chuàng)建一個(gè)Controller來(lái)測(cè)試獲取數(shù)據(jù),這里使用JdbcTemplate來(lái)獲取數(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進(jìn)行測(cè)試

spring.profiles.active = dev

spring:
  profiles:
    active: dev

spring.profiles.active = test

spring:
  profiles:
    active: test

spring.profiles.active = prod

spring:
  profiles:
    active: dev

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

使用Maven配置

我們?cè)趍aven中對(duì)dev,test,prod進(jìn)行定義,如下,使用<profiles>標(biāo)簽進(jìn)行包裹,使用<activeByDefault>標(biāo)簽將dev作為默認(rèn)的環(huán)境, 在<properties>中定義環(huán)境標(biāo)識(shí)(dev,test,prod),<mvn.profile>是自定義的,可以任意定義,它和application.yml 那邊進(jìn)行對(duì)應(yīng)。

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@這種方式來(lái)讀取pom.xml中的配置。

spring:
  profiles:
    active: @mvn.profile@

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

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

后記

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

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

相關(guān)文章

  • Java實(shí)現(xiàn)雙鏈表互相交換任意兩個(gè)節(jié)點(diǎn)的方法示例

    Java實(shí)現(xiàn)雙鏈表互相交換任意兩個(gè)節(jié)點(diǎn)的方法示例

    這篇文章主要介紹了Java實(shí)現(xiàn)雙鏈表互相交換任意兩個(gè)節(jié)點(diǎn)的方法,簡(jiǎn)單講述了雙鏈表的概念,并結(jié)合實(shí)例形式給出了java雙鏈表實(shí)現(xiàn)任意兩個(gè)節(jié)點(diǎn)交換的操作技巧,需要的朋友可以參考下
    2017-11-11
  • Spring Cloud Zipkin服務(wù)端追蹤服務(wù)

    Spring Cloud Zipkin服務(wù)端追蹤服務(wù)

    這篇文章主要介紹了Spring Cloud Zipkin服務(wù)端追蹤服務(wù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Java實(shí)用小技能之快速創(chuàng)建List常用幾種方式

    Java實(shí)用小技能之快速創(chuàng)建List常用幾種方式

    java集合可以說(shuō)無(wú)論是面試、刷題還是工作中都是非常常用的,下面這篇文章主要給大家介紹了關(guān)于Java實(shí)用小技能之快速創(chuàng)建List常用的幾種方式,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • Spring Security實(shí)現(xiàn)退出登錄和退出處理器

    Spring Security實(shí)現(xiàn)退出登錄和退出處理器

    本文主要介紹了Spring Security實(shí)現(xiàn)退出登錄和退出處理器,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • Spring中Bean的創(chuàng)建流程詳細(xì)解讀

    Spring中Bean的創(chuàng)建流程詳細(xì)解讀

    這篇文章主要介紹了Spring中Bean的創(chuàng)建流程詳細(xì)解讀,Spring 中創(chuàng)建 Bean ,是通過(guò)調(diào)用 GetBean 方法來(lái)觸發(fā)的,所以,我們會(huì)從這個(gè)方法開(kāi)始,需要的朋友可以參考下
    2023-10-10
  • Spring cloud Eureka注冊(cè)中心搭建的方法

    Spring cloud Eureka注冊(cè)中心搭建的方法

    這篇文章主要介紹了Spring cloud Eureka注冊(cè)中心搭建的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • SpringAOP+RabbitMQ+WebSocket實(shí)戰(zhàn)詳解

    SpringAOP+RabbitMQ+WebSocket實(shí)戰(zhàn)詳解

    這篇文章主要介紹了SpringAOP+RabbitMQ+WebSocket實(shí)戰(zhàn)詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • 基于Mybatis實(shí)現(xiàn)CRUD操作過(guò)程解析(xml方式)

    基于Mybatis實(shí)現(xiàn)CRUD操作過(guò)程解析(xml方式)

    這篇文章主要介紹了基于Mybatis實(shí)現(xiàn)CRUD操作過(guò)程解析(xml方式),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Java List簡(jiǎn)介_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java List簡(jiǎn)介_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java中可變數(shù)組的原理就是不斷的創(chuàng)建新的數(shù)組,將原數(shù)組加到新的數(shù)組中,下文對(duì)Java List用法做了詳解。需要的朋友參考下吧
    2017-05-05
  • 詳解JVM的內(nèi)存對(duì)象介紹[創(chuàng)建和訪問(wèn)]

    詳解JVM的內(nèi)存對(duì)象介紹[創(chuàng)建和訪問(wèn)]

    這篇文章主要介紹了JVM的內(nèi)存對(duì)象介紹[創(chuàng)建和訪問(wèn)],文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03

最新評(píng)論

香港| 清河县| 饶平县| 徐州市| 屏南县| 徐州市| 泉州市| 钟山县| 博野县| 宁都县| 巴楚县| 中山市| 策勒县| 华坪县| 搜索| 抚远县| 紫金县| 铁岭县| 鲁山县| 毕节市| 仁寿县| 贵阳市| 高雄市| 泸水县| 蓬安县| 彭泽县| 绍兴市| 涿鹿县| 祥云县| 上思县| 大田县| 抚宁县| 老河口市| 蕉岭县| 镇远县| 新蔡县| 滦平县| 上林县| 鄂伦春自治旗| 东海县| 雷州市|