SpringBoot读取多环境配置文件的几种方式

 更新时间:2023年10月30日 08:29:58   作者:Lxlxxx  
这篇文章主要给大家介绍了SpringBoot读取多环境配置文件的几种方式,文章通过代码示例介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下

Properties配置文件注入

如果我们还在使用相对较老的Properties文件的方式,存放我们项目的配置信息,那么我们可以通过*@PropertySource*注解、配置@Value的方式读取我们resource目录下的配置文件;

//applicaiton.properties配置
spring.redis.host: 127.0.0.1
spring.redis.port: 3306
spring.redis.password :123456

@Component
@PropertySources(value = "classpath:application.properties")
public class RedisProperties {
    @Value("${spring.redis.host}")
    private String host;
    @Value("${spring.redis.port}")
    private String port;
    @Value("${spring.redis.password}")
    private int password;
}

如果不想写@Value注解,可以在类头加@ConfigurationProperties(prefix = “spring.redis”)注解;

不同环境文件的读取

Spring boot项目是优先读取 application.yml 或者 application.properties,profile机制会根据不同环境读取不同的配置文件

//需要我们在applicaiton.properties设置环境变量
spring.profiles.actives = dev

Yml的方式注入

如果使用yml的方式配置文件,如何实现动态注入呢?

//application.yml
spring:
  redis:
    host: 127.0.0.1
    port: 6379
    password: password

YamlPropertiesFactoryBean类读取

可以采用Spring beans包下对yml文件配置读取的类,YamlPropertiesFactoryBean,还有一个YamlMapFactoryBean返回map集合类型的配置;

    @GetMapping("getRedisConfig")
    public Properties getRedisConfig(){
        YamlPropertiesFactoryBean yamlProFb = new YamlPropertiesFactoryBean();
        yamlProFb.setResources(new ClassPathResource("redis-file.yml"));
        Properties properties = yamlProFb.getObject();
        System.out.println(properties.get("redis.host"));
        System.out.println(properties.get("redis.port"));
        System.out.println(properties.toString());
        return properties;
    }


PropertySourcesPlaceholderConfigurer

也可以采用PropertySourcesPlaceholderConfigurer自定义配置类,使用该类进入属性注入,这个类主要解决的是YamlPropertiesFactoryBean只限于在一个接口使用,如果在定义一个接口不用YamlPropertiesFactoryBean去加载配置类,是无法读取的; 所以我们用PropertySourcesPlaceholderConfigurer,该类是实现Aware接口,而最根本还是调BeanFactoryPostProcessor,bean工厂的后置处理器;

所以我们这么配置,就可以实现全局的配置文件属性读取;

@Configuration
public class YmlRedisConfig {
    
    @Bean
    public static PropertySourcesPlaceholderConfigurer yamlConfigurer(){
        PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
        YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
        yaml.setResources(new ClassPathResource("redis-file.yml"));
        configurer.setProperties(Objects.requireNonNull(yaml.getObject()));
        return configurer;
    }
}

Environment实现属性动态注入

Spring boot在启动的时候,会构建一个org.springframework.core.env.Environment对象,用于存储配置类; 根据下图,我们可以看到最终都会去实现PropertyResolver接口;

[image:2C39516B-C70F-485E-9F88-A4A7CA7F4292-2581-00001ED1E5808FF4/4CE2B56C-5B64-4756-B38A-18BA819200E1.png]

@Autowired
private Environment env;

@Bean
public DataSource dataSource() throws PropertyVetoException, SQLException {
    DruidDataSource dataSource = new DruidDataSource();
    dataSource.setUrl(env.getProperty("mysql.connection.url"));
    dataSource.setUsername(env.getProperty("mysql.connection.username"));
    dataSource.setPassword(env.getProperty("mysql.connection.password"));
    return dataSource;
}

输入、输出流原生态注入

InputStreamReader字节流读取application.propertie,Properties.load()方法 进行读取;

@Bean
public Properties initRedisConfig() throws IOException {
    Properties properties =new Properties();
    InputStreamReader inputStreamReader =new InputStreamReader(
            this.getClass().getResourceAsStream("application.properties"), StandardCharsets.UTF_8);
    properties.load(inputStreamReader);
    return properties;
}

到此这篇关于SpringBoot读取多环境配置文件的几种方式的文章就介绍到这了,更多相关SpringBoot读取多环境配置文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 23种设计模式(4) java生成器模式

    23种设计模式(4) java生成器模式

    这篇文章主要为大家详细介绍了23种设计模式之java生成器模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • SpringBoot配置文件密码加密与解密的操作代码

    SpringBoot配置文件密码加密与解密的操作代码

    我们在SpringBoot项目当中,会把数据库的用户名密码等配置直接放在yaml或者properties文件中,这样维护数据库的密码等敏感信息显然是有一定风险的,所以我们需要给密码加解密,本文给大家介绍了SpringBoot配置文件密码加密与解密的操作代码,需要的朋友可以参考下
    2024-12-12
  • javaweb判断当前请求是否为移动设备访问的方法

    javaweb判断当前请求是否为移动设备访问的方法

    这篇文章主要为大家详细介绍了javaweb判断当前请求是否为移动设备访问的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • java 读写锁的使用及它的优点

    java 读写锁的使用及它的优点

    这篇文章主要介绍了java 读写锁的使用及它的优点,读写锁的特点就是是读读不互斥、读写互斥、写写互斥,下面具体使用分享需要的小伙伴可以参考一下
    2022-05-05
  • Springboot如何同时装配两个相同类型数据库

    Springboot如何同时装配两个相同类型数据库

    这篇文章主要介绍了Springboot如何同时装配两个相同类型数据库,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • java实现系统托盘示例

    java实现系统托盘示例

    桌面的系统托盘即当程序最小化或者关闭按钮程序并没有退出,而是最小化在任务状态区域,下面是使用java实现系统托盘示例
    2014-03-03
  • java实现二维码生成的几个方法(推荐)

    java实现二维码生成的几个方法(推荐)

    本篇文章主要介绍了java实现二维码生成的几个方法(推荐),具有一定的参考价值,有兴趣的可以了解一下。
    2016-12-12
  • JAVA基础之数组和集合区别对比分析

    JAVA基础之数组和集合区别对比分析

    文章主要介绍了Java中数组和集合的基本概念、使用方法以及它们之间的区别,文章还探讨了不可变集合的创建方式及其线程安全和不可篡改的优势,感兴趣的朋友跟随小编一起看看吧
    2025-11-11
  • Spring 自定义propertyEditor的示例代码

    Spring 自定义propertyEditor的示例代码

    这篇文章主要介绍了Spring 自定义propertyEditor的示例代码,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-12-12
  • Java实现简单的抽牌游戏

    Java实现简单的抽牌游戏

    这篇文章主要为大家详细介绍了Java实现简单的抽牌游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04

最新评论