如下内容,若有问题,烦请指出,谢谢html
springboot出来也好久了,之前零散地学习了很多,不过很长时间了都没有在实际中使用过了,忘了很多,所以要最近准备抽时间系统的学习积累下springboot,给本身留个根。java
由于之前学过一些,这里就主要根据官方文档来学习了,可能会根据本身的理解来选择一些知识点的学习顺序。官方文档地址:https://docs.spring.io/spring-boot/docs/1.5.8.RELEASE/reference/htmlsingle/git
官方文档有十个大章节,第一章是综述,就不用太细看了,这里直接从第二章开始,也是介绍hello world的地方。
一开始就介绍了spring的四个目标:github
系统要求就是jdk1.7/servlet3.0及以上,1.6版本如何使用能够看很文档后面的说明。官方内嵌支持三种servlet容器,最多见的tomcat,而后是jetty以及undertow(jboss默认的),tomcat是默认的,如何servlet容器替换后面会有内容讲解。web
第10小章是讲解如何生成springboot的基础项目,这个是给缺乏基础的初学者看的,能够不用太关注,若是想生成,能够直接用https://start.spring.io/ 这个。spring
11小章开始正篇。
基础的helloworld很简单,先配置maven文件,强烈建议使用springboot提供的parent,不要本身一个个去单独依赖,这个parent自己写的比较好,能够做为不少项目的参考。若是你有必定的基础,能够不照着官方的started文档的代码来写,自己这段代码也比较少比较简单。这里我构造的项目结果以下,由于后续就主要用这个项目来学习springboot,所以就取名main,包名也尽可能作到规范
数据库
具体代码以下
pom.xmlapache
<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>pr.study.springboot</groupId> <artifactId>main</artifactId> <version>1.0.0</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.8.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
Main,java浏览器
package pr.study.springboot; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Main { public static void main(String[] args) { SpringApplication.run(Main.class, args); } }
HelloWorldController.classtomcat
package pr.study.springboot.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloWorldController { @RequestMapping("/hello") public String hello() { return "hello world"; } }
几点说明:
一、由于springboot-parent中的dependencies是使用dependencyManagement的形式,这种形式的依赖不会强制继承,必须在子pom中显式声明才会继承,可是不用声明版本,声明了版本会提示一个warning。
二、继承spring-boot-maven-plugin是为了利用springboot的fat-jar打包功能,和dependency同样,也是使用Management的形式,须要显式声明才会依赖。
三、Main.class咱们编写的代码的启动入口类,使用spring-boot-maven-plugin打包成jar并用java -jar启动时,这个类并非真正应用程序入口类Main-Class。
四、官方的代码中controller和main函数写在一个类中,所以能够不须要SpringBootApplication这个注解,写在不一样的类中就须要这个注解,不然扫描不到controller。经过源码能够知道@SpringBootApplication = @SpringBootConfiguration + @EnableAutoConfiguration + @ComponentScan,它具备ComponentScan的做用,所以不须要像spring程序那样显式指定包扫描.
五、@EnableAutoConfiguration,这个注解后面表明的一系列功能是springboot的核心之一,自动配置,这个注解解决了不少配置问题。他的基本原理就是经过你的maven依赖来猜出你须要注入那些bean,它会帮你启动相关配置并注入这个bean。这里咱们依赖了spring-boot-starter-web,它就会帮咱们开启springmvc相关的配置并自动注入相关的必须的bean。由于会自动配置并注入,因此springboot程序的依赖管理很重要没用的依赖尽可能都去掉,特别是那些数据库相关的依赖。关于springboot的自动配置,这个是重点之一,后面细说。
六、@RestController = @Controller + @@ResponseBody,也是一个复合注解,减小代码量,相似的还有@GetMapping、@PostMapping等等。
上面这六点,1-3能够经过maven相关的知识更进一步了解,具体就是maven依赖管理以及maven打包,本人没有系统的学习,知识简单了解,因此这里就不细说了。4-6在后续的springboot学习中会慢慢学习到。
运行程序能够直接在Main上运行java application做为普通java程序运行,这时候Main中的main函数就是真正的启动函数。这里是使用嵌入式tomcat做为servlet容器来运行servlet程序,因此并不须要咱们部署到tomcat。
红色标记的就是已经扫描到了并初始化成功了HelloWorldController。
打开浏览器请求 http://localhost:8080/hello 能够看到运行结果
若是运行出现这种问题
The Bean Validation API is on the classpath but no implementation could be found
那么请删除下springboot相关的本地jar包,有时候jar包下载会抽风。自己springmvc里面是依赖有hibernate-validator做为参数校验的(@Valid @Validated使用),是不该该出现这个问题的。
若是你想打包部署,由于引用了spring-boot-maven-plugin,因此直接运行 mvn clean package就能够打包,最后打包的target是一个fat-jar,也就是包含了全部依赖的可运行jar包。
打包好后,在路径下命令行输入 java -jar main-1.0.0.jar 就能够启动
你能够把 java -jar main-1.0.0.jar 写到脚本文件sh or bat中,这样就能够做为一个简单的启动脚本,而后和jar一块儿发送到目标机器上,运行启动脚本启动程序,这样就差很少就算是完成了一次简单的springboot程序的部署发布。
把这个打包好的jar解压下,简单看下结构
BOOT-INF是应用程序的主体,classes下面的就是咱们的写的代码,lib里面的就是是咱们的程序依赖的jar包
META-INF是一些基础数据,其中比较重要的就是MANIFEST.MF
Manifest-Version: 1.0 Implementation-Title: main Implementation-Version: 1.0.0 Archiver-Version: Plexus Archiver Built-By: pengrui Implementation-Vendor-Id: pr.study.springboot Spring-Boot-Version: 1.5.8.RELEASE Implementation-Vendor: Pivotal Software, Inc. Main-Class: org.springframework.boot.loader.JarLauncher Start-Class: pr.study.springboot.Main Spring-Boot-Classes: BOOT-INF/classes/ Spring-Boot-Lib: BOOT-INF/lib/ Created-By: Apache Maven 3.3.9 Build-Jdk: 1.8.0_111 Implementation-URL: http://projects.spring.io/spring-boot/main/
这个文件描述了jar的基本结构
到这里,一个简单的springboot程序的编码、本地测试运行、打包、启动就都简单过了一遍,后面再一个个补充丰满。
代码相关: https://gitee.com/page12/study-springboot https://github.com/page12/study-springboot