 
									一介闲人
 
							一介闲人
 
				假设配置文件为application.yml
  project:
    path: /project/p1/
    passwd: 123456
通过@Value注解在Bean中读取这两个参数
import org.springframework.beans.factory.annotation.Value;
public class Params {
    @Value("${project.path}")
    private String path;
    @Value("${project.passwd}")
    private String passwd;
}
在配置参数数量较少的情况下,可以使用这个方法进行配置参数读入,但是如果参数比较多,一个一个读取则比较麻烦,所以可以使用以下方式进行绑定读取.
假设配置文件为application.yml
  project:
    path: /project/p1/
    passwd: 123456
@Data
@ConfigurationProperties(prefix = "project")
public class Constants {
	private String path;
    private String passwd;
}
这种方法适合批量绑定读取参数,比@Value便捷高效。
如果需要在代码执行过程中进行参数绑定读取,则可以使用该注解进行 假设配置文件为application.yml
  project:
    path: /project/p1/
    passwd: 123456
import org.springframework.core.env.Environment;
public class EnvironmentTests {
    @Resource
    private Environment env;
    public void test(){
        String v1 = env.getProperty("project.path");
        System.out.println(v1);
    }
}
或者
import org.springframework.core.env.Environment;
import org.springframework.context.EnvironmentAware;
public class EnvironmentTests implements EnvironmentAware  {
    private Environment env;
    public void test(){
        String v1 = env.getProperty("project.path");
        System.out.println(v1);
    }
    @Override
    public void setEnvironment(Environment environment) {
        this.env = environment;
    }
}
后面这种事不使用自动装配的方式进行绑定,降低耦合性,或者适用于在自动装配之前的操作。
以上三种读取方式都是读取Spring默认的配置文件[application.yml]中的参数。如果需要读取自定义的外部配置文件则需要用下面这个方式
读取properties格式文件。假设配置文件为test.properties
project.path=/project/p1/
project.passwd=123456
@Data
@Configuration
@PropertySources({@PropertySource(value = "classpath: test.properties", encoding = "utf-8")})
public class PropertySourcesConf {
    @Value("${project.path}")
    private String path;
    @Value("${project.passwd}")
    private String passwd;
}
@PropertySources只能读取properties格式的外部配置文件,如果想要读取yml格式的外部配置文件则需要通过下面这个注解
假设配置文件为test.yml
  project:
    path: /project/p1/
    passwd: 123456
import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.io.ClassPathResource;
import java.util.Objects;
@Configuration
public class MyYamlConf {
    @Bean
    public static PropertySourcesPlaceholderConfigurer yamlConfigurer() {
        PropertySourcesPlaceholderConfigurer pspc = new PropertySourcesPlaceholderConfigurer();
        YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
        yaml.setResources(new ClassPathResource("test.yml"));
        pspc.setProperties(Objects.requireNonNull(yaml.getObject()));
        return pspc;
    }
}
进行以上配置后,再使用@Value注解进行参数绑定读取即可。
假设配置文件为test.properties
project.path=/project/p1/
project.passwd=123456
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.Properties;
public class MyParamsConf {
    public void paramsRead(){
        Properties prop = new Properties();
        try {
            InputStreamReader isr = new InputStreamReader(this.getClass().getClassLoader().getResourceAsStream("test.properties"), StandardCharsets.UTF_8);
            prop.load(isr);
        }catch (Exception e){
            e.printStackTrace();
        }
        System.out.println(prop.getProperty("project.path"));
        System.out.println(prop.getProperty("project.passwd"));
    }
}
 
									
评论