配置SpringBoot方便的切换jar和war

配置SpringBoot方便的切换jar和war

网上关于如何切换,其实说的很明确,本文主要通过profile进行快速切换已实现在不同场合下,用不同的打包方式。

jar到war修改步骤

  • pom文件修改

    1. packaging配置由jar改为war
    2. 排除tomcat等容器的依赖
    3. 配置web.xml或者无web.xml打包处理
  • 入口类修改

    1. 添加ServletInitializer

特别注意:当改成war包的时候,application.properties配置的server.portserver.servlet.context-path就无效了,遵从war容器的安排。

配置pom

配置packaging

<packaging>${pom.package}</packaging>

修改build

<!-- 作用是打war包的时候,不带版本号 -->
<finalName>${pom.packageName}</finalName>

<!--加入plugin-->
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-war-plugin</artifactId>
  <version>3.2.2</version>
  <configuration>
    <!--如果想在没有web.xml文件的情况下构建WAR,请设置为false。-->
    <failOnMissingWebXml>false</failOnMissingWebXml>
  </configuration>
</plugin>

排除容器

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  <exclusions>
    <exclusion>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
    </exclusion>
  </exclusions>
</dependency>

配置profile

<profiles>
  <profile>
    <!-- 开发环境 -->
    <id>jar</id>
    <activation>
      <activeByDefault>true</activeByDefault>
    </activation>
    <properties>
      <pom.package>jar</pom.package>
      <pom.packageName>${project.artifactId}-${project.version}</pom.packageName>
      <pom.profiles.active>dev</pom.profiles.active>
    </properties>
    <dependencies>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
      </dependency>
    </dependencies>
  </profile>
  <profile>
    <id>war</id>
    <properties>
      <pom.package>war</pom.package>
      <pom.packageName>${project.artifactId}</pom.packageName>
      <pom.profiles.active>linux</pom.profiles.active>
    </properties>
    <dependencies>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
      </dependency>
      <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
      </dependency>
    </dependencies>
  </profile>
</profiles>

修改入口类

  1. 入口类继承SpringBootServletInitializer
  2. 重写configure方法

使用@Profile注解,当启用war配置的时候,初始化Servlet。

public class Application extends SpringBootServletInitializer {

  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }

  @Profile(value = {"war"})
  @Override
  protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    return application.sources(Application.class);
  }
}
209 声望
17 粉丝
0 条评论
推荐阅读
Jmeter压测MQTT结果分析
为了练习使用Jmeter压测MQTT,在内网环境搭建了EMQ v4.4。整个环境使用了6台PC,CPU是相同型号,EMQ服务器和控制机采用8G内存,负载机4G内存。EMQ服务器和负载机均为CentOS7.9。

bluesbruce阅读 827

spring boot 锁
由于当前的项目中由于多线程操作同一个实体,会出现数据覆盖的问题,后保存的实体把先保存的实体的数据给覆盖了。于是查找了锁的实现的几种方式。但写到最后发现,其实自己可以写sql 更新需要更新的字段即可,这...

weiewiyi3阅读 9.2k

记录java 在遍历中删除元素 以及 mysql5.6版本添加unique失败
遍历中删除List或Queue等数据结构中,如何一边遍历一遍删除?1. 常犯错误ArrayList可能没遇到坑过的人会用增强for循环这么写: {代码...} 但是一运行,结果却抛 java.util.ConcurrentModificationException 异常即...

weiewiyi5阅读 803

利用Docker部署管理LDAP及其初次使用
前言:本周主要写了gitlabWebhook转github的项目,总体上没有遇到什么大问题,这周接触到了LDAP,于是就花时间实际操作了解了一下。

李明5阅读 938

记录本周问题
项目里两个地方都用到了hashmap。但是感觉自己用的时候并没有感觉非常的清晰。同时发现hashmap有线程不安全问题,而自己用的时候就是多线程来使用。于是在这里介绍一下。

weiewiyi5阅读 725

Spring Security + JWT
Spring Security默认是基于session进行用户认证的,用户通过登录请求完成认证之后,认证信息在服务器端保存在session中,之后的请求发送上来后SecurityContextPersistenceFilter过滤器从session中获取认证信息、...

4阅读 1.4k

Reactive Spring实战 -- 理解Reactor的设计与实现
Reactor是Spring提供的非阻塞式响应式编程框架,实现了Reactive Streams规范。 它提供了可组合的异步序列API,例如Flux(用于[N]个元素)和Mono(用于[0 | 1]个元素)。

binecy3阅读 4.8k评论 2

209 声望
17 粉丝
宣传栏