《Spring Boot官方指南》(二)入门(二)

    xiaoxiao2023-12-27  164

    3.2.5 命令行补全工具

    Spring Boot CLI附带了一些脚本,这些脚本为BASH 和zsh提供了命令行补全功能。在任何shell里面都可以source到这些脚本(也叫spring),也可以初始化到个人或者系统级别的命令行工具里面。在Debian系统里面,系统级别的脚本在这个路径:/shell-completion/bash,shell程序启动以后,这里面的所有脚本都可以执行。例如,您已经使用SDKMAN!安装了这些脚本,为了手动执行他们,可以这样操作:

    $ . ~/.sdkman/candidates/springboot/current/shell-completion/bash/spring $ spring <HIT TAB HERE> grab help jar run test version Note如果您使用Homebrew或者MacPorts安装了Spring Boot CLI,这些命令行补全脚本已经自动注入到了您的shell程序里面。

    3.2.6 快速开始Spring CLI实例

    这是一个极其简单的Web应用程序,可以用来验证您的安装是否正确。新建一个文件,文件名是app.groovy:

    @RestController class ThisWillActuallyRun { @RequestMapping("/") String home() { "Hello World!" } }

    然后简单运行一下这个命令:

    $ spring run app.groovy Note第一次运行这个应用程序,要下载一些依赖项目,将会耗费一些时间。以后再运行的话就会快很多了。

    打开您的浏览器访问localhost:8080,应该可以得到下面的内容:

    Hello World!

    3.3 升级旧版本的Spring Boot

    如果想要从旧版本的Spring Boot升级,检查一下存放在这里project wiki 的 “release notes”。您可以找到升级信息与每个版本的“新的和值得关注的”功能列表以及说明。

    使用相关的包管理工具升级您已经使用命令行安装过的早期版本(比如,brew upgrade),另外,如果您是手动安装的CLI,阅读这个标准说明,同时记得更新环境变量PATH的值,以便移除旧版本的引用。

    4. 开发第一个Spring Boot应用程序

    用Java语言开发一个简单的Web应用程序“Hello World!”,我们将会特别提到一些Spring Boot关键特性。就用Maven来构建这个项目,因为很多IDE都支持Maven。

    Tip这个网站spring.io有很多使用了Spring Boot的 “入门”级别教程。如果需要解决个别的问题,可以先去这个网站找找看。可以简化下面的开发步骤。访问网站start.spring.io,在依赖搜索里面选择web启动。这样就可以自动生成一个新的项目框架,以便您以恰当的方式开始编写您的代码。更多有关的细节,可以查看文档。

    在我们开始之前,打开终端确认您已经安装了恰当Java和Maven版本。

    $ java -version java version "1.7.0_51" Java(TM) SE Runtime Environment (build 1.7.0_51-b13) Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode) $ mvn -v Apache Maven 3.2.3 (33f8c3e1027c3ddde99d3cdebad2656a31e8fdf4; 2014-08-11T13:58:10-07:00) Maven home: /Users/user/tools/apache-maven-3.1.1 Java version: 1.7.0_51, vendor: Oracle Corporation Note这个实例创建在自己的目录中。接下来内容假定您已经创建好了恰当的目录,这个目录叫“当前目录”。

    4.1 创建POM

    我们从创建一个Mavenpom.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>1.4.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>http://repo.spring.io/snapshot</url> <snapshots><enabled>true</enabled></snapshots> </repository> <repository> <id>spring-milestones</id> <url>http://repo.spring.io/milestone</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-snapshots</id> <url>http://repo.spring.io/snapshot</url> </pluginRepository> <pluginRepository> <id>spring-milestones</id> <url>http://repo.spring.io/milestone</url> </pluginRepository> </pluginRepositories> </project>

    像这样,应该可以进行构建工作了,运行一下命令mvn package看看输出信息(现在暂时忽略这个警告信息“jar will be empty – no content was marked for inclusion!”)。

    Note现在您也可以把这个项目导入进入一个IDE了(大多数的现代JAVA IDE内置了Maven)。为了方便,我们继续使用纯文本编辑器来开发这个例子。

    4.2 添加classpath依赖

    Spring Boot提供了一些“Starters”,让您方便把jar文件添加到您的classpath。我们的实例已经在POM文件的parent部分添加了spring-boot-starter-parent。spring-boot-starter-parent是一个添加了一些默认Maven配置的特殊的starter。也添加了dependency-management部分,这个部分可以让您省掉某些依赖项的version标签。

    其他的 “Starters”添加了在您开发其他特定类型应用程序的时候,您很可能需要添加的一些依赖项。我们目前正在开发Web应用,我们需要添加依赖项spring-boot-starter-web,不过我们先通过下面的方式看看目前的情况。

    $ mvn dependency:tree [INFO] com.example:myproject:jar:0.0.1-SNAPSHOT

    mvn dependency:tree命令输出了项目依赖项的树状示意图。您会发现spring-boot-starter-parent本身并没有引入任何依赖。编辑pom.xml文件, 把spring-boot-starter-web依赖添加到parent部分的下面:

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

    再次运行一下mvn dependency:tree,您可以发现现在增加了一些依赖项,包括Tomcat Web服务器和Spring Boot。

    4.3 编写代码

    需要编写一个简单的Java文件来完成我们的应用程序。Maven默认在src/main/java这个目录下编译源文件,所以您创建好目录,然后新建一个源文件src/main/java/Example.java:

    import org.springframework.boot.*; import org.springframework.boot.autoconfigure.*; import org.springframework.stereotype.*; 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); } }

    虽然代码量不多,不多其实内容很丰富。我们逐步理解一下关键步骤。

    4.3.1 @RestController和@RequestMapping注解

    Example类的第一个注解是@RestController。这叫做构造型注解。它提示我们,对Spring来说,这个类扮演了特殊的角色,现在,这个类是一个Web控制器,Spring将会使用它来处理Web请求。

    @RequestMapping注解展示了 “routing”信息。它告知Spring路径为“/”的HTTP请求都会映射到home方法。@RestController告知Spring直接将结果字符串返回给请求方。

    Tip @RestController与@RequestMapping注解属于 Spring MVC(它们不属于Spring Boot).更多资料,可以查看Spring参考文档的MVC 部分。

    4.3.2 @EnableAutoConfiguration注解

    第二个类级别的注解是@EnableAutoConfiguration。 这个注解告知Spring Boot自己 “判断”您是如何配置Spring的,这基于您添加的依赖项。因为依赖项spring-boot-starter-web添加了Tomcat和Spring MVC,所以@EnableAutoConfiguration注解会判断您是在开发Web应用程序并且引入了Spring。

    Starters and Auto-Configuration

    Auto-configuration是为了和“Starters”一起良好工作而设计的,但是这两个部分并没有耦合在一起。您在starters的约束之外自由挑选jar依赖,而Spring Boot将会尽可能的自配置以适应您的应用程序。

    4.3.3 “main”方法

    应用程序的最后一部分是main方法。这只是Java规范的一个标准的应用程序入口方法。我们的main方法委托了SpringApplication类去调用run方法完成这个功能。SpringApplication会启动我们的应用程序,启动Spring去开启自配置的Tomcat Web服务器。我们需要把Example.class作为参数传送到run方法,告知SpringApplication这是一个主要是的Spring组件。args字符串数组也传入了,以处理命令行提供的参数。

    4.4 运行这个例子

    现在我们的程序应该可以工作了。因为我们在POM文件里面使用了spring-boot-starter-parent,所以我们可以使用run指令来启动应用程序了。在项目根目录输入mvn spring-boot:run启动应用程序:

    $ mvn spring-boot:run . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.4.1.BUILD-SNAPSHOT) ....... . . . ....... . . . (log output here) ....... . . . ........ Started Example in 2.222 seconds (JVM running for 6.514)

    打开浏览器访问localhost:8080,您应该可以看到输出了下面的内容:

    Hello World!

    敲击ctrl-c就能退出程序了。

    4.5 创建可执行jar文件

    就像生产一个真正的软件产品,我们创建一个完整自足的可执行jar文件,把我们的第一个实例完成。可执行的jar文件(有时候我们也叫“富jar文件”)是一个归档文件,包含了编译好的类文件与我们运行程序所需要的所有jar依赖项。

    可执行jar文件与Java

    Java并没有提供任何加载内嵌jar文件的标准方法(也就是jar文件还包含jar文件)。所以,如果您想发布一个完整的应用程序,将会很困难。

    为了解决这个问题,许多开发者使用“uber” jars。 一个uber jar文件把所有的类,包括第三方jar包的类,都归档到一个文件。这也带来了问题,这将难以辨认哪些库是您的应用程序真正采用的。还有,如果多个jar文件里面采用了相同的文件名(但是内容不同),也会引起问题。

    Spring Boot采用了一种不同的方式来让您直接加载内嵌的jar包。

    为了创建可执行jar文件,我们把spring-boot-maven-plugin添加到pom.xml。把下面的代码添加到dependencies部分下面:

    <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> Note spring-boot-starter-parentPOM包含绑定到repackage目标的<executions>配置。如果不使用parentPOM,你需要自己声明该配置,具体参考插件文档。

    保存pom.xml,并从命令行运行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:1.4.1.BUILD-SNAPSHOT: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

    在该目录下,你应该还能看到一个很小的名为myproject-0.0.1-SNAPSHOT.jar.original的文件, 这是在Spring Boot重新打包前,Maven创建的原始jar文件。

    使用java -jar命令运行该程序:

    $ java -jar target/myproject-0.0.1-SNAPSHOT.jar . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.4.1.BUILD-SNAPSHOT) ....... . . . ....... . . . (log output here) ....... . . . ........ Started Example in 2.536 seconds (JVM running for 2.864)

    正如刚才一样,敲击ctrl-c退出应用。

    5. 接下来阅读什么

    希望本章的内容已经让您理解了部分Spring Boot的基础知识,并且掌握了以您的方式开发应用程序的方法。如果您面向任务的类型的开发人员,您可能想要直接跳到spring.io,查阅一些解决“怎样和Spring一起工作”这个问题的入门教程。我们也有一些Spring Boot定制的怎么做的参看文档。

    Spring Boot仓库也可以运行的一些例子。这些例子和其他代码无关的(也就是说您不需要构建其他的代码就能运行或者使用这些例子)。

    另外,按照顺序,接下来的内容是Part III, “Using Spring Boot”.。如果您真的缺乏耐心,可以继续往前,阅读Spring Boot特性

     转载自 并发编程网 - ifeve.com

    最新回复(0)