SpringBoot 通过@Profile注解配置多环境

这篇具有很好参考价值的文章主要介绍了SpringBoot 通过@Profile注解配置多环境。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考资料

  1. Springboot中的@Profile注解


一. 使用场景

在Spring中,可以使用配置文件的方式来指定不同环境下所需要的配置信息

⏹application.yml

spring:
  profiles:
  	# 通过active来指定当前所处的开发环境
    active: dev

⏹application-dev.yml

spring:
  datasource:
    url: jdbc:mysql://localhost/myblog-dev
    username: dev
    password: mysql
    driver-class-name: com.mysql.cj.jdbc.Driver

⏹application-product.yml

spring:
  datasource:
    url: jdbc:mysql://localhost/myblog-product
    username: product
    password: mysql
    driver-class-name: com.mysql.cj.jdbc.Driver

但有时候,我们不通过配置文件,而是通过配置类的方式来指定不同环境下的配置信息,
此时就需要用到@Profile注解


二. 前期准备

⏹用来封装数据库信息的Entity

import lombok.Builder;
import lombok.Data;

@Builder
@Data
public class DBInfoEntity {

    private String url;

    private String port;

    private String userName;

    private String password;
}

⏹配置接口

public interface Config {
	
	// 获取数据库信息
    DBInfoEntity getDBInfo();
	
	// 获取系统URL
    String getSystemUrl();
}

三. @Profile注解作用于类上

  • 我们使用@Profile注解分别作用于如下所示的两个配置类上,分别指定devproduct环境下才能起作用。
  • 我们通过@Configuration注解指定两个配置类的Bean名称都是MyConfig,一般情况下会报错,因为Spring的IOC容器中,Bean的名称是唯一的,但是我们使用了@Profile注解指定了开发环境,不满足指定开发环境的配置类不会被添加到Bean中,所以不会报错。

3.1 配置类

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

@Configuration("MyConfig")
// 指定开发环境为dev
@Profile("dev")
public class MyConfig1 implements Config {

    @Override
    public DBInfoEntity getDBInfo() {
        return DBInfoEntity.builder()
                .url("https://127.0.0.1")
                .port("8080")
                .userName("devUser")
                .password("110120")
                .build();
    }

    @Override
    public String getSystemUrl() {
        return "https://www.dev.com";
    }
}
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

@Configuration("MyConfig")
// 指定开发环境为product
@Profile("product")
public class MyConfig2 implements Config {

    @Override
    public DBInfoEntity getDBInfo() {
        return DBInfoEntity.builder()
                .url("https://127.0.0.2")
                .port("8089")
                .userName("prodUser")
                .password("999000")
                .build();
    }

    @Override
    public String getSystemUrl() {
        return "https://www.prod.com";
    }
}

3.2 效果

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class Test32Controller implements CommandLineRunner {
	
	// 注入接口,会自动从IOC容器中获取该接口的实现类
    @Autowired
    private Config config;
    
    @Override
    public void run(String... args) throws Exception {
        
        DBInfoEntity dbInfo = config.getDBInfo();
        System.out.println(dbInfo);

        String systemUrl = config.getSystemUrl();
        System.out.println(systemUrl);
    }
}

💪💪💪dev环境

SpringBoot 通过@Profile注解配置多环境

💪💪💪product环境

SpringBoot 通过@Profile注解配置多环境


四. @Profile注解作用于方法上

4.1 定义一个生产环境的注解

  • @Profile注解作用于自定义注解上时,自定义注解便可标识开发环境,相当于是@Profile(“开发环境名称”)的简写方式。
import org.springframework.context.annotation.Profile;

import java.lang.annotation.*;

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
@Profile("product")
public @interface ProductionAnnotation {
}

4.2 配置类

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

@Configuration
public class MyConfig3 {
	
	// 开发环境时,才会注入IOC容器
    @Bean
    @Profile("dev")
    public String getNameDev() {
        return "devName";
    }
	
	// 生产环境时,才会注入IOC容器
    @Bean
    @ProductionAnnotation  // 相当于 @Profile("product")
    public String getNameProduct() {
        return "productName";
    }
}

4.3 效果

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;

@Component
public class Test32Controller implements CommandLineRunner {

    @Autowired
    private ApplicationContext applicationContext;

    @Override
    public void run(String... args) throws Exception {

        // 判断当前IOC容器中是否存在名称为 getNameDev 的Bean
        boolean getNameDevExist = applicationContext.containsBean("getNameDev");
        if (getNameDevExist) {
            // 从IOC容器中获取出名称为 getNameDev 的Bean
            Object bean1 = applicationContext.getBean("getNameDev");
            System.out.println("目前所在的是开发环境!");
            System.out.println(bean1);
        }

        boolean getNameProductExist = applicationContext.containsBean("getNameProduct");
        if (getNameProductExist) {
            Object bean2 = applicationContext.getBean("getNameProduct");
            System.out.println("目前所在的是生产环境!");
            System.out.println(bean2);
        }
    }
}

💪💪💪dev环境

SpringBoot 通过@Profile注解配置多环境

💪💪💪product环境

SpringBoot 通过@Profile注解配置多环境文章来源地址https://www.toymoban.com/news/detail-491192.html

