spring boot打成jar包用外部配置文件替换配置

本文介绍了如何在Spring Boot应用中实现动态配置加载的方法。通过多种途径加载配置文件,并重点介绍了在代码中直接指定配置的方式。此外,还给出了POM文件中排除特定配置文件的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于需求的原因,配置文件中的数据库连接等内容需要动态替换。

首先搜到的是可以运行jar包的时候传配置参数:

java -jar demo.jar --server.port = 9000

但是客户端传给我的是一整个大json串,所以pass。

然后了解到SpringApplication从4个地方加载配置文件:

  1. jar包同目录下的config文件夹中
  2. jar包同目录下
  3. classpath下的config文件夹中
  4. classpath目录下

优先级依次降低,前两个是从外部读取配置文件的。但由于某些原因这种方法可能也不满足要求。。

第三种:代码中指定

public class Application {
    
	public static void main(String[] args) throws IOException {
		Properties properties = new Properties();
		InputStream in = new FileInputStream("application.properties");
		properties.load(in);
		SpringApplication app = new SpringApplication(Application.class);
		app.setDefaultProperties(properties);
		app.run(args);
	}
}

注意这种方式pom.xml打包时需要去除配置文件,在<build>中加:

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <excludes>
            <exclude>*.properties</exclude>
            <exclude>*.yml</exclude>
        </excludes>
    </resource>
</resources>

 

<think>首先,用户的问题是关于如何在Spring Boot项目中生成WAR。用户提供了几个引用,这些引用是关于Spring Boot成WAR的步骤,括修改pom.xml文件、移除Tomcat依赖、添加ServletInitializer类等。 我的回答需要遵循系统级指令: - 所有行内数学表达式必须使用$...$格式。 - 独立公式必须使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识。 - 回答结构清晰,帮助用户逐步解决问题,尽量保证回答真实可靠。 用户的问题是关于Spring Boot生成WAR,这是一个技术问题,不涉及数学表达式,所以可能不需要使用数学公式。但为了遵守指令,如果没有任何数学内容,我可以忽略数学部分。指令说"所有行内数学表达式必须使用$...$格式",但如果没有数学内容,就不需要添加。 现在,分析用户提供的引用: - 引用[1]:关于修改Maven插件来更改WAR的文件名。 - 引用[2]:修改pom.xml为war打类型,并移除Tomcat依赖。 - 引用[3]:添加ServletInitializer类来配置Spring Boot应用。 - 引用[4]:与引用[2]类似,强调添加<scope>provided</scope>来避免Tomcat冲突。 用户说:"上述引用仅供参考,并不是用户真正的需求,请尽可能多的参考用户上一次的问题和你的回答。我想用户想要了解如何在Spring Boot中打生成WAR文件"。所以,我需要基于这些引用,但回答用户的核心问题:如何在Spring Boot项目中生成WAR。 我的回答应该结构清晰,逐步解决问题: 1. **介绍**:简要说明为什么需要生成WAR(例如,部署到外部Tomcat服务器)。 2. **步骤**:详细列出生成WAR的步骤。 - 修改pom.xml中的打类型。 - 排除嵌入式Tomcat依赖。 - 添加ServletInitializer类。 - 构建WAR。 3. **示例**:提供代码片段,如pom.xml修改和ServletInitializer类。 4. **生成相关问题**:在回答末尾添加相关问题。 回答中需要自然地添加引用标识。例如,当提到某个步骤时,引用相应的引用。 最后,生成相关问题,例如: 1. WARJAR的区别? 2. 如何部署Spring Boot WAR到Tomcat? 3. 常见问题及解决方法? 确保使用中文回答。 大纲回答: - **开头**:解释Spring Boot默认生成JAR,但有时需要WAR用于部署。 - **步骤**: 1. 修改pom.xml:设置<packaging>war</packaging>。 2. 排除Tomcat依赖:添加<scope>provided</scope>。 3. 创建ServletInitializer类:继承SpringBootServletInitializer。 4. 构建WAR:使用Maven命令(如mvn clean package)。 - **代码示例**:提供pom.xml和ServletInitializer类的代码片段。 - **结尾**:总结并生成相关问题。 引用标识: - 当引用具体内容时,添加[^n]。 - 例如,提到修改pom.xml时,引用[2]或[4]。 生成相关问题: - 基于主题,如优化、部署、问题解决。</think>### 如何在Spring Boot项目中生成WAR Spring Boot默认使用嵌入式服务器(如Tomcat)生成可执行的JAR,适用于独立运行。但如果您需要将应用部署到外部Servlet容器(如Tomcat服务器),则需生成WAR。以下是详细的步骤指南,基于Spring Boot官方文档和最佳实践。整个过程涉及修改Maven配置、调整依赖和添加启动类,确保WAR兼容外部容器。 #### 步骤1: 修改pom.xml文件 首先,将项目的打类型从JAR改为WAR。在`pom.xml`中,添加`<packaging>war</packaging>`元素。同时,排除嵌入式Tomcat依赖,避免与外部Tomcat冲突。引用[2]和[4]建议添加`<scope>provided</scope>`,这样Tomcat依赖仅在编译和测试阶段使用,部署时由外部容器提供[^2][^4]。 ```xml <!-- 设置打类型为WAR --> <packaging>war</packaging> <!-- 排除嵌入式Tomcat --> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- 移除嵌入式Tomcat --> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <!-- 添加Tomcat依赖,scope为provided --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> <!-- 关键:避免部署冲突 --> </dependency> </dependencies> ``` 如果需要自定义WAR名称(如将默认的`myapp-0.0.1-SNAPSHOT.war`改为`springboot.war`),可以在`pom.xml`中添加Maven插件配置。引用[1]提供了示例[^1]: ```xml <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <finalName>springboot</finalName> <!-- 自定义WAR文件名 --> </configuration> </plugin> </plugins> </build> ``` #### 步骤2: 添加ServletInitializer类 Spring Boot应用需要扩展`SpringBootServletInitializer`类,以支持外部Servlet容器启动。引用[3]展示了如何创建这个类:它必须位于主应用类的同级中,并重写`configure`方法[^3]。 ```java package com.example.demo; // 替换为您的名 import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; public class ServletInitializer extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { // 指向主应用类 return builder.sources(DemoApplication.class); // 替换为您的应用类名 } } ``` #### 步骤3: 构建WAR 完成上述修改后,使用Maven命令生成WAR: ```bash mvn clean package ``` 构建成功后,WAR文件将生成在`target`目录下(例如`target/springboot.war`)。您可以将此文件部署到Tomcat等外部服务器。 #### 验证和常见问题 - **验证部署**:将WAR复制到Tomcat的`webapps`目录,启动Tomcat后访问`http://localhost:8080/your-app-name`。 - **常见问题**: - 如果启动失败,检查`ServletInitializer`类是否在主应用类同级中。 - 依赖冲突:确保所有Tomcat相关依赖的`scope`为`provided`,引用[4]强调这能避免类加载问题[^4]。 - 文件名问题:如果未生效,确认Maven插件配置是否正确。 通过以上步骤,您可以轻松将Spring Boot应用打为WAR,适用于企业级部署场景。整个过程基于Spring Boot的约定优于配置原则,确保了兼容性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值