第一个Spring Boot程序

Windows 10家庭中文版,java version "1.8.0_152",

Eclipse Oxygen.1a Release (4.7.1a),Spring Tools 3 Add-On 3.9.5 (aka Spring Tool Suite 3) RELEASE

参考链接:

用Spring Boot颠覆Java应用开发(https://www.cnblogs.com/aishangJava/p/5971288.html),posted on 2016-10-17 21:12 工程师搁浅

说明,本文没有啥技术含量,只是方便自己第一时间认识Spring Boot的开发方式。

使用Eclipse+STS开发了第一个Spring Boot项目,主要步骤如下:

1.使用STS建立一个需要Web项目;

2.编写类HelloWorldRestController并提供两个链接;

全程花费一两分钟,很easy,和之前自己开发Flask应用(Web)一样Easy。

详细步骤如下:

-新建Spring Starter Project

安装STS后才有的选项。

-自己的项目信息。默认是Maven项目,可以选Gradle——俺没用过。

-我的目的是开发Web项目,因此,这里选择web,其实,有很多选择,看自己项目的需要。

-下面的看不太懂,就这样吧。

-点击Finish按钮,开始建立工程,可是,需要等待一段时间,Eclipse或STS有一些工作需要准备。可以看Eclipse右下角进度条,双击后可以看到更多信息。

-项目建立成功,结果如下图。其中,src/main/java下存在一个Demo2Application.java文件,本工程中 不需要修改。

-查看pom.xml文件,已经依赖了 spring-boot-starter-web。

-按照参考链接的代码,编写我们的Controller,如下。

建立一个HelloWorldRestController类,建立两个函数,添加相应的标记即可。

-代码写完了,运行项目,如下图所示。

-调试信息显示embedded.tomcat已经在8080端口启动了——占用了的话会报错 和 提供解决方案。

-手动测试

-正常

-正常,因为没有设置这个链接

-正常

 --------更进一步--------

下面,介绍属性文件的使用,以更改 嵌入式Web服务器的默认端口为例:8080 改为 8081

在工程的/src/main/resources包下添加application.properties文件(还没仔细看官文,但添加在这里是对的,之前的尝试是添加到/src/main/java下,但不起作用)。

在文件中添加下面这句:

server.port = 8081

然后,重启Spring Boot应用,启动后发现,嵌入式Web服务器的端口已经更改为 8081 了。

main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8081 (http) with context path ''

测试:

那么,为何我知道这里更改端口的属性是 server.port呢?因为我参考了下面的链接:

Spring Boot的附录:附录A. 常见应用属性(https://www.breakyizhan.com/springboot/3489.html)

--------更进一步--------

Spring Boot中内嵌了3中Web服务器,默认是Tomcat,还有Jetty、Undertow。

3个嵌入式Web服务器怎么选?我也不知道,需要dig。

这里我介绍使用Jetty而不是Tomcat。

参考链接:

https://www.breakyizhan.com/springboot/3473.html (其中的 75.11 使用Jetty替代Tomcat)

按照参考链接中的pom.xml修改后,运行Spring Boot应用,可是,很久程序都没有跑起来。打开Console发现下图:

等待一段时间后,出现下面的信息:没有发现端口 8081 的字样,启动失败。

查看Problems发现存在两个错误:

第一个错误详情如下:

Could not transfer artifact javax.websocket:javax.websocket-api:jar:1.0 from/to nexus-aliyun 
(http://maven.aliyun.com/nexus/content/groups/public): D:wsapache-maven-3.5.4 epositoryjavaxwebsocketjavax.websocket-api
1.0aether-f185bc1c-81b0-4388-8ee5-2bfcf6448fda-javax.websocket-api-1.0.jar-in-progress (系统找不到指定的文件。) org.eclipse.aether.transfer.ArtifactTransferException: Could not transfer artifact javax.websocket:javax.websocket-api:jar:1.0
from/to nexus-aliyun (http://maven.aliyun.com/nexus/content/groups/public): D:wsapache-maven-3.5.4 epositoryjavaxwebsocket
javax.websocket-api1.0aether-f185bc1c-81b0-4388-8ee5-2bfcf6448fda-javax.websocket-api-1.0.jar-in-progress (系统找不到指定的文件。)

什么意思呢?Could not transfer...

检查目录中的文件:

文件中有连个*-in-process文件,可是,和错误提示中说的不一致。

为什么会这样呢?

只有求助网友中的先行者了。

网络上没有找到类似解答,然后,想起了在项目上执行 Maven->Update Prject ,那么,试试吧!

1.删除Maven仓库下的websocket目录——需要先关掉Eclipse;

2.重启Eclipse,启动后,pom.xml文件中的问题还是存在;

3.检查新的websocket目录,已经建立,并且在目录websocketjavax.websocket-api1.0没有以 -in-process 结尾的文件了。

4.在项目上执行Maven-Update Project,执行成功,pom.xml文件中的报错消失了。

5.执行项目,输出如下——看起来是没有达到预期要求的,Jetty嵌入式服务器没有运行起来?

  .   ____          _            __ _ _
 /\ / ___'_ __ _ _(_)_ __  __ _    
( ( )\___ | '_ | '_| | '_ / _` |    
 \/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.0.6.RELEASE)

2018-11-04 12:58:36.491  INFO 12360 --- [           main] com.example.demo.Demo2Application        : 
Starting Demo2Application on DESKTOP-F6FLB0T with PID 12360 (D:eclipseworkspacedemo-2	argetclasses 
started by log in D:eclipseworkspacedemo-2)
2018-11-04 12:58:36.494  INFO 12360 --- [           main] com.example.demo.Demo2Application        : 
No active profile set, falling back to default profiles: default
2018-11-04 12:58:36.530  INFO 12360 --- [           main] s.c.a.AnnotationConfigApplicationContext : 
Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@6646153: startup 
date [Sun Nov 04 12:58:36 CST 2018]; root of context hierarchy
2018-11-04 12:58:37.233  INFO 12360 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : 
Registering beans for JMX exposure on startup
2018-11-04 12:58:37.249  INFO 12360 --- [           main] com.example.demo.Demo2Application        : 
Started Demo2Application in 0.974 seconds (JVM running for 1.701)
2018-11-04 12:58:37.252  INFO 12360 --- [       Thread-2] s.c.a.AnnotationConfigApplicationContext : 
Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@6646153: startup date 
[Sun Nov 04 12:58:36 CST 2018]; root of context hierarchy
2018-11-04 12:58:37.255  INFO 12360 --- [       Thread-2] o.s.j.e.a.AnnotationMBeanExporter        : 
Unregistering JMX-exposed beans on shutdown

不明白、不明白,到底Jetty有没有运行起来呢?

下面的参考链接中,也是和我一样配置的pom.xml啊,可为何TA的启动了,而我的却没有呢?

https://blog.csdn.net/github_35169934/article/details/78573971

看了几篇博文,都是这么做的啊,修改下pom.xml即可,可到我这里居然就不行了!我要怨谁呢?哎

对比了两份pom.xml文件,发现使用的spring boot版本不一样:上面链接中的是1.5.8,而我现在用的是2.0.6。

为什么啊?

下面的 链接中的代码 居然在我的project中不能运行:

https://blog.csdn.net/Revivedsun/article/details/78217760

找不到其中的 JettyEmbeddedServletContainerFactory,真是奇怪!

13:33 怎么办呢?暂时到这里,等会儿继续,,本来一个很简单的问题,为何又要浪费俺这么多精时啊!欢迎大家不吝赐教!

1418 问题解决了,和Maven仓库有关系。

重新建立了一个Maven仓库——空文件夹,然后,重启Eclipse,再执行Maven -> Update Project,再执行程序,成功运行了。

真实扯啊!浪费好多时间!要赶快试试Gradle,或许没有这个问题呢?或许也有,

更多参考链接:

1.官文 Spring Boot Reference Guide(https://docs.spring.io/spring-boot/docs/2.0.6.RELEASE/reference/htmlsingle/)

里面有更详细信息。

后记

刚刚开始,继续在这个项目上折腾吧!添加更多的功能,访问SQL、NOSQL数据库,使用缓存、使用消息队列、其它。

就是Maven用起来有些扯!一不小心就几个小时没了,还浪费流量——新的空白Maven仓库有32MB存储了。

https://docs.spring.io/spring-boot/docs/2.0.6.RELEASE/reference/htmlsingle/

原文地址:https://www.cnblogs.com/luo630/p/9903702.html