1、使用@Value和@PropertySource获取属性值
(1)定义properties文件
redis.host=127.0.0.1
redis.port=6379
list=list1,list2,list3
maps={key1: 'value1', key2: 'value2'}
redirectUrl={sso_client_id: '${id}',sso_client_secret: '${secret}',redirect_url: '${client.main.url.default}'}
(2)定义类,使用@Value获取值,注意的是如果读取的值为数值类型或者list、map,则占位符为#{${...}},如果读取的值为String,则直接使用${...}
public class JedisConfig {
/**
* 代表连接地址
*/
@Value("${redis.host}")
private String host;
/**
* 代表连接port
*/
@Value("#{${redis.port}}")
private int port;
@Value("#{'${list}'.split(',')}")
private List list;
@Value("#{${maps}}")
private Map maps;
@Value("#{${redirectUrl}}")
private Map redirectUrl;
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public Map getMaps() {
return maps;
}
public void setMaps(Map maps) {
this.maps = maps;
}
public Map getRedirectUrl() {
return redirectUrl;
}
public void setRedirectUrl(Map redirectUrl) {
this.redirectUrl = redirectUrl;
}
(3)通过java显示配置生成JedisConf的bean,使用@PropertySource(“文件路径”)读取properties文件数据
@Configuration
@PropertySource("redis.properties")
public class ExpressConfig {
@Bean
public JedisConfig jedisConfig(){
return new JedisConfig();
}
}
(4)测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = ExpressConfig.class)
public class PropertyConfigTest {
@Autowired
private JedisConfig jedisConfig;
@org.junit.Test
public void testGetJedisValue(){
System.out.println("jedis host:" + jedisConfig.getHost() + " jedis port:" + jedisConfig.getPort() + jedisConfig.getList() + jedisConfig.getMaps() + jedisConfig.getRedirectUrl());
}
}
测试结果为:
jedis host:127.0.0.1 jedis port:6379[list1, list2, list3]{key1=value1, key2=value2}{sso_client_id=${id}, sso_client_secret=${secret}, redirect_url=${client.main.url.default}}
2、通过Environment和@PropertySource获取属性值
(1)定义properties文件
(2)定义类
public class JedisConfig {
/**
* 代表连接地址
*/
private String host;
/**
* 代表连接port
*/
private int port;
public JedisConfig(String host, int port) {
this.host = host;
this.port = port;
}
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
(3)通过java显示配置生成JedisConf的bean,使用@PropertySource(“文件路径”)读取properties文件数据,并通过Environment的getProperty()方法获取值进行赋值
Environment的getProperty()方法有四个重载的形式:
String getProperty(String key)
String getProperty(String key, String defaultValue) 可以指定默认值,如果指定的属性不存在会使用该默认值进行赋值
T getProperty(String key, Class
T getProperty(String key, Class
@Configuration
@PropertySource("redis.properties")
public class ExpressConfig {
@Autowired
Environment environment;
@Bean
public JedisConfig jedisConfig(){
return new JedisConfig(environment.getProperty("redis.host"), environment.getProperty("redis.port", Integer.class));
}
}
(4)测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = ExpressConfig.class)
public class PropertyConfigTest {
@Autowired
private JedisConfig jedisConfig;
@org.junit.Test
public void testGetJedisValue(){
System.out.println("jedis host:" + jedisConfig.getHost() + " jedis port:" + jedisConfig.getPort());
}
}
测试结果:
jedis host:127.0.0.1 jedis port:6379