`

(转)SpringBoot 打包为war包启动时导入外部配置文件

阅读更多

转自:http://blog.csdn.net/nijiayy/article/details/78457800

 

最近在做一个SpirngBoot的项目,要求服务器部署的时候使用tomcat启动war包的时候需要导入一个指定位置的application.properties文件。在网上查找了相关的问题之后,发现大部分都是基于jar包的,同样的方法war包下并不适用。 
后来发现了一个方法,可以为完美解决这个问题。 
这里写图片描述 
在你的项目文件夹下,创建一个configuration文件夹用于存储各种SpringBoot的配置文件,然后新建一个Java类LocalSettingsEnvironmentPostProcessor。

package com.altynai.xxxxxx.configuration;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MutablePropertySources;
import org.springframework.core.env.PropertiesPropertySource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.support.PropertiesLoaderUtils;

import java.io.File;
import java.io.IOException;
import java.util.Properties;

public class LocalSettingsEnvironmentPostProcessor implements EnvironmentPostProcessor{
    private static final String LOCATION = "C:\\xxxx\\application.properties";

    @Override
    public void postProcessEnvironment(ConfigurableEnvironment configurableEnvironment, SpringApplication springApplication) {
        File file = new File(LOCATION);
//        File file = new File(System.getProperty("user.home"), LOCATION);
//        System.out.println("user.home" + System.getProperty("user.home"));
        if (file.exists()) {
            MutablePropertySources propertySources = configurableEnvironment.getPropertySources();
//            System.out.println("Loading local settings from " + file.getAbsolutePath());
            Properties properties = loadProperties(file);
//            System.out.println(properties.toString());
            propertySources.addFirst(new PropertiesPropertySource("Config", properties));
        }
    }

    private Properties loadProperties(File f) {
        FileSystemResource resource = new FileSystemResource(f);
        try {
            return PropertiesLoaderUtils.loadProperties(resource);
        }
        catch (IOException ex) {
            throw new IllegalStateException("Failed to load local settings from " + f.getAbsolutePath(), ex);
        }
    }
}

这个java类的作用就是根据指定的配置文件路径,读取文件,添加到程序运行的环境中。注意,根据我的测试,这里导入的外部配置文件只能是.properties的文件,如果是.yml的话会有问题。 
然后在你的resources文件夹下创建一个文件夹名为META-INF,在里面创建一个spring.factories的文件,文件内容如下:

org.springframework.boot.env.EnvironmentPostProcessor=com.altynai.xxxxx.configuration.LocalSettingsEnvironmentPostProcessor

这个文件的作用就是设置SpringBoot服务启动的时候调用我们刚才写的那个Java类。

至此,你的war包在使用tomcat启动的时候就应该可以读取制定位置的外部文件了。我的文件结构如下,仅供参考 
这里写图片描述 
这里还需要说明的是假设你原本的配置文件的设置属性与导入了外部配置文件的设置属性重复了最终系统运行起来使用的是哪一个? 
答案是,看两个配置文件加入程序环境的先后顺序,后面的会覆盖前面的。 
上面的Java类中有这个一段代码,这里的意思就是,外部的文件是最先导入的。

 propertySources.addFirst(new PropertiesPropertySource("Config", properties));

如果设置为下面的这个

 propertySources.addLast(new PropertiesPropertySource("Config", properties));

则表示最后导入外部配置文件。

参考链接: 
[1] https://www.youtube.com/watch?v=uof5h-j0IeE&feature=youtu.be&t=1h17m46s 
[2] https://www.youtube.com/watch?v=uof5h-j0IeE&feature=youtu.be&t=1h17m46s

 

分享到:
评论

相关推荐

    InstallAnywhere安装打包实例

    打包Tomcat 6.0时,我们需要包含其所有必要的库文件和配置文件。同样,设置好Tomcat的启动脚本、服务注册、端口配置等,使得用户可以轻松启动和管理Tomcat服务器。 3. **Web应用集成** 在打包过程中,我们需要将...

    第三节-springboot源码解析-王炸篇.pdf

    而WAR包运行则将应用打包成传统WAR文件,部署到外部的Servlet容器中。 自定义启动器是Spring Boot提供的一种便捷方式,允许开发者创建可以重复使用的Spring Boot配置。自定义启动器需要遵循特定的命名和结构规则,...

    SpringBoot3

    8. **外部配置**:可以在项目根目录下创建 `application.properties` 文件来自定义配置。 ##### 2.1.2 Maven 配置示例 ```xml <groupId>org.springframework.boot <artifactId>spring-boot-starter-parent ...

    springboot入门

    2. 内置Servlet容器,应用无需打包war包 3. 使用starter(启动器)管理依赖并进行版本控制 4. 大量的自动配置,简化开发 5. 提供了准生产环境的运行时监控,如指标、健康检查、外部配置等 6. 无需配置XML,没有生成...

    SpringBoot 33道面试题和答案.docx

    - War包部署:打包成WAR文件,部署到外部Tomcat等容器。 7. **Starter**: Starter是SpringBoot提供的预配置模块,比如`spring-boot-starter-web`包含了Web开发所需的所有依赖,使得添加新功能变得简单。...

    SpringBoot+SpringCloud面试题.doc

    `bootstrap.properties`用于加载外部配置,如Config Server,常用于环境初始化。 4. **Spring Cloud的作用** - Spring Cloud建立在Spring Boot之上,提供了服务发现(如Eureka)、配置管理(如Config Server)、...

    springboot常见经典面试题.docx

    而 `bootstrap.properties` 则有特殊用途,例如在使用 Spring Cloud Config 配置中心时,用于加载外部配置中心的配置信息,或者处理一些固定的、不可覆盖的属性和加密解密场景。 Spring Boot 的配置文件支持两种...

    springboot详细入门教程,适用于学习、教学使用

    - 如果希望在外部的 Servlet 容器如 Tomcat 上运行应用,则可以选择打包成 war 文件。 3. **Docker 容器**: - 将应用及其运行时环境一起打包进 Docker 容器中,便于跨平台部署和管理。 4. **云平台部署**: - ...

    Spring Boot核心笔记.pdf

    使用Maven插件spring-boot-maven-plugin,可以将Spring Boot应用打包成一个可执行的jar或war包。打包后,无需外部依赖的Servlet容器,直接使用java -jar命令即可运行打包后的文件,使得部署过程非常简单快捷。 **...

    SpringBoot+vue.zip

    这个压缩包“SpringBoot+vue”可能包含了完成以上集成的所有必要文件,包括Spring Boot的Java源代码、Vue.js的前端代码、配置文件以及可能的数据库脚本等。开发者可以通过解压、导入IDE,然后运行和调试这个项目,以...

    springboot参考指南

    改变应用程序外部配置文件的位置 iii. 63.3. 使用'short'命令行参数 iv. 63.4. 使用YAML配置外部属性 v. 63.5. 设置生效的Spring profiles vi. 63.6. 根据环境改变配置 vii. 63.7. 发现外部属性的内置选项 iii. 64....

    SpringBoot面试题 44道.pdf

    运行 Spring Boot 应用的方式多样,可以打包成可执行 JAR 或 WAR 文件,使用命令行或容器运行,也可以直接通过 Maven 或 Gradle 插件运行。Spring Boot 内置了 Tomcat 或 Jetty 等 Servlet 容器,因此大多数情况下...

    springboot基础详解

    在 Maven 的 `settings.xml` 配置文件中添加 JDK 1.8 的配置,确保项目能够正确编译: ```xml <id>jdk-1.8 <activeByDefault>true <jdk>1.8 <maven.compiler.source>1.8 <maven.compiler.target>1.8 ...

    spring-boot-1.1.9.RELEASE.tar.gz

    6. YAML/Properties 配置:除了传统的 Java 属性配置文件,SpringBoot 还支持 YAML 格式的配置文件,提供更友好的格式来定义复杂配置。 7. 测试支持:SpringBoot 提供了测试工具和注解,如 `@SpringBootTest` 和 `@...

    springboot-最全的入门教程&源码.zip

    4. **运行方式**:可以使用 `java -jar` 命令直接运行 Spring Boot 应用,也可以打包成传统的 WAR 文件部署到外部容器。 5. **Actuator**:提供了一组监控和管理应用的端点,如健康检查、指标、审计等,帮助开发者...

    springboot和springcloud的面试题.docx

    - **@PropertySource注解导入支持**:Properties格式支持通过`@PropertySource`注解来导入外部配置文件,而YAML格式则不支持该注解。 #### 三、Spring Boot热部署机制 1. **实现方式**: - **使用DevTools**:...

    spring boot

    3. **嵌入式服务器**:Spring Boot支持嵌入式Tomcat、Jetty或Undertow,无需打包WAR文件上传到外部容器中。 4. **自动配置**:Spring Boot会根据你添加的依赖来自动配置你的应用。 5. **启动项**:Spring Boot提供了...

    基于ssm的医药进出口交易系统.zip

    【描述】:“基于SSM的医药进出口交易系统.zip”表明这是一个已经打包好的源代码文件,可能包含了项目的全部资源,如Java源代码、配置文件、静态资源、数据库脚本等。用户或开发者解压后可以进行进一步的开发、学习...

Global site tag (gtag.js) - Google Analytics