Spring boot 学习二:入门
1: 需要的环境:
JDK:至少JDK7才支持Spring boot
maven:至少3.2
spring-boot:1.2.5.RELEASE(在pom.xml中指定)
2: 创建一个maven工程:其中pom.xml 文件如下:
<?xml version="1.0" encoding="UTF-8"?<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xxx</groupId>
<artifactId>myboot</artifactId>
<version>1.0-SNAPSHOT</version>
<!--
引入spring-boot-starter-parent做parent是最好的方式,
但是有时我们可能要引入我们自己的parent,此时解决方式看后面;
-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.5.RELEASE</version>
</parent>
<!-- 引入实际依赖 -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<!--
用于将应用打成可直接运行的jar(该jar就是用于生产环境中的jar)
值得注意的是,如果没有引用spring-boot-starter-parent做parent,
且采用了上述的第二种方式,这里也要做出相应的改动
在添加了该插件之后,当运行“mvn package”进行打包时,会打包成一个可以直接运行的 JAR 文件,
使用“Java -jar”命令就可以直接运行。这在很大程度上简化了应用的部署,只需要安装了 JRE 就可以运行。
可以在POM中,指定生成 的是Jar还是War;
你还可以指定要执行的类,如果不指定的话,Spring会找有这个【public static void main(String[] args)】方法的类,当做可执行的类。
-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<!--
maven是个项目管理工具,如果我们不告诉它我们的代码要使用什么样的jdk版本编译的话,
它就会用maven-compiler-plugin默认的jdk版本来进行处理,这样就容易出现版本不匹配,以至于可能导致编译不通过的问题。
maven的默认编译使用的jdk版本貌似很低,使用maven-compiler-plugin插件可以指定项目源码的jdk版本,编译后的jdk版本,以及编码。
-->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding><!-- 字符集编码 -->
<skipTests>true</skipTests><!-- 跳过测试 -->
<verbose>true</verbose>
<showWarnings>true</showWarnings>
<fork>true</fork><!-- 要使compilerVersion标签生效,还需要将fork设为true,用于明确表示编译版本配置的可用 -->
<executable><!-- path-to-javac --></executable><!-- 使用指定的javac命令,例如:<executable>${JAVA_1_4_HOME}/bin/javac</executable> -->
<compilerVersion>1.3</compilerVersion><!-- 指定插件将使用的编译器的版本 -->
<meminitial>128m</meminitial><!-- 编译器使用的初始内存 -->
<maxmem>512m</maxmem><!-- 编译器使用的最大内存 -->
<compilerArgument>-verbose -bootclasspath ${java.home}\lib\rt.jar
</compilerArgument><!-- 这个选项用来传递编译器自身不包含但是却支持的参数选项 -->
</configuration>
</plugin>
</plugins>
</build>
</project>
spring-boot-starter-parent的具体作用,可以查看如下2个文件:它用来提供相关的Maven默认依赖。使用它之后,常用的包依赖可以省去version标签
已经定义好了很多包的依赖,可以统一项目的依赖,避免后续的版本冲突.
spring-boot-starter-parent-2.2.6.RELEASE.pom
spring-boot-dependencies-2.2.6.RELEASE.pom
当然我们自己可以覆盖掉parent中定义的一些依赖:
<properties>
<java.version>1.8</java.version>
</properties>
实际上,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)
使用 mvn clean compile 编译。
3. FirstBoot.java
package com.xxx.firstboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @RestController:spring mvcd的注解,
* 相当于@Controller与@ResponseBody的合体,可以直接返回json
*
* @EnableAutoConfiguration:spring boot的注解
* 是无配置启动的关键部分
*/
@RestController
@EnableAutoConfiguration
public class FirstBoot {
@RequestMapping("/hello")
public String testFirstMethod(){
return "Hello jigang!!!";
}
/**
* spring boot的入口,在整个项目中,包括其子项目在内,
* 只能有一个main方法,否则spring boot启动不起来
*/
public static void main(String[] args) {
SpringApplication.run(FirstBoot.class, args);
}
}
4. 启动Spring boot
首次启动,采用 “mvn spring-boot : run”(会下载一些东西)
之后启动,直接在主类(含有main方法)上 run as --> java application
之后在浏览器输入路径"http://localhost:8080/hello",输出信息"Hello jigang!!!",则成功!!!
5: 打包:
成可以执行的jar, 该jar将是在生产环境下可用的jar。
生产jar的过程依赖于引入的spring-boot-maven-plugin.jar(所以pom.xml要配置这个)。
执行"mvn package",查看target下的文件:可以生成jar包。
6: 运行打包好的jar
进入myboot文件夹下,执行命令"java -jar target/myboot-1.0-SNAPSHOT.jar",得出如下结果:
之后访问浏览器即可。
7:若不采用spring-boot-starter-parent做parent,想使用自己的parent,该怎么配置?
解决方案:
加入以下代码即可。
<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.2.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
spring-boot-starter-parent
8: Springboot自动帮助创建Springboot工程,并添加依赖:https://start.spring.io/