到了这里,关于SpringBoot 通过@Profile注解配置多环境的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • linux profile文件环境变量配置

    linux profile文件环境变量配置

    profile 文件位于/etc/目录下 /etc/profile , 当登入系统时候获得一个 shell 进程时,其读取环境profile 文件时候会读取,/etc/bash.bashrc,/etc/profile.d 文件下配置的sh文件,所以我们也可以在profile.d 和bash.bashrc 目录下创建sh文件,配置环境变量 profile,路径:/etc/profile,用于设置系统级

    2024年02月05日
    浏览(13)
  • 【maven】通过profiles实现:怎样激活某个仓库、同时加载多个profile、不同环境加载不同依赖jar

    【maven】通过profiles实现:怎样激活某个仓库、同时加载多个profile、不同环境加载不同依赖jar

    Maven中的profile是一组可选的配置,可以用来设置或者覆盖配置默认值。有了profile,你就可以为不同的环境定制构建。 profile可以在pom.xml中和maven的setting.xml文件中配置,如下: 在上述示例中,我们定义了一个名为\\\"nexus\\\"的profile,并在其中设置了一个名为\\\"my-repo\\\"的Maven仓库。该仓

    2024年02月13日
    浏览(8)
  • Mac环境配置(Java)----使用bash_profile进行配置

    Mac环境配置(Java)----使用bash_profile进行配置

    目录  一、下载Java 1、官方地址: 2、网盘下载地址(Java8): 二、Java环境配置(以Java8配置为例,所有版本配置方法一样) 1、打开软件--终端 2、首先查看本机Java的安装地址(系统默认的) 3、查看到Java8安装的路径如下:  4、如果是第一次配置环境变量,使用命令:【t

    2024年02月16日
    浏览(13)
  • mac 配置环境变量 .bash_profile文件

    打开.bash_profile文件 open -e ~/.bash_profile 编辑:增减自己的各软件配置 export M2_HOME=/Users/lizhen/apache-maven-3.5.4 export PATH=$PATH:$M2_HOME/bin PATH=$PATH:/usr/local/mysql/bin # JAVA JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-18.0.2.jdk/Contents/Home # Android SDK export ANDROID_HOME=/Users/lizhen/Library/Android/sdk export PATH

    2024年02月06日
    浏览(11)
  • Spring Profile与PropertyPlaceholderConfigurer实现项目多环境配置切换

    Spring Profile与PropertyPlaceholderConfigurer实现项目多环境配置切换

    最近考虑项目在不同环境下配置的切换,使用profile注解搭配PropertyPlaceholderConfigurer实现对配置文件的切换,简单写了个demo记录下实现。 @Profile @Profile 通过对bean进行修饰,来限定spring在bean管理时的初始化情况,只有环境中激活的profile状态和修饰的value值对应时,该bean才会被

    2024年02月12日
    浏览(10)
  • MacOS环境配置 .zshrc .bashrc .bash_profile

    MacOS环境配置 .zshrc .bashrc .bash_profile

    每当学习一门新技术的时候,其中一个最大的拦路虎就是环境安装配置,比如java,安卓,比如php都需要安装和配置一大堆工具,安装不顺利的时候无疑会在我们的热情上浇一头冷水。这不,最近打算学习Flutter开发,光是安装配置就捣鼓了好几天,现在记录下来Mac环境变量的

    2023年04月24日
    浏览(13)
  • springboot之一:配置文件(内外部配置优先顺序+properties、xml、yaml基础语法+profile动态切换配置、激活方式)

    springboot之一:配置文件(内外部配置优先顺序+properties、xml、yaml基础语法+profile动态切换配置、激活方式)

    Spring Boot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(application.yaml)进行配置。 注意配置文件的命名必须是application开头。 在同一级目录下优先级为:properties yml yaml file:../config/ :当前项目

    2024年02月10日
    浏览(7)
  • Spring @Profile注解使用和源码解析

    Spring @Profile注解使用和源码解析

    在之前的文章中,写了一篇使用Spring @Profile实现开发环境,测试环境,生产环境的切换,之前的文章是使用SpringBoot项目搭建,实现了不同环境数据源的切换,在我们实际开发中,会分为dev,test,prod等环境,他们之间数独立的,今天进来详解介绍Spring @Profile的原理。 # Spring注

    2023年04月13日
    浏览(10)
  • SpringBoot通过@Cacheable注解实现缓存功能

    SpringBoot通过@Cacheable注解实现缓存功能

    Spring 从 3.1 开始就引入了对 Cache 的支持。定义了 org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 接口来统一不同的缓存技术。并支持使用 JCache(JSR-107) 注解简化我们的开发。 其使用方法和原理都类似于 Spring 对事务管理的支持,Spring Cache 是作用在方法上的,其核

    2024年02月10日
    浏览(8)
  • .Net Core项目在linux部署实战 1.sdk下载 2.环境变量配置/ect/profile 3.运行

    .Net Core项目在linux部署实战 1.sdk下载 2.环境变量配置/ect/profile 3.运行

    1)下载.net core sdk https://download.visualstudio.microsoft.com/download/pr/01292c7c-a1ec-4957-90fc-3f6a2a1e5edc/025e84c4d9bd4aeb003d4f07b42e9159/dotnet-sdk-6.0.418-linux-x64.tar.gz 2)配置下环境变量  step1: // 解压到指定目录  我们可以看出来,$HOME就是root  step2: // 通过vim或者终端配置下环境变量,这样子是永久生

    2024年01月17日
    浏览(18)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包