推荐两种方法
- @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")