首页 > 其他分享 >spring 静态变量方式加载properties 文件(支持profile)

spring 静态变量方式加载properties 文件(支持profile)

时间:2023-07-13 18:13:09浏览次数:38  
标签:profile String spring profiles springframework import org properties

 

foo-test.properties (测试环境)

foo-pro.properties (生产环境)

需要根据spring.profiles.active 切换

 

import java.io.IOException;
import java.util.Properties;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Component;

@Component
public class FooProperties {


    
    public static String oneProp;
    
    
    @Autowired
    public void setOneProp(@Value("#{foo['one.prop']}") String oneProp) {
        FooProperties.oneProp = oneProp;
    }
    
   
    
    @Bean(name = "foo")
    public Properties getProperties(ApplicationContext ac) {
        Properties properties = new Properties();
        try {
            String path = "foo%s.properties";
            String[] profiles = ac.getEnvironment().getActiveProfiles();
            if (profiles != null && profiles.length > 0 && !"default".equals(profiles[0])) {
                path = String.format(path, "-" + profiles[0]);
            } else {
                path = String.format(path, "");
            }
            properties.load(new ClassPathResource(path).getInputStream());
        } catch (IOException e) {
            throw new RuntimeException("failed for loading file", e);
        }
        return properties;
    }
}

 

这个类有个有意思的地方,@Bean 之后,入参ApplicationContext 可以自动注入,不需要加其他配置;

这里不推荐激活多个profiles ,默认取激活的第一个profile 

比如:

spring: 
  profiles:
    active:
    - test

则会加载 foo-test.properties 中的属性

 

单元测试中激活profiles

@ContextConfiguration(locations = { "classpath:xxx.xml" })
@RunWith(SpringJUnit4ClassRunner.class)
@org.springframework.test.context.ActiveProfiles(value="test")
public class FooTest {
...
}

 

标签:profile,String,spring,profiles,springframework,import,org,properties
From: https://www.cnblogs.com/zno2/p/14107854.html

相关文章

  • Spring及IOC
    Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架) IoC容器控制反转IoC(InversionofControl),是一种设计思想,DI(依赖注入)是实现IoC的一种方法没有IoC的程序中,我们使用面向对象编程,对象的创建与对象间的依赖关系完全硬编码在程序中,对象的创建由程序自己控......
  • SpringMVC入门案例
                ......
  • spring纯注解开发模式
    1、IOC的注解:1.1@Component【重点】:相当于<bean>标签:把对象交给spring管理,spring会帮助我们创建对象。@controller,@Service,@Repository与@Component的作用完全一致,但更加详细化。@Controller:用于web层的bean;@Service:用于service层的bean;@Repository:用于dao层的bean;1.2其他......
  • spring cloud Eureka 注册中心
    SpringCloud是一组框架和工具集,用于快速构建分布式系统,为微服务架构提供了全套技术支持。其中,注册中心是SpringCloud微服务架构中的一个重要组件,它提供了服务注册和发现的功能,是构建分布式系统的基础。本文将介绍SpringCloud中的Eureka注册中心,并给出相应的示例说明。Eureka注......
  • Springboot实现注解判断权限
    Springboot实现注解判断权限今天记录一下使用springboot的注解来给方法加权限避免了每个方法都需要大量的权限判断超级好用√@目录Springboot实现注解判断权限1.创建权限注解2.定义一个权限的枚举类3.创建拦截器AOP校验权限poincut表达式介绍4.使用注解1.创建权限注解首先......
  • springboot整合kafka
    一、引入依赖(kafka的版本和springboot的版本对不上的话,启动会报错,包类不存在)<dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId><version>2.5.1.RELEASE</version></de......
  • springboot - 整合flyway
    一、概念官网:https://flywaydb.org/数据库版本控制管理工具,通过集成Flyway可以实现启动项目时自动执行项目迭代升级。Flyway已经支持数据库包括:Oracle,SQLServer,SQLAzure,DB2,DB2z/OS,MySQL(includingAmazonRDS),MariaDB,GoogleCloudSQL,PostgreSQL(includ......
  • SpringMVC简介
          ......
  • hibernate的使用总结 结合spring
    一、整体的hibernate流程。首先我们通过web.xml中可以找到spring的配置文件(往往我们可以把spring配置文件分为多个:Dao相关的,logic相关的各种logic的bean,表现层相关的各种action的bean),其中在dao相关的配置中,我们可以通过配置dataSource/某种连接池,sessionF......
  • SVN 签出源码 Struts Spring Hibernate
    SVN签出源码StrutsSpringHibernate很多优秀的开源项目已经提供SVN源码签出了,无论是解疑还是学习,都是一大幸福之事啊!Apache的SVN库,强烈推荐!http://svn.apache.org/repos/asf/里面不但有Struts的源码,还有著名的Apachejakartaproject相当好的WebUI框......