J'essaie de définir une racine de contexte d'applications Spring Boot par programmation. La raison de la racine de contexte est que nous voulons que l'application soit accessible à partir de localhost:port/{app_name}
et que tous les chemins de contrôleur y soient ajoutés.
Voici le fichier de configuration de l'application pour l'application 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;
}
}
Voici le contrôleur d'index de la page principale.
@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";
}
}
La nouvelle racine de l'application doit être à localhost:12378/mainstay
, mais elle se trouve toujours à localhost:12378
.
Que me manque-t-il qui empêche Spring Boot d'ajouter la racine de contexte avant le mappage de la demande?
la source
EmbeddedServletContainerCustomizer
qui fonctionne aussi Mais j'irais ce qui est fourni au lieu d'essayer de boulonner par vous-même. La raison pour laquelle votre solution ne fonctionne pas est liée au comportement par défaut programmé (accidentellement?) Dans leServerProperties
, la configuration par défautcontextPath
est""
(et elle vérifienull
et non""
. Cette dernière remplace votre définition explicitecontextPath
.Si vous utilisez Spring Boot, vous n'avez pas à configurer les propriétés du serveur via l'initialisation de Vean.
Au lieu de cela, si une fonctionnalité est disponible pour la configuration de base, elle peut être définie dans un fichier «propriétés» appelé
application
, qui doit résider soussrc\main\resources
dans la structure de votre application. Le fichier "propriétés" est disponible en deux formats.yml
.properties
La façon dont vous spécifiez ou définissez les configurations diffère d'un format à l'autre.
Dans votre cas spécifique, si vous décidez d'utiliser l'extension
.properties
, vous auriez un fichier appeléapplication.properties
soussrc\main\resources
avec les paramètres de configuration suivantsOTOH, si vous décidez d'utiliser l'
.yml
extension (ieapplication.yml
), vous devrez définir les configurations en utilisant le format suivant (ieYAML
):Pour les propriétés plus courantes de Spring Boot, reportez-vous au lien ci-dessous:
la source
Si vous utilisez Spring Boot 2.0.0, utilisez:
la source
server.servlet.contextPath=/api
veuillez noter que les propriétés "server.context-path" ou "server.servlet.context-path" [à partir de springboot 2.0.x] ne fonctionneront que si vous déployez vers un conteneur intégré, par exemple, un tomcat intégré. Ces propriétés n'auront aucun effet si vous déployez votre application en tant que war sur un tomcat externe par exemple.
voir cette réponse ici: https://stackoverflow.com/a/43856300/4449859
la source
war
fichier en utilisantspringboot v2.x
ettomcat v8.5
?Les bonnes propriétés sont
pour configurer le chemin du DispatcherServlet
et
pour configurer le chemin du contexte des applications en dessous.
la source
Nous pouvons changer le chemin de la racine du contexte en utilisant une simple entrée dans le fichier de propriétés.
application.properties
la source
Nous pouvons le mettre en
application.properties
tant queAPI_CONTEXT_ROOT=/therootpath
Et nous y accédons dans la classe Java comme mentionné ci-dessous
la source
server.contextPath = / mainstay
fonctionne pour moi si j'avais un fichier de guerre dans JBOSS. Parmi plusieurs fichiers war où chacun contient jboss-web.xml, cela ne fonctionnait pas. J'ai dû mettre jboss-web.xml dans le répertoire WEB-INF avec le contenu
la source
Dans Spring Boot 1.5:
Ajoutez la propriété suivante dans
application.properties
:Remarque:
/demo
est votre URL de chemin de contexte.la source
Vous pouvez le faire en ajoutant facilement le port et le chemin de contexte pour ajouter la configuration dans le fichier [src \ main \ resources] .properties et aussi le fichier .yml
configuration du fichier application.porperties
configuration du fichier application.yml
Nous pouvons également le changer par programme dans Spring Boot.
}
On peut aussi ajouter une autre manière
en utilisant la commande java spring boot 1.X
en utilisant la commande java spring boot 2.X
la source
Si vous utilisez application.yml et la version Spring au-dessus de 2.0, configurez-les de la manière ci-dessous.
Maintenant, tous les appels d'API seront comme http: // localhost: 8081 / demo-api /
la source
Nous pouvons le définir en utilisant
WebServerFactoryCustomizer
. Cela peut être ajouté directement dans la classe de méthode principale de spring boot qui démarre le Spring ApplicationContext.la source
Si vous utilisez Spring Boot 2.x et que vous souhaitez transmettre la propriété de chemin de contexte dans la ligne de commande, vous devez mettre double // comme ceci:
Cela a fonctionné pour moi sous Windows.
la source
la source
Il doit être: server.servlet.context-path = / demo notez qu'il n'a pas de guillemets uniquement la valeur précédée de '/' cette valeur va dans votre fichier application.properties
la source
le chemin de contexte peut être directement intégré au code mais ce n'est pas conseillé car il ne peut pas être réutilisé donc écrivez dans le fichier application.properties server.contextPath = / nom du dossier où vous avez placé le code contextPath = nom du dossier où vous avez placé le code / Remarque: regardez attentivement la barre oblique.
la source