Spring源码窥探之:@Profile

Spring为我们提供的多环境启动

1. 配置类,注入三个不同环境的数据源,并加上注解

/**
 * description: 以下准备了三套不同环境的数据源
 *
 * @author 70KG
 * @date 2018/12/17
 */
@Configuration
public class MyConfig {

    @Bean
    @Profile("dev")
    public MySqlInfo mySqlInfoDev() {
        MySqlInfo mySqlInfo = new MySqlInfo();
        mySqlInfo.setUserName("zhangsan");
        mySqlInfo.setPassWord("1111");
        mySqlInfo.setDriver("com.mysql.jdbc.driver");
        System.out.println("dev数据源被注入。。。。。。");
        return mySqlInfo;
    }

    @Bean
    @Profile("test")
    public MySqlInfo mySqlInfoTest() {
        MySqlInfo mySqlInfo = new MySqlInfo();
        mySqlInfo.setUserName("lisi");
        mySqlInfo.setPassWord("2222");
        mySqlInfo.setDriver("com.mysql.jdbc.driver");
        System.out.println("test数据源被注入。。。。。。");
        return mySqlInfo;
    }

    @Bean
    @Profile("prod")
    public MySqlInfo mySqlInfoProd() {
        MySqlInfo mySqlInfo = new MySqlInfo();
        mySqlInfo.setUserName("wangwu");
        mySqlInfo.setPassWord("3333");
        mySqlInfo.setDriver("com.mysql.jdbc.driver");
        System.out.println("prod数据源被注入。。。。。。");
        return mySqlInfo;
    }

}

2. 测试类,假设开启生产的数据源

/**
 * description
 *
 * @author 70KG
 * @date 2018/12/17
 */
public class Test01 {

    @Test
    public void test() {

        // 无参构造创建容器
        AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext();
        // 读取配置文件,并属性赋值
        ac.register(MyConfig.class);
        ac.getEnvironment().setActiveProfiles("prod");
        // 刷新容器
        ac.refresh();

    }

}

3. 结果

prod数据源被注入。。。。。。

4. 说明

@Profile不仅可以加在Bean上,还可以加在到类上,表示这个类所属的环境

还有一种方式让环境生效,配置虚拟机参数,-Dspring.profiles.active=prod

原文地址:https://www.cnblogs.com/zhangjianbing/p/10130501.html

时间: 2024-08-30 15:28:42

Spring源码窥探之:@Profile的相关文章

Spring源码窥探之:Spring IOC之@Value

1. 首先定义实体 /** * @author 70KG * @Title: Apple * @Description: 苹果实体 * @date 2018/10/22下午9:26 * @From www.nmyswls.com */ @Data public class Apple { @Value("${apple.color}") private String color; @Value("红富士") private String name; } 2. 属性文

Spring源码窥探之:声明式事务

1. 导入驱动,连接池,jdbc和AOP的依赖 <!-- c3p0数据库连接池 --> <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.1.2</version> </dependency> <!-- spring提供的jdbcTemplate模块 --> <depend

Spring源码窥探之:注解方式的AOP原理

AOP入口代码分析 通过注解的方式来实现AOP1. @EnableAspectJAutoProxy通过@Import注解向容器中注入了AspectJAutoProxyRegistrar这个类,而它在容器中的名字是org.springframework.aop.config.internalAutoProxyCreator.2. AspectJAutoProxyRegistrar实现了ImportBeanDefinitionRegistrar接口,所以可以向容器中注册Bean的定义信息.3. 通过

Spring源码窥探之:ImportSelector

1. 编写实现ImportSelector的类 /** * @author 70KG * @Title: SelectImportBean * @Description: * @date 2018/7/22下午4:59 * @From www.nmyswls.com */ public class SelectImportBean implements ImportSelector { @Override public String[] selectImports(AnnotationMetad

Spring 源码阅读&ndash;beans

最近买了本书,来大概学习写spring源码 一:先来段代码来测试一下. 照书上的先来试试 <?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:schem

spring源码阅读(2)-- 容器启动之加载BeanDefinition

在<spring源码阅读(1)-- 容器启动之资源定位>一文中,阅读了spring是怎么根据用户指定的配置加载资源,当加载完资源,接下来便是把从资源中加载BeanDefinition. BeanDefinition作为spring其中一个组件,spring是这样描述BeanDefinition的:BeanDefinition描述了一个bean实例,它具有属性值,构造函数参数值以及具体实现提供的更多信息.个人的理解是BeanDefinition保存了一个bean实例的所有元数据,下面列举一些常用

初探Spring源码之Spring Bean的生命周期

写在前面的话: 学无止境,写博客纯粹是一种乐趣而已,把自己理解的东西分享出去,不意味全是对的,欢迎指正! Spring 容器初始化过程做了什么? 1 AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(); 实例了一个 AnnotationConfigApplicationContext对象,Spring中出来注解Bean定义的类有两个: Annotation

从零开始手写 spring ioc 框架,深入学习 spring 源码

IoC Ioc 是一款 spring ioc 核心功能简化实现版本,便于学习和理解原理. 创作目的 使用 spring 很长时间,对于 spring 使用非常频繁,实际上对于源码一直没有静下心来学习过. 但是 spring 源码存在一个问题,那就是过于抽象,导致学习起来成本上升. 所以本项目由渐入深,只实现 spring 的核心功能,便于自己和他人学习 spring 的核心原理. spring 的核心 Spring 的核心就是 spring-beans,后面的一切 spring-boot,spr

spring源码分析(一)IoC、DI

创建日期:2016.08.06 修改日期:2016.08.07 - 2016.08.12 交流QQ:992591601 参考书籍:<spring源码深度解析>.<spring技术内幕> 参考文章:http://www.cnblogs.com/xing901022/p/4178963.html http://www.myexception.cn/program/1031276.html http://blog.csdn.net/qian_348840260/article/detai