Spring注解--@Profile

戚薇 Spring 发布时间:2023-05-13 10:34:11 阅读数:2596 1
下文笔者讲述Spring中@Profile注解的功能简介说明,如下所示

@Profile注解的功能

Profile:
  用于为应用程序指定不同的配置 
如:可通过修改Profile的值
   设置当前环境是
      开发环境,还是生产环境,测试环境等
======================================================
开发环境:
  应用需要连接一个可供调试的数据库单机进程
生产环境:
  应用需要使用正式发布的数据库,通常是高可用的集群
测试环境:
  应用只需要使用内存式的模拟数据库

配置类

package com.java265.config;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.EmbeddedValueResolverAware;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.context.annotation.PropertySource;
import org.springframework.util.StringValueResolver;

import javax.sql.DataSource;

/**
 * Profile:
 *      Spring为我们提供的可以根据当前环境,动态的激活和切换一系列组件的功能
 *
 *  开发环境、测试环境、生产环境
 *  数据源:(/A)、(/B)、(/C)
 *
 *
 * @Profile:指定组件在哪个环境下才能被注册到容器中,不指定,任何环境都会注册
 *
 *  可以写在类上,只有是指定的环境,该类的所有配置才能开始生效
 */
@Configuration
@PropertySource("classpath:db.properties")
public class MainConfigOfProfile implements EmbeddedValueResolverAware {

    @Value("${db.user}")
    private String user;

    private StringValueResolver valueResolver;

    private String driverClass;


    @Profile("test")
    @Bean("testDataSource")
    public DataSource dataSource(@Value("${db.password}") String password) throws Exception {
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setUser(user);
        dataSource.setPassword(password);
        dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");
        dataSource.setDriverClass(driverClass);
        return dataSource;
    }

    @Profile("dev")
    @Bean("devDataSource")
    public DataSource dataSourceDev(@Value("${db.password}") String password) throws Exception {
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setUser("root");
        dataSource.setPassword(password);
        dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/girls");
        dataSource.setDriverClass(driverClass);
        return dataSource;
    }

    @Profile("prod")
    @Bean("prodDataSource")
    public DataSource dataSourceProd(@Value("${db.password}") String password) throws Exception {
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setUser("root");
        dataSource.setPassword(password);
        dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/music");
        dataSource.setDriverClass(driverClass);
        return dataSource;
    }

    @Override
    public void setEmbeddedValueResolver(StringValueResolver stringValueResolver) {
        this.valueResolver = stringValueResolver;
        this.driverClass = valueResolver.resolveStringValue("${db.driverClass}");
    }
}

测试

@Test
public void test02(){
	//创建一个ApplicationContext
	AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext();
	//设置需要激活的环境(可以多个)
	ac.getEnvironment().setActiveProfiles("test", "dev");
	//注册主配置类
	ac.register(MainConfigOfProfile.class);
	//启动刷新容器
	ac.refresh();

	String[] names = ac.getBeanNamesForType(DataSource.class);
	for(String name : names){
		System.out.println(name);
	}

	ac.close();
}

----运行以上代码,将输出以下信息---------
testDataSource
devDataSource
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/Spring/202305/6432.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者