J'ai créé une application Web Spring Boot, mais je ne parviens pas à déployer le fichier WAR de l'application Web Spring Boot sur Tomcat et je peux l'exécuter en tant qu'application Java. Comment exécuter l'application Spring Boot en tant que Web service sur Tomcat. J'utilise le code suivant. S'il est possible de s'exécuter sur Tomcat, aidez-moi à utiliser les annotations sans utiliser web.xml et avec web.xml.
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
Code suivant pour contrôleur de repos
@RestController
public class HelloWorld{
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public ResponseEntity<String> get() {
return new ResponseEntity<String>("Hello World", HttpStatus.OK);
}
}
Après Pom.xml j'utilise
<groupId>org.springframework</groupId>
<artifactId>web-service</artifactId>
<version>0.1.0</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.0.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-Tomcat</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
</dependency>
</dependencies>
<properties>
<Java.version>1.6</Java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-releases</id>
<url>https://repo.spring.io/libs-release</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-releases</id>
<url>https://repo.spring.io/libs-release</url>
</pluginRepository>
</pluginRepositories>
<packaging>war</packaging>
Voici deux bonnes documentations sur la façon de déployer le Spring Boot
App en tant que fichier war
.
Vous pouvez suivre ce démarrage printanier howto-traditional-deployment documentation -
Étapes selon cette documentation -
Vous mettez à jour la classe principale de votre application pour étendre SpringBootServletInitializer
.
L'étape suivante consiste à mettre à jour votre configuration de génération afin que votre projet génère un fichier war plutôt qu'un fichier jar. <packaging>war</packaging>
Marquez la dépendance du conteneur de servlet intégré comme fourni.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-Tomcat</artifactId>
<scope>provided</scope>
</dependency>
et une autre manière -
Voir ceci documentation Spring io qui explique comment déployer l'application Spring Boot sur un serveur d'applications.
Pas -
Remplacez jar
packaging par war
.
Commentez la déclaration de la spring-boot-maven-plugin
_ plugin dans votre pom.xml
Ajoutez un point d’entrée Web dans votre application en développant SpringBootServletInitializer
et en remplaçant la méthode configure
.
Retirer le spring-boot-starter-Tomcat dependency
et modfiy votre spring-boot-starter-web
dépendance à
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-Tomcat</artifactId> </exclusion> </exclusions> </dependency>
Dans votre pom.xml
, retirer spring-beans
et spring-webmvc
dépendances. Le spring-boot-starter-web
dépendance dépendra de ces dépendances.
Spring Boot permet de déployer l’application en tant que fichier war traditionnel dans servlet 3.x
_ ( sans web.xml ) prenant en charge le serveur Tomcat.Veuillez consulter documentation de démarrage printanier pour cela. Je vais vous expliquer ce que vous devez faire ici.
étape 1 : modifiez pom.xml
pour changer l'emballage en war: (ce que vous avez déjà fait)
<packaging>war</packaging>
étape 2 : changez votre dépendance
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-Tomcat</artifactId>
</dependency>
à
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-Tomcat</artifactId>
<scope>provided</scope>
</dependency>
étape 3 : modifiez votre nom de guerre (si vous devez éviter les détails de version ajoutés au nom de guerre) dans pom.xml
en dessous de <build>
tag.
<build>
<finalName>web-service</finalName>
.....
étape 4 : lancez maven build pour créer war: clean install
étape 5: déployer le fichier war généré web-service.war
dans Tomcat et demande l’URL dans le navigateur http://<Tomcat ip>:<Tomcat port>/web-service/hello
Tu devrais obtenir Hello World
.
Remarque: Vous pouvez également supprimer les dépendances redondantes, comme @ALi Dehghani.
Marque le spring-boot-starter-Tomcat
_ dépendance comme provided
, comme:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-Tomcat</artifactId>
<scope>provided</scope>
</dependency>
Note1: Supprimez les dépendances redondantes de votre pom.xml
comme:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
Ils font partie de paquets de démarrage de démarrage de printemps
Note2: Faites le pot pas la guerre
J'ai été confronté à ce problème. Une bonne partie de ce qui précède est un bon conseil. Mon problème était de déployer sur le serveur Pivotal TC au début.
Faites de l'emballage dans le pom un WAR.
<packaging>war</packaging>
Ajouter des dépendances au pom
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-Tomcat</artifactId>
<scope>provided</scope>
</dependency>
J'ai utilisé une classe d'application pour contenir le main (). Main avait un code de configuration pour que EntityManager
etc puisse être injecté. Cette EntityManager
a utilisé les informations des fichiers ApplicationContext
et persistence.xml
Pour les informations de persistance. Fonctionne bien sous SpringBoot mais pas sous Tomcat. En fait, sous Tomcat, la Main()
n'est pas appelée. La classe Application étend SpringBootServletInitializer
.
La méthode suivante est ajoutée à la classe Application:
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
Application obj = new Application();
@SuppressWarnings("resource")
ConfigurableApplicationContext applicationContext =
new ClassPathXmlApplicationContext("META-INF/spring/applicationContext.xml");
applicationContext.registerShutdownHook();
applicationContext.getBeanFactory().autowireBeanProperties(
obj, AutowireCapableBeanFactory.AUTOWIRE_NO, false);
return application.sources(Application.class);
}
Seule la dernière ligne est requise - l'autre code était précédemment contenu dans main()
et a été déplacé ici pour obtenir l'injection de EntityManager
qui fonctionne.
Les annotations nécessaires sont:
@EnableAutoConfiguration
@ComponentScan
//@SpringBootApplication will consist of both of these and @Configuration
Certaines URL peuvent maintenant avoir besoin de changer le contexte racine pour inclure
<artifactId>contextname</artifactId>.
J'espère que ça t'as aidé
Le processus de conversion d'un fichier de démarrage de printemps en guerre de démarrage de printemps est décrit à l'adresse suivante: http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#build -tool-plugins-maven-packaging En résumé, définissez votre classe de départ de la même manière que dans votre exemple, puis basculez l'emballage de jar en guerre dans le fichier .pom. De plus, vous devez définir la dépendance fournie Spring-Boot-Starter-Tomcat. Encore une fois, le processus est documenté dans sa forme complète au lien ci-dessus. Des informations complémentaires sur ce sujet sont disponibles dans le printemps io Guide, "Conversion d'une application JAR de démarrage Spring en un fichier WAR", disponible à l'adresse https://spring.io/guides/gs/convert. -jar-to-war/ Si je peux vous aider, faites le moi savoir et je vous aiderai.