SpringBoot读取多环境配置文件的几种方式
作者:Lxlxxx
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读取多环境配置文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
- SpringBoot使用Jasypt对配置文件和数据库密码加密
- springboot中非容器类如何获取配置文件数据
- 详解SpringBoot依赖注入和使用配置文件
- SpringBoot如何从配置文件中读取配置参数
- SpringBoot中的配置文件加载优先级详解
- Springboot如何实现对配置文件中的明文密码加密
- SpringBoot中的YAML配置文件和日志详解
- SpringBoot实现配置文件加密的方案分享
- SpringBoot绑定配置文件中变量的四种方式总结
- SpringBoot中获取配置文件的注解详解
- Spring Boot 配置文件(application.yml、application-dev.yml、application-test.yml)