首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用spring引导加载器WarLauncher时加载war文件之外的属性文件?

如何在使用spring引导加载器WarLauncher时加载war文件之外的属性文件?
EN

Stack Overflow用户
提问于 2013-12-06 07:14:24
回答 1查看 7.5K关注 0票数 3

通过指定WarLauncher ( spring引导加载程序的一部分)作为启动类,我创建了一个可执行的war文件。当所有配置文件(属性、spring上下文等)都是我的资源文件夹的一部分时,它可以正常工作。我希望我的战争的消费者需要控制财产文件。因此,需要将其加载到war文件之外。我期待配置文件夹中的属性文件(与war文件并排部署)。我尝试通过使用maven插件将适当的类路径条目添加到清单中,但是它没有工作。

下面是maven POM文件的相关部分:

代码语言:javascript
复制
<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()加载属性文件。下面显示相同的代码片段:

代码语言:javascript
复制
 InputStream stream = new ClassPathResource(classPathConfigFilePath).getInputStream();
 Proerties properties = new Properties();
 properties.load(stream);

在运行时,它无法找到导致FileNotFoundException的属性文件。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-12-06 08:14:29

缺省情况下,Spring在以下位置搜索application.properties文件

  1. 类生根
  2. 当前目录
  3. 类路径/config
  4. 当前目录的/config子目录

当可用时,所有这些文件都按这个顺序加载,这意味着属性从1可以被覆盖2,3,4。所有加载的属性都作为Environment的一部分可用,因此可以在占位符中用于配置。

作为上述加载规则的一个补充,还可以加载配置文件特定的文件。对于给定的配置文件,它还将尝试加载application-{profile}.properties。对于该特定文件,还考虑到上面提到的加载规则。

所有加载的属性都可以通过Environment获得,这意味着可以通过springs 统一物业管理获得这些属性。可以直接使用Environment检索配置参数,也可以在配置的@Value注释中使用占位符。

代码语言:javascript
复制
@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

代码语言:javascript
复制
 @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;
    }
}

链接

  1. 弹簧引导读-我
  2. Spring框架配置文件文档
  3. Spring属性管理的博客
  4. 弹簧引导装载机读-我
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20418201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档