Adicionar caminho do contexto de aplicação da Primavera Bota

votos
119

Eu estou tentando configurar uma inicialização Primavera contexto aplicações raiz programaticamente. A razão para a raiz de contexto é que nós queremos o aplicativo para ser acessado a partir localhost:port/{app_name}e ter todos os caminhos do controlador anexar a ele.

Aqui está o arquivo de configuração do aplicativo para a web-app.

@Configuration
public class ApplicationConfiguration {

  Logger logger = LoggerFactory.getLogger(ApplicationConfiguration.class);

  @Value(${mainstay.web.port:12378})
  private String port;

  @Value(${mainstay.web.context:/mainstay})
  private String context;

  private Set<ErrorPage> pageHandlers;

  @PostConstruct
  private void init(){
      pageHandlers = new HashSet<ErrorPage>();
      pageHandlers.add(new ErrorPage(HttpStatus.NOT_FOUND,/notfound.html));
      pageHandlers.add(new ErrorPage(HttpStatus.FORBIDDEN,/forbidden.html));
  }

  @Bean
  public EmbeddedServletContainerFactory servletContainer(){
      TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
      logger.info(Setting custom configuration for Mainstay:);
      logger.info(Setting port to {},port);
      logger.info(Setting context to {},context);
      factory.setPort(Integer.valueOf(port));
      factory.setContextPath(context);
      factory.setErrorPages(pageHandlers);
      return factory;
  }

  public String getPort() {
      return port;
  }

  public void setPort(String port) {
      this.port = port;
  }
}

Aqui é o controlador de índice para a página principal.

@Controller
public class IndexController {

  Logger logger = LoggerFactory.getLogger(IndexController.class);

  @RequestMapping(/)
  public String index(Model model){
      logger.info(Setting index page title to Mainstay - Web);
      model.addAttribute(title,Mainstay - Web);
      return index;
  }

}

A nova raiz da aplicação deve ser de pelo localhost:12378/mainstay, mas ainda está localizado na localhost:12378.

O que estou ausente que está causando Primavera de inicialização para não acrescentar a raiz de contexto antes do mapeamento pedido?

Publicado 05/12/2013 em 17:33
fonte usuário
Em outras línguas...                            


15 respostas

votos
263

Por que você está tentando rolar sua própria solução. Primavera-boot já suporta isso.

Se você não tiver um, adicionar um application.propertiesarquivo para src\main\resources. Nesse arquivo de propriedades, adicionar 2 propriedades:

server.contextPath=/mainstay
server.port=12378

UPDATE (mola de arranque 2,0)

Como de mola de arranque 2,0 (devido ao apoio de ambos Spring MVC e da mola WebFlux) o contextPathfoi alterada para o seguinte:

server.servlet.contextPath=/mainstay

Você pode então remover sua configuração para o contêiner servlet personalizado. Se você precisa fazer alguma pós-processamento no recipiente que você pode adicionar uma EmbeddedServletContainerCustomizeraplicação à sua configuração (por exemplo, para adicionar as páginas de erro).

Basicamente as propriedades dentro do application.propertiesservir como um padrão, você pode sempre substituí-los usando outro application.propertieslado do artefato que você entregar ou adicionando parâmetros JVM ( -Dserver.port=6666).

Veja também o Guia de Referência especialmente a propriedades seção.

A classe ServerPropertiesimplementa o EmbeddedServletContainerCustomizer. O padrão para contextPathé "". Em sua amostra de código você está definindo o contextPathdiretamente no TomcatEmbeddedServletContainerFactory. Em seguida, o ServerPropertiesexemplo irá processar esta instância e redefini-la de seu caminho para "". ( Esta linha faz um nullcheque, mas como o padrão é ""sempre falhar e definir o contexto para ""e, assim, substituindo o seu).

Respondeu 06/12/2013 em 08:29
fonte usuário

votos
23

Se você estiver usando Primavera de inicialização, então você não tem que configurar as propriedades do servidor via Vean Inicializar.

Em vez disso, se uma funcionalidade está disponível para configuração básica, então ele pode ser definido em um "propriedades" arquivo chamado application, que deve residir sob src\main\resourcesem sua estrutura de aplicação. O "propriedades" arquivo está disponível em dois formatos

  1. .yml

  2. .properties

A maneira como você especificar ou definir as configurações difere de um formato para outro.

No seu caso específico, se você decidir usar a extensão .properties, então você teria um arquivo chamado application.propertiessob src\main\resourcesas seguintes definições de configuração

server.port = 8080
server.contextPath = /context-path

OTOH, se você decidir usar a .ymlextensão (ou seja application.yml), você precisa definir as configurações usando o seguinte formato (ie YAML):

server:
    port: 8080
    contextPath: /context-path

Para as propriedades mais comuns de Primavera Bota consulte o link abaixo:

https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html

Respondeu 09/02/2016 em 14:34
fonte usuário

votos
2

Podemos defini-lo na application.propertiescomo API_CONTEXT_ROOT=/therootpath

E nós acessá-lo na classe Java como mencionado abaixo

@Value("${API_CONTEXT_ROOT}")
private String contextRoot;
Respondeu 09/12/2016 em 10:47
fonte usuário

votos
4

As propriedades correctas são

server.servlet.path

