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

36次阅读

共计 1738 个字符,预计需要花费 5 分钟才能阅读完成。

推荐两种方法

  • @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")

正文完
 0