首页 > 其他分享 >Spring注解@Profile的功能简介说明

Spring注解@Profile的功能简介说明

时间:2022-10-16 20:00:19浏览次数:77  
标签:Profile Spring springframework dataSource 注解 import password ComboPooledDataSour

转自:

   ​​http://www.java265.com/JavaFramework/Spring/202206/3613.html​

下文笔者讲述@Profile注解功能说明,如下所示

@Profile:
Profile的功能就是配置
让应用程序来说,不同的环境需要不同的配置

如:
开发环境,应用需要连接一个可供调试的数据库单机进程
生产环境,应用需要使用正式发布的数据库,通常是高可用的集群
测试环境,应用只需要使用内存式的模拟数据库
Spring框架提供了多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/dev");
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/prod");
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

标签:Profile,Spring,springframework,dataSource,注解,import,password,ComboPooledDataSour
From: https://blog.51cto.com/u_15736642/5760509

相关文章

  • springBoot 快速开发 即相关内容
    在Boot中我们要是不想使用tomcat服务器想使用jetty的服务器的话修改一下pom.xml就行了  修改服务器端口(在配置文件中我们直接输入port就可以修改但是注!我......
  • Spring的依赖注入两种方式之二:构造器注入
     1.构造器注入引用类型第一步,在类的构造方法中调用引用类型,如下的构造方法:publicBookServiceImpl(BookDaobookDao1)JavaBeanpackagecom.oxygen.service.impl;......
  • Spring的依赖注入
    在Spring框架中,依赖注入描述了在容器中建立bean与bean之间依赖关系的过程.一个bean的属性有两种数据类型:引用类型简单类型(基本数据类型和String)向一个类传递数据的......
  • Spring boot JPA
    引包 配置   生产环境永远配置为:validate   @Entity对应库中的一张表   定义JPA接口DAO层   引入dozer Dozer对象之间的转换服务......
  • Spring Boot:自定义 Whitelabel 错误页面
    一、概述在本文中,我们将研究如何禁用和自定义SpringBoot应用程序的默认错误页面,因为正确的错误处理描述了专业性和质量工作。2.禁用白标错误页面首先,让我们看看如何通......
  • Spring的Bean的生命周期,初始化和销毁bean的方法
    本文以xml配置的方式来记录Spring的初始化和销毁bean的方法.JavaBean:packagecom.oxygen.dao.impl;importcom.oxygen.dao.BookDao;publicclassBookDaoImplimp......
  • 【10】Spring源码-分析篇-AOP源码分析
    Spring源码-AOP分析一、手写AOP回顾  本文我们开始讲解Spring中的AOP原理和源码,我们前面手写了AOP的实现,了解和自己实现AOP应该要具备的内容,我们先回顾下,这对我们理解Spri......
  • SpringMVC执行流程
    SpringMVC的组件DispatcherServlet:前端控制器,接受所有请求,调用其他组件。HandlerMapping:处理器映射器,根据配置找到方法的执行链。HandlerAdapter:处理器适配器,根据方法类型找......
  • SpringBoot自动装配的使用
    1.模板组件企业开发中,往往将常见工具类封装抽取,以简洁便利的方式供其他工程模块使用。而SpringBoot的自动装配机制可以方便的实现组件抽取。SpringBoot执行流程如下扫描依赖......
  • 将 Bean 放入 Spring 容器中的五种方式
    文章目录​​1.@Configuration+@Bean​​​​2.@Componet+@ComponentScan​​​​3.@Import注解导入​​​​3.1@Import直接导入类​​​​3.2@Import+ImportSelect......