Estou tentando definir uma raiz de contexto de aplicativos Spring Boot programaticamente. O motivo da raiz de contexto é que queremos que o aplicativo seja acessado localhost:port/{app_name}
e tenha todos os caminhos do controlador anexados a ele.
Aqui está o arquivo de configuração do aplicativo para o aplicativo da web.
@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 está o controlador de índice da 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 do aplicativo deve estar em localhost:12378/mainstay
, mas ainda está localizada em localhost:12378
.
O que sinto falta está fazendo com que o Spring Boot não anexe a raiz de contexto antes do mapeamento da solicitação?
fonte
EmbeddedServletContainerCustomizer
também funcionasse. Mas eu iria o que é fornecido, em vez de tentar fugir sozinho. Por sua solução não trabalho tem a ver com o comportamento padrão programada (? Acidentalmente) noServerProperties
, o padrão configuradocontextPath
é""
(e ele verificanull
e não""
As últimas substituições seu explicitamente definido.contextPath
.Se você estiver usando o Spring Boot, não precisará configurar as propriedades do servidor via inicialização do Vean.
Em vez disso, se uma funcionalidade estiver disponível para configuração básica, ela poderá ser definida em um arquivo de "propriedades" chamado
application
, que deverá residirsrc\main\resources
em sua estrutura de aplicativos. O arquivo "properties" está disponível em dois formatos.yml
.properties
A maneira como você especifica ou define as configurações difere de um formato para outro.
No seu caso específico, se você decidir usar a extensão
.properties
, terá um arquivo chamadoapplication.properties
sobsrc\main\resources
com as seguintes definições de configuraçãoOTOH, se você decidir usar a
.yml
extensão (ou sejaapplication.yml
), precisará definir as configurações usando o seguinte formato (ou sejaYAML
):Para propriedades mais comuns do Spring Boot, consulte o link abaixo:
fonte
Se você usa o Spring Boot 2.0.0, use:
fonte
server.servlet.contextPath=/api
observe que as propriedades "server.context-path" ou "server.servlet.context-path" [a partir do springboot 2.0.x] somente funcionarão se você estiver implantando em um contêiner incorporado, por exemplo, tomcat incorporado. Essas propriedades não terão efeito se você estiver implementando seu aplicativo como uma guerra em um tomcat externo, por exemplo.
veja esta resposta aqui: https://stackoverflow.com/a/43856300/4449859
fonte
war
arquivo usandospringboot v2.x
etomcat v8.5
?As propriedades corretas são
configurar o caminho do DispatcherServlet
e
para configurar o caminho do contexto de aplicativos abaixo disso.
fonte
Podemos alterar o caminho da raiz de contexto usando uma entrada simples no arquivo de propriedades.
application.properties
fonte
Podemos configurá-lo
application.properties
comoAPI_CONTEXT_ROOT=/therootpath
E acessamos na classe Java, conforme mencionado abaixo
fonte
server.contextPath = / mainstay
funciona para mim se eu tivesse um arquivo de guerra no JBOSS. Entre vários arquivos war em que cada um contém jboss-web.xml, não funcionou. Eu tive que colocar o jboss-web.xml dentro do diretório WEB-INF com conteúdo
fonte
No Spring Boot 1.5:
Adicione a seguinte propriedade em
application.properties
:Nota:
/demo
é o URL do seu caminho de contexto.fonte
Você pode fazer isso adicionando a porta e o caminho de contexto facilmente para adicionar a configuração no arquivo [src \ main \ resources] .properties e também no arquivo .yml
configuração do arquivo application.porperties
configuração do arquivo application.yml
Também podemos alterá-lo programaticamente na inicialização da primavera.
}
Também podemos adicionar uma outra maneira
usando o comando java spring boot 1.X
usando o comando java spring boot 2.X
fonte
Se você estiver usando a versão application.yml e spring acima de 2.0, configure-a da maneira abaixo.
Agora toda a chamada da API será como http: // localhost: 8081 / demo-api /
fonte
Podemos configurá-lo usando
WebServerFactoryCustomizer
. Isso pode ser adicionado diretamente na classe de método principal de inicialização por primavera, que inicia o Spring ApplicationContext.fonte
Se você usa o Spring Boot 2.xe deseja passar a propriedade do caminho de contexto na linha de comando, deve colocar double // assim:
Isso funcionou para mim correndo no Windows.
fonte
fonte
Ele deve ser: server.servlet.context-path = / demo note que ele não possui aspas, apenas o valor precedido por '/' esse valor é inserido no arquivo application.properties
fonte
O caminho de contexto pode ser integrado diretamente ao código, mas não é aconselhável, pois não pode ser reutilizado, portanto, escreva no arquivo application.properties server.contextPath = / nome da pasta em que você colocou o código contextPath = nome da pasta em que você colocou o código / Nota: observe a barra com cuidado.
fonte