Springboot初体验

从 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

转载于:https://my.oschina.net/coderWyq/blog/1631372

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值