第一章 第一个spring boot程序(转载)
环境:
- jdk:1.8.0_73
- maven:3.3.9
- spring-boot:1.2.5.RELEASE(在pom.xml中指定了)
注意:关于spring-boot的支持,
- 最少使用jdk7(jdk6也可以,可能需要额外配置,没试过,官方推荐jdk8)
- maven至少使用3.2
1、首先进入一个文件夹,建立一个maven工程,其中的pom.xml如下:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4 5 <modelVersion>4.0.0</modelVersion> 6 7 <groupId>com.xxx</groupId> 8 <artifactId>myboot</artifactId> 9 <version>1.0-SNAPSHOT</version> 10 11 <!-- 12 引入spring-boot-starter-parent做parent是最好的方式, 13 但是有时我们可能要引入我们自己的parent,此时解决方式有两种: 14 1)我们自己的parent的pom.xml的parent设为spring-boot-starter-parent(没有做过验证,但是感觉可行) 15 2)使用springboot文档中的方式:见spring-boot-1.2.5-reference.pdf的第13页 16 --> 17 <parent> 18 <groupId>org.springframework.boot</groupId> 19 <artifactId>spring-boot-starter-parent</artifactId> 20 <version>1.2.5.RELEASE</version> 21 </parent> 22 23 <!-- 引入实际依赖 --> 24 <dependencies> 25 <dependency> 26 <groupId>org.springframework.boot</groupId> 27 <artifactId>spring-boot-starter-web</artifactId> 28 </dependency> 29 </dependencies> 30 31 <build> 32 <plugins> 33 <!-- 34 用于将应用打成可直接运行的jar(该jar就是用于生产环境中的jar) 35 值得注意的是,如果没有引用spring-boot-starter-parent做parent, 36 且采用了上述的第二种方式,这里也要做出相应的改动 37 --> 38 <plugin> 39 <groupId>org.springframework.boot</groupId> 40 <artifactId>spring-boot-maven-plugin</artifactId> 41 </plugin> 42 </plugins> 43 </build> 44 </project>
之后,使用"mvn clean compile"成功后,引入eclipse
2、引入eclipse中的工程结构如下:
之后,创建红框部分。
FirstBoot:
1 package com.xxx.firstboot; 2 3 import org.springframework.boot.SpringApplication; 4 import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 5 import org.springframework.web.bind.annotation.RequestMapping; 6 import org.springframework.web.bind.annotation.RestController; 7 8 /** 9 * @RestController:spring mvcd的注解, 10 * 相当于@Controller与@ResponseBody的合体,可以直接返回json 11 * 12 * @EnableAutoConfiguration:spring boot的注解 13 * 是无配置启动的关键部分 14 */ 15 @RestController 16 @EnableAutoConfiguration 17 public class FirstBoot { 18 19 @RequestMapping("/hello") 20 public String testFirstMethod(){ 21 return "Hello jigang!!!"; 22 } 23 24 /** 25 * spring boot的入口,在整个项目中,包括其子项目在内, 26 * 只能有一个main方法,否则spring boot启动不起来 27 */ 28 public static void main(String[] args) { 29 SpringApplication.run(FirstBoot.class, args); 30 } 31 32 }
解释:
- @RestController:spring mvc的注解,相当于==>@Controller+@ResponseBody+启动json转换器注解,可以直接返回json
-
@EnableAutoConfiguration:spring boot的注解,是无xml配置启动的关键部分
- main方法:spring boot的入口,在整个项目中,包括其子项目在内,只能有一个main方法,否则spring boot启动不起来
- 注意:关于run方法的第一个参数,不适用全类名也行,推荐使用全类名
3、启动spring boot
首次启动,采用"mvn spring-boot:run"(会下载一些东西),之后启动直接在主类(含有main方法的类)上"run as-->java application"即可
当看到console输出以下的信息时,表示启动spring-boot成功,
之后在浏览器输入路径"http://localhost:8080/hello",输出信息"Hello jigang!!!",则成功!!!
4、打包成可执行的jar,该jar将是在生产环境下可用的jar
生产jar的过程依赖于引入的spring-boot-maven-plugin.jar。
执行"mvn package",查看target下的文件:
后边那一个包是maven自己打的,前边那个是spring-boot自己又基于后边那个重新打包了(repackage)
注意:如果没有使用spring-boot-starter-parent做parent(看pom.xml的注释),那么打包过程需要作出相应的调整。
5、运行打包好的jar
进入myboot文件夹下,执行命令"java -jar target/myboot-1.0-SNAPSHOT.jar",得出如下结果:
之后访问浏览器即可。
说明:
在没有引入spring-boot-starter-web.jar之前,查看依赖树:
引入spring-boot-starter-web.jar之后,查看依赖树:
实际上,spring-boot-starter-web.jar这个jar引入5各方面的jar:
- spring-boot的启动jar:spring-boot-starter.jar
- tomcat相关jar(spring-boot-1.2.5-->tomcat8)
- jackson
- hiberbate-validator
- spring相关jar(spring-boot-1.2.5-->spring4.1)
两个问题:
1)若不采用spring-boot-starter-parent做parent,该怎么配置?
解决方案:
加入以下代码即可。
1 <dependencyManagement> 2 <dependencies> 3 <dependency> 4 <!-- Import dependency management from Spring Boot --> 5 <groupId>org.springframework.boot</groupId> 6 <artifactId>spring-boot-dependencies</artifactId> 7 <version>1.2.5.RELEASE</version> 8 <type>pom</type> 9 <scope>import</scope> 10 </dependency> 11 </dependencies> 12 </dependencyManagement>
完整的pom.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4 5 <modelVersion>4.0.0</modelVersion> 6 7 <groupId>com.xxx</groupId> 8 <artifactId>myboot</artifactId> 9 <version>1.0-SNAPSHOT</version> 10 11 <!-- 引入spring-boot-starter-parent做parent是最好的方式, 但是有时我们可能要引入我们自己的parent,此时解决方式有两种: 12 1)我们自己的parent的pom.xml的parent设为spring-boot-starter-parent(没有做过验证,但是感觉可行) 2)使用springboot文档中的方式:见spring-boot-1.2.5-reference.pdf的第13页 --> 13 <!-- <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> 14 <version>1.2.5.RELEASE</version> </parent> --> 15 16 <dependencyManagement> 17 <dependencies> 18 <dependency> 19 <!-- Import dependency management from Spring Boot --> 20 <groupId>org.springframework.boot</groupId> 21 <artifactId>spring-boot-dependencies</artifactId> 22 <version>1.2.5.RELEASE</version> 23 <type>pom</type> 24 <scope>import</scope> 25 </dependency> 26 </dependencies> 27 </dependencyManagement> 28 29 <!-- 引入实际依赖 --> 30 <dependencies> 31 <dependency> 32 <groupId>org.springframework.boot</groupId> 33 <artifactId>spring-boot-starter-web</artifactId> 34 </dependency> 35 </dependencies> 36 37 <build> 38 <plugins> 39 <!-- 用于将应用打成可直接运行的jar(该jar就是用于生产环境中的jar) 值得注意的是,如果没有引用spring-boot-starter-parent做parent, 40 且采用了上述的第二种方式,这里也要做出相应的改动 --> 41 <plugin> 42 <groupId>org.springframework.boot</groupId> 43 <artifactId>spring-boot-maven-plugin</artifactId> 44 </plugin> 45 </plugins> 46 </build> 47 </project>
注意:引入的是在dependencyManagement,spring-boot-dependencies的type=pom,scope=import
2)若不采用spring-boot-starter-parent做parent,打包插件spring-boot-maven-plugin该怎么配置?
这里采用上边的配置,我直接执行"mvn package"也成功了,这里有知道的给解释一下?与官方文档不一样啊