我已经通过指定WarLauncher(Spring引导加载程序的一部分)作为我的启动类来创建可执行war文件。当所有配置文件(属性,弹簧上下文等)都是我的资源文件夹的一部分时,它工作正常。我希望我的战争的消费者需要控制属性文件。因此,它需要在war文件之外加载。我期待配置文件夹中的属性文件(与war文件并排部署)。我试图通过使用maven插件向清单添加适当的类路径条目,但它没有用。
以下是我的maven POM文件的相关部分的样子:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>org.springframework.boot.loader.WarLauncher</mainClass>
</manifest>
<manifestEntries>
<Start-Class><<myclass_dont_worry_about_this>></Start-Class>
<Class-Path>config/</Class-Path>
</manifestEntries>
</archive>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
我使用Spring ClassPathResource()来加载属性文件。以下显示了相同的代码段:
InputStream stream = new ClassPathResource(classPathConfigFilePath).getInputStream();
Proerties properties = new Properties();
properties.load(stream);
在运行时,它无法找到导致FileNotFoundException的属性文件。
感谢。
答案 0 :(得分:5)
Spring-Boot会在以下位置搜索application.properties
文件
/config
package /config
当前目录的子目录所有这些文件(如果可用)按此顺序加载,这意味着1中的属性可以被2,3,4覆盖。所有已加载的属性都可作为Environment
的一部分使用,因此可用于占位符以进行配置。
作为上述加载规则的补充,还可以加载profile个特定文件。对于给定的配置文件,它还会尝试加载application-{profile}.properties
。对于该特定文件,还考虑了上述加载规则。
所有加载的属性都可以通过Environment
获得,这意味着可以通过弹簧unified property management获得。可以直接使用Environment
检索配置参数,也可以使用带有@Value
注释的占位符进行配置
@Configuration
public class SomeConfigClass {
@Autowired
private Environment env;
public DataSource dataSource() {
SimpleDriverDataSource ds = new SimpleDriverDataSource();
ds.setUsername(env.getProperty("jdbc.username"));
ds.setPassword(env.getProperty("jdbc.password"));
ds.setDriverClass(Driver.class);
ds.setUrl(env.getProperty("jdbc.url"));
return ds;
}
}
或@Value
@Configuration
public class SomeConfigClass {
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Value("${jdbc.url}")
private String url
public DataSource dataSource() {
SimpleDriverDataSource ds = new SimpleDriverDataSource();
ds.setUsername(username);
ds.setPassword(password);
ds.setDriverClass(Driver.class);
ds.setUrl(url);
return ds;
}
}
链接