第一个Spring Boot程序

时间:2024-01-16 21:23:08

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后才有的选项。

第一个Spring Boot程序

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

第一个Spring Boot程序

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

第一个Spring Boot程序

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

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

第一个Spring Boot程序

第一个Spring Boot程序

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

第一个Spring Boot程序

第一个Spring Boot程序

第一个Spring Boot程序

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

第一个Spring Boot程序

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

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

第一个Spring Boot程序

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

第一个Spring Boot程序

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

第一个Spring Boot程序

-手动测试

-正常

第一个Spring Boot程序

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

第一个Spring Boot程序

-正常

第一个Spring Boot程序

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

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

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

第一个Spring Boot程序

在文件中添加下面这句:

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 ''

测试:

第一个Spring Boot程序

那么,为何我知道这里更改端口的属性是 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发现下图:

第一个Spring Boot程序

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

第一个Spring Boot程序

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

第一个Spring Boot程序

第一个错误详情如下:

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:\ws\apache-maven-3.5.4\repository\javax\websocket\javax.websocket-api
\1.0\aether-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:\ws\apache-maven-3.5.4\repository\javax\websocket\
javax.websocket-api\1.0\aether-f185bc1c-81b0-4388-8ee5-2bfcf6448fda-javax.websocket-api-1.0.jar-in-progress (系统找不到指定的文件。)

第一个Spring Boot程序

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

检查目录中的文件:

第一个Spring Boot程序

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

为什么会这样呢?

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

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

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

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

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

第一个Spring Boot程序

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

第一个Spring Boot程序

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:\eclipse\workspace\demo-2\target\classes
started by log in D:\eclipse\workspace\demo-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。

第一个Spring Boot程序

为什么啊?

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

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

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

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

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

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

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

第一个Spring Boot程序

更多参考链接:

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/