spring中@Conditional

多环境切换
java配置使用profile

@Profile设置在某个环境下,spring注入对应的bean

public class JavaConfig {@Bean@Profile("dev")DataSource devDs(){DataSource ds = new DataSource();ds.setUrl("dev");ds.setUsername("dev");return ds;}@Bean@Profile("prod")DataSource prodDs(){DataSource ds = new DataSource();ds.setUrl("prod");ds.setUsername("prod");return ds;}
}

启动环境的时候,不要先传递配置文件,,一旦传入了配置文件,,spring默认就会初始化容器,,但是还没有设置系统的环境,,

   public static void main(String[] args) {// 添加配置类会  初始化容器
//        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(JavaConfig.class);AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();// 设置环境ctx.getEnvironment().addActiveProfile("prod");// 设置配置类ctx.register(JavaConfig.class);// 初始化容器ctx.refresh();DataSource bean = ctx.getBean(DataSource.class);System.out.println("bean = " + bean);}
xml使用profile
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><beans profile="dev"><bean class="com.cj.Dog" id="dog"><property name="name" value="小黑"/></bean></beans><beans profile="prod"><bean class="com.cj.Dog" id="dog"><property name="name" value="小白"/></bean></beans></beans>
    @Testpublic void test(){ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext();ctx.getEnvironment().setActiveProfiles("dev");ctx.setConfigLocation("profile-beans.xml");ctx.refresh();Dog dog = ctx.getBean(Dog.class);System.out.println("dog = " + dog);}
@Profile实现

@Profile 本质上是一个条件注解
在这里插入图片描述

自定义一个Profile

package com.cj.profile02;import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.env.Profiles;
import org.springframework.core.type.AnnotatedTypeMetadata;
import org.springframework.util.MultiValueMap;import java.util.Arrays;
import java.util.List;/*** @author cc* @date 2024-06-19 20:08**/public class MyProfileCondition implements Condition {@Overridepublic boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {MultiValueMap<String, Object> allAttrs = metadata.getAllAnnotationAttributes(MyProfile.class.getName());if (allAttrs !=null){// 拿到value传的值,,,,   传的环境值是个数组List<Object> value = allAttrs.get("value");value.forEach(System.out::println);for (Object val : value) {// 判断是否是系统环境boolean b = context.getEnvironment().acceptsProfiles(Profiles.of(((String[]) val)));if (b){return true;}}}return false;}
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Conditional(MyProfileCondition.class)
public @interface MyProfile {String[] value();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/30278.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年了,C++还值得学吗?6个C++的就业方向打消你的疑虑

C语言是一种广泛应用于计算机编程的高级编程语言&#xff0c;自从其首次问世以来&#xff0c;就在软件开发领域取得了广泛的应用和成功。作为一种强大的编程语言&#xff0c;C语言不断发展和改进&#xff0c;也在不断地适应新的技术和需求。在未来几年&#xff0c;C语言将继续保…

计算机视觉全系列实战教程:(十一)边缘检测(差分、Roberts、Sobel、Prewitt、LoG、基于形态学的边缘检测等)

1.边缘检测概述 (1)What 边缘检测&#xff1a;找到有差异的相邻像素锐度&#xff1a;边缘的对比度图像锐化&#xff1a;增加边缘的对比度边缘点&#xff1a;图像中灰度显著变化的点边缘段&#xff1a;边缘点坐标及方向的总和&#xff0c;边缘的方向可以是梯度角轮廓&#xff…

手把手!从头构建LLaMA3大模型(Python)

1. 前期准备 让我们先来想一想大概需要做什么。 首先是模型架构的选择。原工作用的是 GPT Neo 架构&#xff08;可以看他们的 config&#xff09;&#xff0c;这个算是很老的模型了&#xff0c;最初是 EleutherAI 用来复现追踪 GPT-3 的工作的&#xff0c;现在用的也比较少了…

洛谷 P1726:上白泽慧音 ← Tarjan算法

【题目来源】https://www.luogu.com.cn/problem/P1726【题目描述】 在幻想乡&#xff0c;上白泽慧音是以知识渊博闻名的老师。春雪异变导致人间之里的很多道路都被大雪堵塞&#xff0c;使有的学生不能顺利地到达慧音所在的村庄。因此慧音决定换一个能够聚集最多人数的村庄作为新…

鸿蒙开发组件:【创建DataAbility】

创建DataAbility 实现DataAbility中Insert、Query、Update、Delete接口的业务内容。保证能够满足数据库存储业务的基本需求。BatchInsert与ExecuteBatch接口已经在系统中实现遍历逻辑&#xff0c;依赖Insert、Query、Update、Delete接口逻辑&#xff0c;来实现数据的批量处理。…

redis复习

redis知识点 redis持久化redis 订阅发布模式redis主从复制哨兵模式redis雪崩&#xff0c;穿透缓存击穿&#xff08;请求太多&#xff0c;缓存过期&#xff09;缓存雪崩 redis持久化 redis是内存数据库&#xff0c;持久化有两种方式&#xff0c;一种是RDB&#xff08;redis dat…

【计算机网络】[第4章 网络层][自用]

1 概述 (1)因特网使用的TCP/IP协议体系(四层)的网际层,提供的是无连接、不可靠的数据报服务; (2)ATM、帧中继、X.25的OSI体系(七层)中的网络层,提供的是面向连接的、可靠的虚电路服务。 (3)路由选择分两种: 一种是由用户or管理员人工进行配置(只适用于规…

图解Linux内核(基于6.x):解读Linux内存反向映射之匿名映射

文章目录 &#x1f4d1;前言一、匿名映射的mapping二、推荐阅读2.1 一图速览2.2 内容简介 &#x1f4d1;前言 内存映射中&#xff0c;我们经常讨论的是由虚拟内存定位物理内存&#xff08;也就是folio或者page&#xff09;&#xff0c;实际上在很多场景中&#xff08;比如内存回…

linux写代码环境和工具

基础指令 目录 前言 二、yum工具的使用 1.yum是什么&#xff1f; 2.查看软件包 3.配置sudo 4.如何卸载软件 三、vim的使用 1. vim的基本概念 2. vim的基本操作 3. vim正常模式命令集 4.简单vim配置 四、Linux编译器-gcc/g使用 1、格式 2、gcc选项 3.gcc/g工作和…

浅谈Java23种设计模式之11种行为型模式的使用场景(第三部分)

前言 行为型设计模式实际使用场景第三部分; 1.状态模式&#xff08;State&#xff09; 概念: 它允许对象在其内部状态改变时改变它的行为&#xff0c;对象看起来好像修改了它的类。这种模式主要用于当一个对象的行为依赖于它的状态&#xff08;对象的状态改变&#xff0c;行…

专业技能篇--算法

文章目录 前言经典算法思想总结一、贪心算法二、动态规划三、回溯算法四、分治算法 前言 这篇简单理解一些常见的算法。如果面试的时候问到相关的算法&#xff0c;能够应付一二。 经典算法思想总结 一、贪心算法 思想&#xff1a;贪心算法是一种在每一步选择中都采取在当前状…

Python——Gradio

什么是 Gradio&#xff1f; Gradio 是一个开源的 Python 库&#xff0c;用于创建用户友好的、交互式的网页界面。这个界面可以用来展示和测试机器学习模型&#xff0c;或者任何需要用户输入的 Python 应用程序。Gradio 的目标是让开发者快速地将他们的机器学习模型部署为可供他…

Vue CLI,Vue Router,Vuex

前言 Vue CLI、Vue Router 和 Vuex 都是 Vue.js 生态系统中的重要组成部分&#xff0c;它们在构建 Vue 应用程序时扮演着关键角色。 Vue CLI Vue CLI 介绍 Vue CLI 是 Vue.js 的官方命令行工具&#xff0c;用于快速搭建 Vue.js 项目。它提供了一个图形界面&#xff08;通过…

Effective C++ 改善程序与设计的55个具体做法笔记与心得 1

一. 让自己习惯C 1. 视C为一个语言联邦 2. 尽量以const, enum, inline替换#define #define CALL_WITH_MAX(a,b) f((a) > (b) ? (a) : (b))int a 5 , b 0;CALL_WITH_MAX(a,b); // a 6, b 0 CALL_WITH_MAX(a,b10); // a 8, b 0你观察到的这个现象是由于宏替换(C prep…

工程打包与运行

黑马程序员Spring Boot2 文章目录 先点击cean&#xff0c;确保打包之前是个干净的环境点击package进行打包&#xff0c;打包成功之后可以看到target文件夹下的文件 到项目目录下使用终端打开&#xff0c;并使用以下命令运行打包好的程序 如果遇到没有主清单属性的问题&#xff…

搜维尔科技邀您共赴2024第四届轨道车辆工业设计国际研讨会

会议内容 聚焦“创新、设计、突破”&#xff0c;围绕“面向生命健康、可持续发展的轨道交通系统” 为主题&#xff0c;从数字化、智能化、人性化、绿色发展等方面&#xff0c;探索轨道交通行业的设计新趋势及发展新机遇。 举办时间 2024年7月10日-12日 举办地点 星光岛-青岛融…

5.音视频基础 FLV

目录 简说FLV FLV Header FLV Body Tag Header ​编辑Tag Data Audio Data Video Data Script Data 简说FLV FLV格式可以包含音频、视频和文本数据&#xff0c;并且可以在网络上进行流媒体传输。优点是文件大小较小&#xff0c;压缩效率高&#xff0c;并且可以在较低…

ROS 激光雷达

ROS 激光雷达 基本工作原理 激光雷达&#xff08;LIDAR&#xff0c;Light Detection and Ranging&#xff09;是一种用于测量距离的远程感应技术。它通过向目标发射激光并分析反射回来的光来测量目标与激光发射源之间的距离。激光雷达广泛应用于多种领域&#xff0c;包括地理…

feign原理

Feign远程调用&#xff0c;核心就是通过一系列的封装和处理&#xff0c;将以JAVA注解的方式定义的远程调用API接口&#xff0c;最终转换成为HTTP的请求形式&#xff0c;然后将HTTP的请求的响应结果&#xff0c;解码成JAVA Bean&#xff0c;放回给调用者。 流程 FeignClient远程…