当前位置: 首页 > 知识库问答 >
问题:

如何将Spring Boot参数传递给tomcat部署?

许昆
2023-03-14

我有一个Spring启动项目,在pom文件中声明了包装战争。

<packaging>war</packaging>   
...
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.2.5.RELEASE</version>
    <relativePath/>
</parent>

使用maven clean package命令,我能够构建war文件。下一步是使用启动war文件

java -jar <artifactId>.war --spring.config.name=application-<profile>

重要的是,我通过一个参数(spring.config.name)工作正常。但我的问题是,当我在雄猫环境中部署这场战争时,我如何才能通过这个论点?我在tomcat的webapps文件夹中复制战争。但是我能通过上面提到的论点吗?

编辑以获得更多澄清:我不是通过设置系统变量或其他方式来搜索解决方案。在我看来,一个合适的解决方案是在maven概要文件上进行配置。例如,如果我使用

mvn clean package -P<profile>

参数被传递到spring boot中的适当位置。

编辑2:我的Servlet初始实现器是从SpringBootServlet初始实现器扩展而来的,该扩展是从WebApplication ation初始实现器扩展而来的

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;

public class ServletInitializer extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

}

我的应用程序类:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

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

共有1个答案

彭烨熠
2023-03-14

您可以通过上下文将上下文参数传递给servlet上下文。xml。将此添加为上下文。pom旁边的xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Context>
<Context>
    <Parameter
        name="spring.profiles.active"
        value="${spring.profiles.active}"
        override="false" />
</Context>

然后像这样使用maven war插件

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <configuration>
        <containerConfigXML>context.xml</containerConfigXML>
        <filteringDeploymentDescriptors>true</filteringDeploymentDescriptors>
    </configuration>
</plugin>

然后使用轮廓设置Spring。简介。活动属性。Spring实际上会在没有配置的情况下获取这些,但Spring Boot却不会。要使其在Spring Boot中工作,您可以使用如下内容:

package com.example;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;

@SpringBootApplication
public class DemoApplication extends SpringBootServletInitializer {

    private ServletContext servletContext;

    @Override
    protected SpringApplicationBuilder configure(
            SpringApplicationBuilder builder) {
        String activeProfiles =
                servletContext.getInitParameter("spring.profiles.active");
        if (activeProfiles != null) {
            builder.profiles(activeProfiles.split(","));
        }
        return builder.sources(DemoApplication.class);
    }

    @Override
    public void onStartup(ServletContext servletContext)
            throws ServletException {
        this.servletContext = servletContext;
        super.onStartup(servletContext);
    }

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

}
 类似资料:
  • 问题内容: 我正在A中使用RUN指令安装rpm 但是,我想将值“ 2.3”作为参数传递。我的RUN指令应类似于: 哪里 问题答案: 您正在寻找和指导。这些是Docker 1.9中的新功能。查看https://docs.docker.com/engine/reference/builder/#arg。这将允许您添加到,然后使用构建。

  • 我有一个web项目与VM参数称为"-Dfile" 我在applicationContext上使用这个参数如下: 在Eclipse中,为了进行测试,我使用“运行配置”来设置如下值: 现在,我想在ApacheTomcat上测试我的webapp,所以我需要设置/发送folder VM参数。 我怎么做到的? 我必须使用setenv。嘘?怎样有人能给我举个例子吗? 谢谢对不起我的英语

  • 问题内容: 我想将登录用户单击的sa 列表中的传递给twitter bootstrap 。我正在与 angularjs* 一起使用 grails ,其中数据是通过 angularjs 呈现的。 *** 组态 我的grails视图页面是 我的是 所以,我怎么能传递到? 问题答案: 我尝试如下。 我在 鼓励 按钮上打电话给angularjs控制器, 我设置的从angularjs控制器。 我提供了一个p

  • 问题内容: 这似乎是一个愚蠢的问题,但是我是这个话题的新手。我正在致力于关于节点js的承诺。我想将参数传递给Promise函数。但是我不知道。 而功能类似于 问题答案: 将Promise包裹在一个函数中,否则它将立即开始工作。另外,您可以将参数传递给函数: 然后,使用它: ES6: 用:

  • 问题内容: 我正在使用Go内置的http服务器,并拍拍来响应一些URL: 我需要向该处理函数传递一个额外的参数-一个接口。 如何向处理程序函数发送额外的参数? 问题答案: 通过使用闭包,您应该能够做您想做的事情。 更改为以下内容(未测试): 然后对

  • 我在解一个有很多常数的非线性方程 我创建了一个用于解决以下问题的函数: 然后我想做: 但是正在解包并向函数传递太多参数,因此我得到: TypeError:terminalV()正好接受2个参数(给定6个) 那么,我的问题是,我是否可以通过某种方式将元组传递给调用的函数?