para configurar o caminho do DispatcherServlet

e

server.servlet.context-path

para configurar o caminho do contexto aplicações abaixo disso.

Respondeu 24/04/2017 em 09:03
fonte usuário

votos
9

Se você usar o Spring Bota 2.0.0 uso:

server.servlet.context-path
Respondeu 13/05/2017 em 12:16
fonte usuário

votos
-1

Na Primavera de inicialização, para alterar o caminho do contexto, actualizar propriedades server.contextPath. Os exemplos seguintes actualizar o caminho do contexto de / a / mkyong ou http: // localhost: 8080 / mkyong

Nota Por padrão, o caminho do contexto é “/”.

1.1 Actualizar através de um arquivo de propriedades.

/src/main/resources/application.properties

server.port = 8080

server.contextPath = / mkyong

Respondeu 28/08/2017 em 09:56
fonte usuário

votos
0

server.contextPath = / esteio

trabalha para mim se eu tivesse um arquivo de guerra no JBoss. Entre vários arquivos de guerra onde cada uma contém jboss-web.xml não funcionou. Eu tive que colocar jboss-web.xml dentro do diretório WEB-INF com conteúdo

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web xmlns="http://www.jboss.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-web_5_1.xsd">
    <context-root>mainstay</context-root>
</jboss-web>
Respondeu 01/11/2017 em 13:08
fonte usuário

votos
-1

caminho do contexto pode ser diretamente integrado ao código, mas não é aconselhável, uma vez que não pode ser reutilizado de modo escrever na server.contextPath arquivo application.properties = / nome da pasta onde você colocou o contextPath code = nome da pasta onde você colocou o código / Nota: assistir a barra com cuidado.

Respondeu 10/11/2017 em 13:12
fonte usuário

votos
1

Na Primavera de inicialização de 1,5:

Adicione a seguinte propriedade em application.properties:

server.context-path=/demo

Nota: /demoé a sua URL caminho do contexto.

Respondeu 11/11/2017 em 16:11
fonte usuário

votos
0

Por favor, note que o "server.context-path" ou "server.servlet.context-path" [a partir de springboot 2.0.x] propriedades só irá funcionar se você estiver implantando em um recipiente por exemplo incorporado, tomcat incorporado. Essas propriedades não terá nenhum efeito se você estiver implantando seu aplicativo como uma guerra para um tomcat externo, por exemplo.

veja esta resposta aqui: https://stackoverflow.com/a/43856300/4449859

Respondeu 02/08/2018 em 14:47
fonte usuário

votos
0

Você pode fazê-lo adicionando o porto e contextPath facilmente adicionar a configuração em [principais recursos \ src \] arquivo .properties e também arquivo .yml

application.porperties configuração de arquivo

server.port = 8084
server.contextPath = /context-path

configuração de arquivo application.yml

server:
port: 8084
contextPath: /context-path

Também pode alterá-lo por meio de programação na inicialização primavera.

@Component
public class ServerPortCustomizer implements     WebServerFactoryCustomizer<EmbeddedServletContainerCustomizer > {

@Override
public void customize(EmbeddedServletContainerCustomizer factory) {
    factory.setContextPath("/context-path");
    factory.setPort(8084);
}

}

Também pode adicionar uma outra maneira

@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {SpringApplication application =     new pringApplication(MyApplication.class);
    Map<String, Object> map = new HashMap<>();
    map.put("server.servlet.context-path", "/context-path");
    map.put("server.port", "808");
    application.setDefaultProperties(map);
    application.run(args);
    }       
}

usando java comando 1.X inicialização primavera

java -jar my-app.jar --server.contextPath=/spring-boot-app     --server.port=8585 

usando java comando 2.X inicialização primavera

java -jar my-app.jar --server.servlet.context-path=/spring-boot-app --server.port=8585 
Respondeu 23/07/2019 em 18:47
fonte usuário

votos
0

Se você estiver usando a versão application.yml e primavera acima de 2,0 configure então em abaixo maneira.

server:
  port: 8081
  servlet:
     context-path: /demo-api

Agora toda a chamada de API será como http: // localhost: 8081 / demonstração-api /

Respondeu 06/11/2019 em 15:18
fonte usuário

votos
0

Nós podemos mudar contexto caminho raiz usando uma entrada simples no arquivo de propriedades.

application.properties

### Spring boot 1.x #########
server.contextPath=/ClientApp

### Spring boot 2.x #########
server.servlet.context-path=/ClientApp
Respondeu 03/01/2020 em 15:31
fonte usuário

votos
0

Podemos defini-lo usando WebServerFactoryCustomizer. Isso pode ser adicionado diretamente na classe principal método de boot mola que inicia o ApplicationContext Primavera.

@Bean
    public WebServerFactoryCustomizer<ConfigurableServletWebServerFactory>
      webServerFactoryCustomizer() {
        return factory -> factory.setContextPath("/demo");
}
Respondeu 23/01/2020 em 06:02
fonte usuário

votos
0

Se você usar o Spring Bota 2.x e quer passar a propriedade caminho do contexto na linha de comando, você deve colocar double // assim:

--server.servlet.context-path=//your-path

Que funcionou para mim correndo de janelas.

Respondeu 11/03/2020 em 00:13
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more