使用对象读取yml文件中的属性值
一、在配置类中使用属性配置对象
一般用于配置一些第三方组件的初始化,例如redis,mq等,一般这些服务都有自带的属性类,可以直接使用,例如redis的org.springframework.boot.autoconfigure.data.redis.RedisProperties。当导入的依赖中没有自带的属性类或者自带的不满足我们的需要时,就可以自定义属性类。
package com.wang.mygateway.serviceportal.configuration.propertiesBean;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "test.redis")
public class TestRedisPropertiesBean {
public TestRedisPropertiesBean(){
System.out.println("========TestRedisPropertiesBean:初始化=========");
System.out.println(this.toString());
}
private String ip;
private int port;
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
@Override
public String toString() {
return "TestRedisPropertiesBean{" +
"ip='" + ip + '\'' +
", port=" + port +
'}';
}
}
配置类
package com.wang.mygateway.serviceportal.configuration;
import com.wang.mygateway.serviceportal.configuration.propertiesBean.TestRedisPropertiesBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.condition.ConditionalOnResource;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
@ConditionalOnResource(resources = {"classpath:application.yml"})
@EnableConfigurationProperties(TestRedisPropertiesBean.class)
public class PropertiesAutoConfiguration {
@Bean
@ConditionalOnProperty(prefix = "test.redis",value = {"ip","port"})
public TestRedisPropertiesBean testRedisPropertiesBean(){return new TestRedisPropertiesBean();}
@Bean
@ConditionalOnBean(name = "testRedisPropertiesBean")
public RedisTemplate testRedisPropertiesBean(TestRedisPropertiesBean testRedisPropertiesBean){
System.out.println(testRedisPropertiesBean.toString());
RedisStandaloneConfiguration rsc = new RedisStandaloneConfiguration();
rsc.setPort(testRedisPropertiesBean.getPort());
rsc.setHostName(testRedisPropertiesBean.getIp());
RedisTemplate<String, String> template = new RedisTemplate<>();
//单机模式
JedisConnectionFactory fac = new JedisConnectionFactory(rsc);
fac.afterPropertiesSet();
template.setDefaultSerializer(new StringRedisSerializer());
template.setConnectionFactory(fac);
template.afterPropertiesSet();
//测试
template.opsForValue().set("test","testValue2");
return template;
}
}
二、在其他类中使用属性配置对象
配置类上添加@Component注解,其余不变
@Component
@ConfigurationProperties(prefix = "test.redis")
public class TestRedisPropertiesBean {...}
在其他对象中使用@AutoWrite注解注入属性配置对象
public class TestDemo{
@AutoWrite
private TestRedisPropertiesBean testRedisPropertiesBean;
public void test(){
this.testRedisPropertiesBean.getIp();
}
}