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.
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.
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"
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é.
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