Я пытаюсь установить корневой контекст приложения Spring Boot программно. Причина корня контекста в том, что мы хотим, чтобы к приложению обращались, localhost:port/{app_name}
и чтобы к нему добавлялись все пути контроллеров.
Вот файл конфигурации приложения для веб-приложения.
@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;
}
}
Вот контроллер индекса для главной страницы.
@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";
}
}
Новый корень приложения должен быть в localhost:12378/mainstay
, но он все еще находится в localhost:12378
.
Чего мне не хватает, так это то, что Spring Boot не добавляет контекстный корень до сопоставления запроса?
источник
EmbeddedServletContainerCustomizer
также будет работать. Но я бы пошел, что предоставляется, вместо того, чтобы пытаться сбежать самостоятельно. Почему ваше решение не работа связана с поведением по умолчанию запрограммирован (? Случайно) вServerProperties
, по умолчанию настроенcontextPath
это""
(и он проверяетnull
и не""
Последние переопределение ваши явным образом .contextPath
.Если вы используете Spring Boot, вам не нужно настраивать свойства сервера через инициализацию Vean.
Вместо этого, если для базовой конфигурации доступна одна функциональность, ее можно установить в файле «свойств»
application
, который должен находитьсяsrc\main\resources
в структуре вашего приложения. Файл «Свойства» доступен в двух форматах.yml
.properties
Способ, которым вы указываете или устанавливаете конфигурации, отличается от одного формата к другому.
В вашем конкретном случае, если вы решите использовать расширение
.properties
, то вы бы файл с именем вapplication.properties
соответствииsrc\main\resources
со следующими параметрами конфигурацииOTOH, если вы решите использовать
.yml
расширение (то естьapplication.yml
), вам нужно будет установить конфигурации, используя следующий формат (то естьYAML
):Для более общих свойств Spring Boot обратитесь к ссылке ниже:
источник
Если вы используете Spring Boot 2.0.0, используйте:
источник
server.servlet.contextPath=/api
обратите внимание, что свойства «server.context-path» или «server.servlet.context-path» [начиная с springboot 2.0.x] будут работать только при развертывании во встроенный контейнер, например, встроенный tomcat. Эти свойства не будут иметь эффекта, если вы развертываете свое приложение как война, например, для внешнего кота.
см. этот ответ здесь: https://stackoverflow.com/a/43856300/4449859
источник
war
файла с использованиемspringboot v2.x
иtomcat v8.5
?Правильные свойства
настроить путь к DispatcherServlet
и
настроить путь контекста приложений ниже этого.
источник
Мы можем изменить корневой путь контекста, используя простую запись в файле свойств.
application.properties
источник
Мы можем установить его
application.properties
какAPI_CONTEXT_ROOT=/therootpath
И мы обращаемся к нему в классе Java, как указано ниже
источник
server.contextPath = / опора
работает для меня, если бы у меня был один военный файл в JBOSS. Среди множества военных файлов, каждый из которых содержит jboss-web.xml, он не работал. Мне пришлось поместить jboss-web.xml в каталог WEB-INF с содержимым
источник
Весной Boot 1.5:
Добавьте следующее свойство в
application.properties
:Примечание:
/demo
ваш контекстный путь URL.источник
Вы можете сделать это, просто добавив порт и contextpath, чтобы добавить конфигурацию в файл [src \ main \ resources] .properties, а также в файл .yml.
Конфигурация файла application.porperties
настройка файла application.yml
Мы также можем изменить это программно в весенней загрузке.
}
Мы также можем добавить другой способ
используя команду Java Spring Spring 1.X
используя команду Java Spring Spring 2.X
источник
Если вы используете application.yml и весеннюю версию выше 2.0, настройте ее следующим образом.
Теперь все вызовы API будут выглядеть как http: // localhost: 8081 / demo-api /
источник
Мы можем установить это используя
WebServerFactoryCustomizer
. Это можно добавить непосредственно в основной метод весенней загрузки, который запускает Spring ApplicationContext.источник
Если вы используете Spring Boot 2.x и хотите передать свойство context path в командной строке, вы должны поставить double // примерно так:
Это работает для меня, работает в Windows.
источник
источник
Это должно быть: server.servlet.context-path = / demo, обратите внимание, что в нем нет кавычек, только значение, которому предшествует '/', это значение входит в ваш файл application.properties
источник
Путь контекста может быть непосредственно интегрирован в код, но это не рекомендуется, так как его нельзя использовать повторно, поэтому запишите в файле application.properties server.contextPath = / имя папки, в которую вы поместили код contextPath = имя папки, в которую вы поместили код / примечание: внимательно следите за косой чертой.
источник