通过指定WarLauncher ( spring引导加载程序的一部分)作为启动类,我创建了一个可执行的war文件。当所有配置文件(属性、spring上下文等)都是我的资源文件夹的一部分时,它可以正常工作。我希望我的战争的消费者需要控制财产文件。因此,需要将其加载到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的属性文件。
谢谢。
发布于 2013-12-06 08:14:29
缺省情况下,Spring在以下位置搜索application.properties文件
/config包/config子目录当可用时,所有这些文件都按这个顺序加载,这意味着属性从1可以被覆盖2,3,4。所有加载的属性都作为Environment的一部分可用,因此可以在占位符中用于配置。
作为上述加载规则的一个补充,还可以加载配置文件特定的文件。对于给定的配置文件,它还将尝试加载application-{profile}.properties。对于该特定文件,还考虑到上面提到的加载规则。
所有加载的属性都可以通过Environment获得,这意味着可以通过springs 统一物业管理获得这些属性。可以直接使用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;
}
}链接
https://stackoverflow.com/questions/20418201
复制相似问题