前言
学习一个新技术,先别管他的原理啊,流程啊,怎么组织代码啊什么的。直接从官网或者博客抄一个小demo,自己亲自跑一遍,然后再去看那一堆让人头皮发麻的讲解,就能相对容易的看懂了。
目前网上有不少spring boot的入门文章,都很有帮助,本人最近在深入学习spring cloud,在搭建第一个hello world程序时,感觉对于新手而言,介绍文章怎么详细都不为过,因为其中坑不少,所以这里就把第一次实践的步骤贴出来,以求和大家一起进步。
1、maven是什么?能带来什么帮助?
我们在用eclipse开发项目时,一定会引入支持特定功能的jar包,比如从下图里,我们能看到这个项目需要引入支持mysql的jar包。
从上图里我们能看到,支持mysql的jar包是放在本地路径里,这样如果在本地运行自然是没问题了。但如果我们要把这个项目发布到服务器上,就会有问题了,因为在这个项目的.classpath文件,已经指定mysql的jar包在本地d盘下的某个路径,如下图所示。
一旦发布到服务器上,项目依然会根据.classpath的配置,从d盘下这个路径去找,事实上服务器上是不可能有这样的路径和jar包的。
我们也可以通过在.classpath里指定相对路径来解决这个问题,在下面的代码里,我们可以指定本项目将引入“本项目路径/webroot/lib“目录里的jar包。
1
|
<classpathentry kind= "lib" path= "webroot/lib/jar包名.jar" /> |
这样做,发布到服务器时,由于会把整个项目路径里的文件都上传,所以不会出错。但这样依然会给我们带来不便。比如这个服务器上我们部署了5个项目,它们都会用到这个mysql支持包,这样我们就不得不把这个jar包上传5次,再扩展一下,如果5个项目里会用到20个相同的jar包,那么我们还真就不得不做多次复制。如果我们要升级其中的一个jar包,那么还真就得做很多重复的复制粘贴动作。
期望中的工作模式应该是,应该有个“仓库“同一放置所有的jar包,在开发项目时,可以通过配置文件引入必要的包,而不是把包复制到本项目里。这就是maven的做法。
用通俗的话来讲,maven是套eclipse的插件,它的核心价值是能理顺项目间的依赖关系,具体来讲,能通过其中的pom.xml配置文件来统一管理本项目所要用到的jar包,在项目里引入maven插件后,开发者就不必手动添加jar包了,这样也能避免因此来带来的一系列问题。
2、通过maven开发spring boot的helloworld程序
第一步,创建maven项目。本书使用myeclipse作为开发环境,在其中已经引入了maven插件,所以我们可以通过“file”->”new”菜单,如下图所示,直接创建maven项目。
在上图里,点击“next”按钮后,会见到如下图所示的界面,在其中我们可以设置group id等属性。
其中,group id代表公司名,这里设置成“com.springboot”,而artifact id则是项目名,version和packag采用默认值。完成设置后,能看到新建的项目myfirstspringboot
第二步,改写pom.xml。当我们创建好maven项目后,能看到pom.xml文件。在maven项目里,一般是通过pom.xml来指定本项目的基本信息以及需要引入的jar包,这里的关键代码如下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<groupid>com.springboot</groupid> <artifactid>myfirstspringboot</artifactid> <version> 0.0 . 1 -snapshot</version> <packaging>jar</packaging> <name>myfirstspringboot</name> <url>http: //maven.apache.org</url> <dependencies> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> <version> 1.5 . 4 .release</version> </dependency> <dependency> <groupid>junit</groupid> <artifactid>junit</artifactid> <version> 3.8 . 1 </version> <scope>test</scope> </dependency> </dependencies> |
其中,第1到第4行的代码是自动生成的,用来指定本项目的基本信息,这和我们在之前创建maven项目时所填的信息是一致的。
从第7到第19行的dependencies属性里,我们可以指定本项目所用到的jar包,这里在第8和第13行分别通过两个dependency来指定该引入两类jar包。其中从第8到12行,指定了需要引入用以开发spring boot项目的名为spring-boot-starter-web的jar的集合,而在第13到18行,指定了需要引入用以单元测试的junit包。
从中上述代码里,我们能见到通过maven管理项目依赖文件的一般方式,比如在下面的代码片段里,是通过第2到第4行的代码,说明需要引入org.springframework.boot这个公司组织(发布spring boot jar包的组织)发布的名为spring-boot-starter-web的一套支持spring boot的jar包,而且通过第4行指定了引入包的版本号是1.5.4.release。
这样一来,在本项目里,我们就无需在本地在手动地添加jar包,这些包事实上是在远端的仓库里,我们这个项目是通过pom.xml的配置,来指定需要引入这些包。
第三步,改写app.java。
在创建maven项目时,我们指定的package是com.springboot.myfirstspringboot,在其中会有个app.java,我们把这个文件改写成如下的样式。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
package com.springboot.myfirstspringboot; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.restcontroller; @restcontroller @springbootapplication public class app { @requestmapping ( "/helloworld" ) public string sayhello() { return "hello world!" ; } public static void main(string[] args) { springapplication.run(app. class , args); } } |
由于是第一次使用maven,我们在这里再强调一次,虽然我们没有在项目里手动地引入jar,但由于在pom.xml里指定了待引入的依赖包,具体而言需要依赖org.springframework.boot组织所提供的spring-boot-starter-web,所以在代码的第2到第5行里,我们可以通过import语句,使用spring-boot-starter-web(也就是spring boot)的类库。
在第8行里,我们引入了@springbootapplication注解,以此声明该类是个spring boot的应用。在第10到第13行里,我们通过@requestmapping,指定了用于处理/helloworld请求的sayhello方法,在第14行的main函数里,我们通过第15行的代码启动了web服务。
至此我们完成了代码编写工作。启动myfirstspringboot项目里的app.java,在浏览器里输入http://localhost:8080/helloworld。由于/helloworld请求能被第11到13行的sayhello方法的@requestmapping对应上,所以会通过sayhello方法输出hello world!的内容,如下图所示。
从这个程序里我们能体会到开发spring boot和传统spring程序的不同。
第一,在之前的spring mvc框架里,我们不得不在web.xml定义采用spring的监听器,而且为了采用@controller控制器类,我们还得加上一大堆配置,但在spring boot里,我们只需要添加一个@springbootapplication注解。
第二,我们往往需要把传统的spring mvc项目发布到诸如tomcat的web服务器上,启动web服务器后我们才能在浏览器里输入请求查看运行的效果,这里我们只需启动app.java这个类即可达到类似的效果,就可以省去部署到web服务器上的步骤。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。
原文链接:http://www.cnblogs.com/JavaArchitect/p/8468934.html