11.开发第一个Spring Boot应用

        这部分介绍了如何开发一个简单的“Hello World!”web应用,并且着重描述了一些Spring boot的关键功能。因为大部分的IDE工具都支持Maven,所以用Maven构建这个项目。

11.1 创建POM文件

我们需要从创建Maven的pom.xml文件开始,pom.xml是项目的灵魂。打开任意编辑器开始编写pom文件:

<?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 https://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.1.5.RELEASE</version>
 </parent>

 <!-- Additional lines to be added here... -->

</project>

        上面的代码提供了一个基础的构架,现在可以用mvn package进行测试(忽略掉“jar will be empty - no content was marked for inclusion!”的警告)。

        提示:此处可以用IDE工具创建工程,为了方便起见,下面还是使用基础的文本工具编写案例。

11.2 添加类的依赖

        Spring Boot提供了一些简单的“starter”方便添加jar依赖。我们之前已经将spring-boot-starter-parent添加进了POM父类依赖部分,它是一个特殊的依赖,提供了一些默认的Maven设置,以及默认的版本,这样可以省略下边一些依赖的版本设置,更方便了版本的控制。

        其他的“starter”在开发时根据需要进行依赖的添加。因为这是个web应用,所以需要添加spring-boot-starter-web依赖。我们先看下目前Maven的依赖树。

$ mvn dependency:tree

[INFO] com.example:myproject:jar:0.0.1-SNAPSHOT

        mvn dependency:tree命令是用来查看当前项目的依赖树结构,我们可以看到spring-boot-starter-parent本身没有依赖关系。在pom.xml文件中父类部分下面添加需要的web依赖(spring-boot-starter-web);

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

        这时再次运行mvn dependency:tree,可以看到包含tomcat等一系列的依赖已经添加上了。

11.3 开始撸代码

        先创建一个简单的java文件,Maven会默认从src/main/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) {
		SpringApplication.run(Example.class, args);
	}
}

        虽然代码不多,不过Spring boot已经做了很多工作,下面的部分将会着重介绍一些重要的部分。

注释@RestController @RequestMapping

        例子中第一个注释是@RestController@RestController注解相当于@ResponseBody@Controller合在一起的作用,提示Spring这是一个特殊的类。

        @RequestMapping注释起到路由的功能,告诉Spring任何带“/”的HTTP请求都应该由@Method home 来处理,@RestController则是告诉Spring结果应该以字符串的形式响应给用户。 

        提示:这两个注释是SpringMVC的注释,可以在Spring的官方文档的MVC部分获取更多的细节。

注释@EnableAutoConfiguration

        第二个类级别的注释@EnableAutoConfiguration是用来Spring Boot如何根据已添加的Maven依赖来配置Spring。因为spring-boot-starter-web添加了tomcat和SpringMVC,所以自动配置认为这是一个Web应用,并进行相关的设置。

主方法Main

        最后的主方法部分,只是一个依据Java规范规定的程序的入口。主方法通过调用SpringApplication类的run. SpringApplication方法来启动应用程序,Spirng将根据自动配置来启动tomcat容器。

11.4 运行例子程序

        此时,因为用到了spring-boot-starter-parent,所以我们有一个明确的启动目标去启动应用。在项目的根目录下,运行mvn spring-boot:run代码来启动程序,我们可以看到控制台有下面的输出:

$ mvn spring-boot:run

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v2.1.5.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.222 seconds (JVM running for 6.514)

        如果你打开浏览器访问http://localhost:8080,你可以看到下面的输出:

Hello World!

        按Ctrl+C退出程序。

11.5 创建一个可执行的jar包

        最后生成一个可执行的jar包,让我们的程序可以在生产环境中运行。这个可执行的jar包包含了编译后的class文件以及所有依赖的jar包。

JAVA与可执行jar包

        java并没有一个标准的方法执行嵌套jar包(jar包里包含jar包),如果你想执行一个嵌套的jar包可能会有问题。为了解决这个问题,许多开发者会使用"Uber-jar"(超级jar包),uber-jar是将所有的class文件(包含所有依赖的jar包)打包进一个单独的文件。这种解决方案的一个问题就是很难看到应用的库,并且当uber-jar中包含相同名字的文件名(不同内容)时也会出现问题。Spring Boot提供了另一种解决方案来使用嵌套jar包。

想创建一个可执行的jar包,需要在pom.xml文件里添加spring-boot-maven-plugin依赖项,添加的位置在dependencies下面:

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

        注意:spring-boot-starter-parent依赖项包含了<executions>配置项,从而绑定打包的信息。如果没有使用parent依赖项,则需要自行声明配置,具体看https://docs.spring.io/spring-boot/docs/2.1.5.RELEASE/maven-plugin/usage.html

        保存pom文件,然后在控制台执行mvn package命令,如下:

$ mvn package

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building myproject 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] .... ..
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ myproject ---
[INFO] Building jar: /Users/developer/example/spring-boot-example/target/myproject-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:2.1.5.RELEASE:repackage (default) @ myproject ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

        在target文件夹内,会看到myproject-0.0.1-SNAPSHOT.jar文件,这个文件大小在10MB左右,如果你想看里面的内容,可以使用jar tvf命令:

$ jar tvf target/myproject-0.0.1-SNAPSHOT.jar

        同时在target文件夹内,还会发现一个myproject-0.0.1-SNAPSHOT.jar.original文件,这个文件是在SpringBoot重打包前Maven创建的原型文件。

        使用java -jar命令来启动程序,结果如下:

$ java -jar target/myproject-0.0.1-SNAPSHOT.jar

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v2.1.5.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.536 seconds (JVM running for 2.864)

        和上面一样,使用Ctrl+C结束程序。

 

总目录:总纲 Spring Boot官方文档(2.1.5版翻译)

下一篇:13.构建系统 Spring

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值