默认的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
查看输出
classes
中文件所在的位置打开
jar
文件查看资源文件所在的位置
如果你通过上述方式无法获取到文件只有2种原因,1你的CLASSPATH
不存在这个文件,2你的路径写的有问题。
Resources.getResource("parkSpace.properties")