首页 > spring-boot 如何加载rsources下面的自定义配置文件

spring-boot 如何加载rsources下面的自定义配置文件

默认的spring boot项目目录架构,在resources文件夹下面创建一个parkSpace.properties配置文件,但是,我现在使用代码:
InputStream in = new BufferedInputStream(new FileInputStream(“parkSpace.properties”));
启动项目执行到这里的时候,并不能找到这个文件,请问这种具体的路径该怎么填写才能让FileInputStream找到文件路径呢 谢谢


@PropertySource


这种能获取到配置文件,但是我的初衷是通过在启动的时候只加载一次这个配置文件,而不是每次调用方法的时候都加载一次,然后我找了一下spring boot的一个初始化加载文件成功,但是我还是想在静态代码块或者静态方法里执行加载配置文件,暂时没找到解决办法。

 Map<String,String> maps = new HashMap<>();
       Properties propFlies = new Properties();
       try {
           propFlies.load(getClass().getResourceAsStream("/parkSpace.properties"));
           Set<String> sets = propFlies.stringPropertyNames();
           maps = (Map) propFlies;
       }catch (Exception e){

       }

此处可以在spring boot加载完后执行一些代码

@Component
public class MyStartupRunner implements CommandLineRunner {
    public static Map<String,String> maps = new HashMap<>();
    @Override
    public void run(String... strings) throws Exception {
        Properties propFlies = new Properties();
        try {
            propFlies.load(getClass().getResourceAsStream("/parkSpace.properties"));
            Set<String> sets = propFlies.stringPropertyNames();
            maps = (Map) propFlies;
        }catch (Exception e){

        }
    }
}

有两种方式,一种是通过@PropertySource注解,然后使用@Value逐个注入配置。

@Configuration
@PropertySource("classpath:test.properties")
public class ELConfig {

    @Value("${book.name}")
    private String bookName;

    //注意!配置一个PropertySourcesPlaceholderConfigurer的Bean
    @Bean
    public static PropertySourcesPlaceholderConfigurer propertyConfigure() {
        return new PropertySourcesPlaceholderConfigurer();
    }

    public void outputSource() {
        System.out.println(bookName);
    }
}

另外一种方式是通过@ConfigurationProperties注解,通过getter、setter方法注入及获取配置。

properties配置

author.name=listen
author.age=26
@Component
//可以使用locations指定读取的properties文件路径,如果不指定locations就会读取默认的properties配置文件
@ConfigurationProperties(prefix = "author")
public class AuthorSettings {
    private String name;
    private Long age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Long getAge() {
        return age;
    }

    public void setAge(Long age) {
        this.age = age;
    }
}

org.springframework.util.ResourceUtils.getURL("classpath:parkSpace.properties")
试试上面的代码吧。


classpath:parkSpace.properties 该文件存在于CLASSPATH的根目录,如果你的文件在CLASSPATH中是有目录的,这里也需要加上如classpath:resource/parkSpace.properties
如何辨别文件所在的CLASSPATH

  1. 查看输出classes中文件所在的位置

  2. 打开jar文件查看资源文件所在的位置

如果你通过上述方式无法获取到文件只有2种原因,1你的CLASSPATH不存在这个文件,2你的路径写的有问题。


Resources.getResource("parkSpace.properties")

【热门文章】
【热门文章】