Springboot初体验


声明:本文转载自https://my.oschina.net/coderWyq/blog/1631372,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

从 0 开始写一个springboot 初始体验项目

1.从 pom.xml 开始

以pom文件作为练习的开始。首先呢,创建一个 pom.xml 文件作为开始,内容如下:

pom.xml

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 	<modelVersion>4.0.0</modelVersion>  	<groupId>com.example</groupId> 	<artifactId>myproject</artifactId> 	<version>0.0.1-SNAPSHOT</version>  	<parent> 		<groupId>org.springframework.boot</groupId> 		<artifactId>spring-boot-starter-parent</artifactId> 		<version>2.0.1.BUILD-SNAPSHOT</version> 	</parent>  	<!-- Additional lines to be added here... -->  	<!-- (you don't need this if you are using a .RELEASE version) --> 	<repositories> 		<repository> 			<id>spring-snapshots</id> 			<url>https://repo.spring.io/snapshot</url> 			<snapshots><enabled>true</enabled></snapshots> 		</repository> 		<repository> 			<id>spring-milestones</id> 			<url>https://repo.spring.io/milestone</url> 		</repository> 	</repositories> 	<pluginRepositories> 		<pluginRepository> 			<id>spring-snapshots</id> 			<url>https://repo.spring.io/snapshot</url> 		</pluginRepository> 		<pluginRepository> 			<id>spring-milestones</id> 			<url>https://repo.spring.io/milestone</url> 		</pluginRepository> 	</pluginRepositories> </project> 

当前的文件结构如下:

. └── pom.xml 

现在,尝试一下 mvn package

$ mvn package [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building myproject 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-resources-plugin:3.0.1:resources (default-resources) @ myproject --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory /springboot-try/src/main/resources [INFO] skip non existing resourceDirectory /springboot-try/src/main/resources [INFO] [INFO] --- maven-compiler-plugin:3.7.0:compile (default-compile) @ myproject --- [INFO] No sources to compile [INFO] [INFO] --- maven-resources-plugin:3.0.1:testResources (default-testResources) @ myproject --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory /springboot-try/src/test/resources [INFO] [INFO] --- maven-compiler-plugin:3.7.0:testCompile (default-testCompile) @ myproject --- [INFO] No sources to compile [INFO] [INFO] --- maven-surefire-plugin:2.20.1:test (default-test) @ myproject --- [INFO] No tests to run. [INFO] [INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ myproject --- [WARNING] JAR will be empty - no content was marked for inclusion! [INFO] Building jar: /springboot-try/target/myproject-0.0.1-SNAPSHOT.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.297 s [INFO] Finished at: 2018-03-07T23:38:29+08:00 [INFO] Final Memory: 17M/227M [INFO] ------------------------------------------------------------------------ 

** 暂时先忽略 "[WARNING] JAR will be empty - no content was marked for inclusion!" **

2.添加 classpath 依赖

Springboot 提供很多starters 让你能够把需要的jar加入到classpath中,我们现在用的是 spring-boot-starter-parent 在 POM 的parent块,它是一个很特别的starter,同时也提供的一些maven有用的默认设置;同时也提供了dependency-management,所以不需要提供 version的标签了。

当我们需要开发更多需求的应用的时候,可能就会需要其他的starter提供的依赖。因为我们现在弄的是一个简单的web应用,所以我们需要spring-boot-starter-web的依赖,在这个操作之前,我们先来看看。

$ mvn dependency:tree [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building myproject 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-dependency-plugin:3.0.1:tree (default-cli) @ myproject --- [INFO] com.example:myproject:jar:0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.760 s [INFO] Finished at: 2018-03-07T23:49:53+08:00 [INFO] Final Memory: 19M/227M [INFO] ------------------------------------------------------------------------ 

以上的command是打印出项目依赖的,可以看到 spring-boot-starter-parent 暂时是没有依赖的。所以我们需要在pom里面加上我们需要的依赖。

现在目录结构:

. ├── pom.xml └── target     ├── maven-archiver     │   └── pom.properties     └── myproject-0.0.1-SNAPSHOT.jar 

在 parent 块下面加上如下内容:

<dependencies> 	<dependency> 		<groupId>org.springframework.boot</groupId> 		<artifactId>spring-boot-starter-web</artifactId> 	</dependency> </dependencies> 

保存之后,再运行:

$ mvn dependency:tree [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building myproject 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-dependency-plugin:3.0.1:tree (default-cli) @ myproject --- [INFO] com.example:myproject:jar:0.0.1-SNAPSHOT [INFO] \- org.springframework.boot:spring-boot-starter-web:jar:2.0.1.BUILD-SNAPSHOT:compile [INFO]    +- org.springframework.boot:spring-boot-starter:jar:2.0.1.BUILD-SNAPSHOT:compile [INFO]    |  +- org.springframework.boot:spring-boot:jar:2.0.1.BUILD-SNAPSHOT:compile [INFO]    |  +- org.springframework.boot:spring-boot-autoconfigure:jar:2.0.1.BUILD-SNAPSHOT:compile [INFO]    |  +- org.springframework.boot:spring-boot-starter-logging:jar:2.0.1.BUILD-SNAPSHOT:compile [INFO]    |  |  +- ch.qos.logback:logback-classic:jar:1.2.3:compile [INFO]    |  |  |  +- ch.qos.logback:logback-core:jar:1.2.3:compile [INFO]    |  |  |  \- org.slf4j:slf4j-api:jar:1.7.25:compile [INFO]    |  |  +- org.apache.logging.log4j:log4j-to-slf4j:jar:2.10.0:compile [INFO]    |  |  |  \- org.apache.logging.log4j:log4j-api:jar:2.10.0:compile [INFO]    |  |  \- org.slf4j:jul-to-slf4j:jar:1.7.25:compile [INFO]    |  +- javax.annotation:javax.annotation-api:jar:1.3.2:compile [INFO]    |  +- org.springframework:spring-core:jar:5.0.5.BUILD-SNAPSHOT:compile [INFO]    |  |  \- org.springframework:spring-jcl:jar:5.0.5.BUILD-SNAPSHOT:compile [INFO]    |  \- org.yaml:snakeyaml:jar:1.19:runtime [INFO]    +- org.springframework.boot:spring-boot-starter-json:jar:2.0.1.BUILD-SNAPSHOT:compile [INFO]    |  +- com.fasterxml.jackson.core:jackson-databind:jar:2.9.4:compile [INFO]    |  |  +- com.fasterxml.jackson.core:jackson-annotations:jar:2.9.0:compile [INFO]    |  |  \- com.fasterxml.jackson.core:jackson-core:jar:2.9.4:compile [INFO]    |  +- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.9.4:compile [INFO]    |  +- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.9.4:compile [INFO]    |  \- com.fasterxml.jackson.module:jackson-module-parameter-names:jar:2.9.4:compile [INFO]    +- org.springframework.boot:spring-boot-starter-tomcat:jar:2.0.1.BUILD-SNAPSHOT:compile [INFO]    |  +- org.apache.tomcat.embed:tomcat-embed-core:jar:8.5.28:compile [INFO]    |  +- org.apache.tomcat.embed:tomcat-embed-el:jar:8.5.28:compile [INFO]    |  \- org.apache.tomcat.embed:tomcat-embed-websocket:jar:8.5.28:compile [INFO]    +- org.hibernate.validator:hibernate-validator:jar:6.0.7.Final:compile [INFO]    |  +- javax.validation:validation-api:jar:2.0.1.Final:compile [INFO]    |  +- org.jboss.logging:jboss-logging:jar:3.3.2.Final:compile [INFO]    |  \- com.fasterxml:classmate:jar:1.3.4:compile [INFO]    +- org.springframework:spring-web:jar:5.0.5.BUILD-SNAPSHOT:compile [INFO]    |  \- org.springframework:spring-beans:jar:5.0.5.BUILD-SNAPSHOT:compile [INFO]    \- org.springframework:spring-webmvc:jar:5.0.5.BUILD-SNAPSHOT:compile [INFO]       +- org.springframework:spring-aop:jar:5.0.5.BUILD-SNAPSHOT:compile [INFO]       +- org.springframework:spring-context:jar:5.0.5.BUILD-SNAPSHOT:compile [INFO]       \- org.springframework:spring-expression:jar:5.0.5.BUILD-SNAPSHOT:compile [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.087 s [INFO] Finished at: 2018-03-07T23:55:58+08:00 [INFO] Final Memory: 20M/227M [INFO] ------------------------------------------------------------------------ 

这个时候,我们就看到加了好多依赖,包括了 tomcat web server 和 springboot

3.写代码

到这里,pom文件的准备先暂停一下,我们来撸一下代码来测试一波,创建一个Java文件来玩玩,嘻嘻。

Maven会默认的从src/main/java作为源文件的路径来进行构建,所以我们需要创建一个这个文件路径。

$ mkdir -p ./src/main/java # 文件结构如下: . ├── pom.xml ├── src │   └── main │       └── java └── target     ├── maven-archiver     │   └── pom.properties     └── myproject-0.0.1-SNAPSHOT.jar 

新建的java文件内容如下(/src/main/java/Example.java):

import org.springframework.boot.*; import org.springframework.boot.autoconfigure.*; import org.springframework.web.bind.annotation.*;  @RestController @EnableAutoConfiguration public class Example {  	@RequestMapping("/") 	String home() { 		return "Hello World!"; 	}  	public static void main(String[] args) throws Exception { 		SpringApplication.run(Example.class, args); 	}  } 

关于 @RestController、@EnableAutoConfiguration、@RequestMapping暂不说明。保存之后就可以运行了。

$ mvn spring-boot:run # 下载文件和一些处理操作之后   :: Spring Boot ::  (v2.0.1.BUILD-SNAPSHOT)  2018-03-08 00:06:42.448  INFO 3176 --- [           main] Example # 由于某些原因,logo变样了,就不给看了,抱歉。  $ curl http://localhost:8080 Hello World! 

到这里,我们基本就是体验了一波,从pom到运行一个spring 的web应用。还差一步,那就是打包咯。

为了能够打包出来,然后放到任何地方都能运行的jar,需要在做一些改进。我们需要创建一个可执行的jar。 在pom文件的dependencies块下面填入下内容:

<build> 	<plugins> 		<plugin> 			<groupId>org.springframework.boot</groupId> 			<artifactId>spring-boot-maven-plugin</artifactId> 		</plugin> 	</plugins> </build> 

现在的文件结构:

. ├── pom.xml ├── src │   └── main │       └── java │           └── Example.java └── target     ├── classes     │   └── Example.class     ├── generated-sources     │   └── annotations     ├── maven-archiver     │   └── pom.properties     ├── maven-status     │   └── maven-compiler-plugin     │       └── compile     │           └── default-compile     │               ├── createdFiles.lst     │               └── inputFiles.lst     └── myproject-0.0.1-SNAPSHOT.jar 

保存之后,开始打包。

 mvn package [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building myproject 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-resources-plugin:3.0.1:resources (default-resources) @ myproject --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory /Users/wuyingqiang/WYQDir/Springboot/springboot-try/src/main/resources [INFO] skip non existing resourceDirectory /Users/wuyingqiang/WYQDir/Springboot/springboot-try/src/main/resources [INFO] [INFO] --- maven-compiler-plugin:3.7.0:compile (default-compile) @ myproject --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:3.0.1:testResources (default-testResources) @ myproject --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory /Users/wuyingqiang/WYQDir/Springboot/springboot-try/src/test/resources [INFO] [INFO] --- maven-compiler-plugin:3.7.0:testCompile (default-testCompile) @ myproject --- [INFO] No sources to compile [INFO] [INFO] --- maven-surefire-plugin:2.20.1:test (default-test) @ myproject --- [INFO] No tests to run. [INFO] [INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ myproject --- [INFO] Building jar: /Users/wuyingqiang/WYQDir/Springboot/springboot-try/target/myproject-0.0.1-SNAPSHOT.jar [INFO] [INFO] --- spring-boot-maven-plugin:2.0.1.BUILD-SNAPSHOT:repackage (default) @ myproject --- [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.204 s [INFO] Finished at: 2018-03-08T00:16:37+08:00 [INFO] Final Memory: 24M/315M [INFO] ------------------------------------------------------------------------ 

打包完之后的目录结构如下:

. ├── pom.xml ├── src │   └── main │       └── java │           └── Example.java └── target     ├── classes     │   └── Example.class     ├── generated-sources     │   └── annotations     ├── maven-archiver     │   └── pom.properties     ├── maven-status     │   └── maven-compiler-plugin     │       └── compile     │           └── default-compile     │               ├── createdFiles.lst     │               └── inputFiles.lst     ├── myproject-0.0.1-SNAPSHOT.jar     └── myproject-0.0.1-SNAPSHOT.jar.original 

myproject-0.0.1-SNAPSHOT.jar.original 是 maven在springboot打包之前的源文件。

在这里,我们简单的走了一下入门的流程了。那先这样,后面继续更新。。。

4.参考来源

Spring Boot Reference Guide

本文发表于2018年03月08日 22:45
(c)注:本文转载自https://my.oschina.net/coderWyq/blog/1631372,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 1652 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1