日常使用:SpringBoot访问配置文件的两种方式

·  阅读 1084

推荐两种方法

- @Value注解 org.springframework.beans.factory.annotation.Value

- @ConfigurationProperties注解 org.springframework.boot.context.properties.ConfigurationProperties

@Value注解

  • 需要声明为Component,在需要的的地方可以直接注入并使用getter方法获取

下面以redis配置为例

@Data
@Component
public class RedisConfig {
    @Value("${redis.host}")
    private String host;
    @Value("${redis.port}")
    private int port;
    @Value("${redis.timeout}")
    private int timeout;//秒
    @Value("${redis.password}")
    private String password;
    @Value("${redis.pool-max-active}")
    private int poolMaxActive;
    @Value("${redis.pool-max-idle}")
    private int poolMaxIdle;
    @Value("${redis.pool-max-wait}")
    private int poolMaxWait;//秒
}复制代码

  • 在yml配置文件中写入
redis:
  host: 127.0.0.1
  port: 6379
  timeout: 100
  password: ××××
  pool-max-active: 2000
  pool-max-idle: 10
  pool-max-wait: 10000复制代码

  • 在需要的地方自动注入并获取值,例如redispool连接池
public class RedisPoolFactory {

    @Autowired
    RedisConfig redisConfig;

    @Bean
    public JedisPool JedisPoolFactory() {
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxIdle(redisConfig.getPoolMaxIdle());
        poolConfig.setMaxTotal(redisConfig.getPoolMaxActive());
        poolConfig.setMaxWaitMillis(redisConfig.getPoolMaxWait() * 1000);
        JedisPool jp = new JedisPool(poolConfig, redisConfig.getHost(), redisConfig.getPort(),
                redisConfig.getTimeout(), redisConfig.getPassword(), 0);
        return jp;
    }
}复制代码

@ConfigurationProperties注解

也需要注上Component被扫描到 通过prefix前缀的方式获取配置文件properties或者yml的值

  • yml如下:
info:
   name: dx
   tel: 1271286123
   add: China
   # list结构
   recipients[0]: admin@mail.com
   recipients[1]: owner@mail.com
   # Map结构
   hobby:
       sports: basketball
       music: gentle
       复制代码

  • 配置文件获取类如下
@Data
@Component
@ConfigurationProperties(prefix = "info")
public class RedisConfig {
    private String name;
    private String tel;
    private String add;
    Map<String,String> hobby;
    List<String> recipients;
}复制代码

@PropertySource

  • 当然,两种方法都可以指定配置文件的路径,通过@PropertySource注解,注到获取配置信息类上
@PropertySource("classpath:application.properties")复制代码

分类:
后端
标签: