[JAVA] Essayez Spring Boot 1 (Construction de l'environnement ~ Démarrage de Tomcat)

introduction

Je voudrais écrire un exemple de programme avec Spring Boot. Pour référence, [Introduction to Spring](https://www.amazon.co.jp/Spring%E5%BE%B9%E5%BA%95%E5%85%A5%E9%96%80- Spring-Framework% E3% 81% AB% E3% 82% 88% E3% 82% 8BJava% E3% 82% A2% E3% 83% 97% E3% 83% AA% E3% 82% B1% E3% 83% BC% E3% 82% B7% E3% 83% A7% E3% 83% B3% E9% 96% 8B% E7% 99% BA-% E6% A0% AA% E5% BC% 8F% E4% BC% 9A % E7% A4% BENTT% E3% 83% 87% E3% 83% BC% E3% 82% BF / dp / 4798142476). Nous créerons le système de réservation de salles de conférence présenté ici.

Installation de Java

Installons Java. Il existe différentes versions, mais cette fois, nous utiliserons OpenJDK 8. Si vous utilisez WSL2, vous pouvez le télécharger avec la commande suivante.

WSL2


$ sudo apt install openjdk-8-jdk

Ensuite, définissez les variables d'environnement. Tout d'abord, vérifions où Java a été installé.

WSL2


$ dpkg -L openjdk-8-jdk

***Abréviation
/usr/lib/jvm/java-8-openjdk-amd64
***Abréviation

Il y en a beaucoup, mais vous pouvez spécifier JAVA_HOME dans / usr / lib / jvm / java-8-openjdk-amd64. Maintenant que nous connaissons le chemin, définissez les variables d'environnement.

WSL2


$ sudo vi /etc/profile

/etc/Ajoutez ce qui suit au profil.
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar

Utilisez la commande suivante pour refléter les paramètres bash et vérifier que l'installation est terminée.

WSL2


$ source /etc/profile
$ java -version
openjdk version "1.8.0_265"
OpenJDK Runtime Environment (build 1.8.0_265-8u265-b01-0ubuntu2~20.04-b01)
OpenJDK 64-Bit Server VM (build 25.265-b01, mixed mode)

Vous pouvez maintenant utiliser Java.

Installez Maven

Ensuite, installez Maven. Gradle semble être plus populaire en tant qu'outil de construction, mais en raison de circonstances adultes, j'utilise le bon vieux Maven. C'est la seule commande.

WSL2


$ sudo apt install maven

Vérifions l'installation.

WSL2


$ mvn -v
Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 1.8.0_265, vendor: Private Build, runtime: /usr/lib/jvm/java-8-openjdk-amd64
Default locale: en, platform encoding: UTF-8
OS name: "linux", version: "4.19.104-microsoft-standard", arch: "amd64", family: "unix"

Démarrez l'exemple Spring-Boot

Créons maintenant un exemple de projet pour Spring Boot. Commencez par créer un répertoire approprié. Dans mon cas, j'ai fait ce qui suit.

WSL2


$ cd ~
$ mkdir web-app
$ cd web-app

Créez un exemple de projet avec la commande suivante.

WSL2


$ mvn archetype:generate

***Omission***

Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 1672:

Que diriez-vous. Beaucoup d'anglais sort et j'ai peur, mais vous pouvez l'ignorer. mvn archetype: generate est une commande pour créer un projet de manière interactive. Sélectionnons l'échantillon à utiliser cette fois. Essayez de taper «spring-boot».

WSL2


Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): : spring-boot

Il y a moins d'options qu'avant. (78 dans mon environnement) Cette fois, utilisons ʻorg.springframework.boot: spring-boot-sample-tomcat-archetype (Spring Boot Tomcat Sample) `. Cet exemple a Tomcat intégré, vous pouvez donc exécuter Jar tel quel. Dans mon environnement, il était affiché comme «68:», alors entrez «68». (Vous devriez pouvoir spécifier le nom)

WSL2


***Abréviation
68: remote -> org.springframework.boot:spring-boot-sample-tomcat-archetype (Spring Boot Tomcat Sample)
***Abréviation
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): : 68

Je peux à nouveau parler beaucoup anglais, mais veuillez ne pas refuser. Vous pouvez l'ignorer. Ensuite, il vous sera demandé ce qui suit.

WSL2


***Abréviation
Define value for property 'groupId': com.rocorock
Define value for property 'artifactId': mvn-spring
Define value for property 'version' 1.0-SNAPSHOT: :
Define value for property 'package' com.rocorock: :
Confirm properties configuration:
groupId: com.rocorock
artifactId: mvn-spring
version: 1.0-SNAPSHOT
package: com.rocorock
 Y: : y

Maven vous demande de spécifier groupId, ʻartifactId, version, package. Il est utilisé dans le nom du package. Je pense que pratiquement tout est OK. Si vous appuyez sur Entrée tel quel, version et package` seront reflétés sans autorisation. Je ne publierai pas d'explication sur les paramètres de Maven cette fois, mais si vous voulez en savoir plus sur Maven, je recommande ce livre. [Introduction à Java Build Tool](https://www.amazon.co.jp/Java%E3%83%93%E3%83%AB%E3%83%89%E3%83%84%E3%83%BC % E3% 83% AB% E5% 85% A5% E9% 96% 80-Maven-Gradle-SBT-Bazel% E5% AF% BE% E5% BF% 9C / dp / 4798049387) Si le message suivant s'affiche sur la console, il réussit.

WSL2


[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: spring-boot-sample-tomcat-archetype:1.0.2.RELEASE
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.rocorock
[INFO] Parameter: artifactId, Value: mvn-spring
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: com.rocorock
[INFO] Parameter: packageInPathFormat, Value: com/rocorock
[INFO] Parameter: package, Value: com.rocorock
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: groupId, Value: com.rocorock
[INFO] Parameter: artifactId, Value: mvn-spring
[INFO] Project created from Archetype in dir: /home/tomoya/web-app/mvn-spring
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  02:26 min
[INFO] Finished at: 2020-09-06T16:51:46+09:00
[INFO] ------------------------------------------------------------------------

Empaquetons le fichier résultant.

WSL2


$ cd mvn-spring
$ mvn package

***Abréviation

Results :

Failed tests:
  SampleTomcatApplicationTests.testHome:53 expected:<Hello [World]> but was:<Hello [DESKTOP-F147IF8]>
  NonAutoConfigurationSampleTomcatApplicationTests.testHome:82 expected:<Hello [World]> but was:<Hello [DESKTOP-F147IF8]>

Tests run: 2, Failures: 2, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  4.461 s
[INFO] Finished at: 2020-09-06T16:52:06+09:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.15:test (default-test) on project mvn-spring: There are test failures.
[ERROR]
[ERROR] Please refer to /home/tomoya/web-app/mvn-spring/target/surefire-reports for the individual test results.
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

J'ai "BUILD FAILURE". Vérifions la console.

Failed tests:
  SampleTomcatApplicationTests.testHome:53 expected:<Hello [World]> but was:<Hello [DESKTOP-F147IF8]>
  NonAutoConfigurationSampleTomcatApplicationTests.testHome:82 expected:<Hello [World]> but was:<Hello [DESKTOP-F147IF8]>

Apparemment, le test échoue. ʻAttendu: <Hello [World]> mais était: <Hello [DESKTOP-F147IF8]> `, corrigeons donc le code pour qu'il renvoie" Hello World ". (Pourquoi j'obtiens une erreur même s'il s'agit d'un échantillon ...) Vérifiez d'abord le code de test.

SampleTomcatApplicationTests.java


/*
 * Copyright 2012-2014 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.rocorock.tomcat;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.IntegrationTest;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.boot.test.TestRestTemplate;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;

import static org.junit.Assert.assertEquals;

/**
 * Basic integration tests for demo application.
 * 
 * @author Dave Syer
 */
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = SampleTomcatApplication.class)
@WebAppConfiguration
@IntegrationTest("server.port:0")
@DirtiesContext
public class SampleTomcatApplicationTests {

	@Value("${local.server.port}")
	private int port;

	@Test
	public void testHome() throws Exception {
		ResponseEntity<String> entity = new TestRestTemplate().getForEntity(
				"http://localhost:" + this.port, String.class);
		assertEquals(HttpStatus.OK, entity.getStatusCode());
		assertEquals("Hello World", entity.getBody());
	}

}

Puisque ʻassertEquals ("Hello World", entity.getBody ()) `est un test d'erreur, modifiez-le pour que le test passe ici.

HelloWorldService.java


/*
 * Copyright 2012-2013 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.rocorock.tomcat.service;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class HelloWorldService {

	@Value("${name:World}")
	private String name;

	public String getHelloMessage() {
		return "Hello World"; //Lieu de modification
	}

}

Cette fois, je l'ai solidifié en "Hello World" pour éviter le test. Cela n'a pas été résolu en substance, mais cela ne commencera pas tant que cela ne fonctionnera pas, alors je vais procéder tel quel. Emballons-le à nouveau.

WSL2


$ mvn package

***Abréviation
[INFO] Building jar: /home/tomoya/web-app/mvn-spring/target/mvn-spring-1.0-SNAPSHOT.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:1.0.2.RELEASE:repackage (default) @ mvn-spring ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  4.288 s
[INFO] Finished at: 2020-09-06T17:00:47+09:00
[INFO] ------------------------------------------------------------------------

Cette fois, ce fut un succès. En cas de succès, un nouveau dossier cible sera créé. Le fichier jar exécutable est stocké ici. Déplaçons-le immédiatement.

WSL2


$ ls
pom.xml  src  target
$ java -jar target/mvn-spring-1.0-SNAPSHOT.jar

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.0.2.RELEASE)

2020-09-06 17:01:19.928  INFO 5988 --- [           main] c.r.tomcat.SampleTomcatApplication       : Starting SampleTomcatApplication on DESKTOP-F147IF8 with PID 5988 (/home/tomoya/web-app/mvn-spring/target/mvn-spring-1.0-SNAPSHOT.jar started by tomoya in /home/tomoya/web-app/mvn-spring)
2020-09-06 17:01:19.951  INFO 5988 --- [           main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@414be896: startup date [Sun Sep 06 17:01:19 JST 2020]; root of context hierarchy

Vous verrez un script de démarrage amusant. Par défaut, Tomcat démarre sur le port 8080, alors accédons-y. Entrez http: // localhost: 8080 dans votre navigateur. Si vous voyez «Hello World», vous avez réussi. Appuyez sur Ctrl + C sur la console pour arrêter Tomcat et vous avez terminé.

À la fin

J'ai dit que je souhaitais créer une application de réservation de salle de réunion, mais j'ai terminé d'exécuter l'exemple Tomcat ... J'aimerais étendre et développer cet échantillon à partir de la prochaine fois! (Si vous êtes frustré, ce n'est peut-être pas un article)

Recommended Posts

Essayez Spring Boot 1 (Construction de l'environnement ~ Démarrage de Tomcat)
[Spring Boot] Construction de l'environnement (macOS)
Construction de l'environnement Docker × Spring Boot
◆ Spring Boot + note de construction de l'environnement gradle
[Printemps] Construction de l'environnement
Mémo de construction de l'environnement Spring Boot sur Mac
Construction de l'environnement de développement Java Spring Boot + Docker
Essayez Spring Boot de 0 à 100.
Essayez d'utiliser Spring Boot Security
Essayez Spring Boot sur Mac
Création d'un environnement de base de données avec Docker dans Spring Boot (IntellJ)
Essayez d'exécuter Spring Boot sur Kubernetes
Traitement lors du démarrage d'une application avec Spring Boot
Méthode de construction de l'environnement d'exécution Java (Tomcat @ Linux)
Création d'un environnement de développement Spring Boot dans Vagrant
Spring Boot 2.0.0 ne démarre pas le Tomcat intégré
[Construction de l'environnement] Installation de Spring Tool Suite 4 (Mac)
Essayez d'exécuter ScalarDB sur WSL Ubuntu (Construction de l'environnement)
Cookie SameSite dans Spring Boot (Spring Web MVC + Tomcat)
À propos de la conception de Spring Boot et de l'environnement de test unitaire
[Java] Construction de l'environnement
Procédure de construction de l'environnement JAVA + STS (Spring Tool Suite)
Essayez l'authentification LDAP avec Spring Security (Spring Boot) + OpenLDAP
Défi Spring Boot
Créez des projets Spring Boot par environnement avec Gradle
Forme de botte de printemps
Essayez d'automatiser la migration avec Spring Boot Flyway
Spring Boot Rappelez-vous
Créer un environnement Spring Boot avec Windows + VS Code
gae + botte à ressort
Procédure de construction de LINE Bot x Java (Spring Boot)
Créer un environnement de développement Spring Boot avec docker
Construction de l'environnement de développement Java (Mac + Pleiades All in One Eclipse 4.7 + Spring Boot + Gradle (Buildship))
Intégration Tomcat, Apache et WebSocket intégrée à l'application Spring Boot
Veuillez noter que Spring Boot + Tomcat 8.5.8 ne peut pas être utilisé!
Changer d'environnement avec Spring Boot application.properties et l'annotation @Profile
Essayez d'utiliser OpenID Connect avec Keycloak (application Spring Boot)
SSO avec GitHub OAuth dans l'environnement Spring Boot 1.5.x
Essayez la loi de l'inversion des dépendances avec plusieurs projets Spring Boot
Essayez gRPC dans le projet Spring Boot et Spring Cloud (Mac OS)
Déployer le projet Spring Boot sur Tomcat dans XAMPP
Comment démarrer par environnement avec Spring Boot de Maven
Créer un environnement de développement Java + Spring avec VirtualBox + Ubuntu (Xfce4)
Construction de l'environnement Penronse [Windows]
Fiche d'apprentissage SPRING BOOT 01
Botte de printemps + Heroku Postgres
[Flutter] Construction de l'environnement Ubuntu 20.04
Construction de l'environnement Rails Docker
Rédaction de mémo de démarrage de printemps (1)
Première botte à ressort (DI)
Aide-mémoire Spring Boot2
Mappage du servlet Spring Boot
Procédure d'apprentissage Spring Boot
Rédaction de mémos de démarrage de printemps (2)
construction d'environnement de développement Java
[Spring Boot] DataSourceProperties $ DataSourceBeanCreationException
Disponibilité de l'application Spring Boot 2.3