spring boot 概述
Spring boot 是什么? 按我自己的理解,它就是一个大杂烩. spring 把很多熟知的框架都糅合在自己的体系内, 经过重新包装后统一了风格和配置。它是这些框架的集合体,简化了Maven依赖配置。
Spring boot 特性:
- 简化了配置,spring boot 使用约定大于配置,通过一些约定来大量减少配置。
- 独立启动,通过SpringBootApplication 注解配置一个main作为模块的启动入口。
- 内嵌tomcat和jetty等容器.
- 搭建项目快速便捷.
- 使用Spring boot Actuator监控系统应用.
- Spring boot 是Spring cloud 微服务框架的基础.
关于以上特性,我会在后面的章节中通过代码逐一介绍.
第一个Spring boot 项目
使用IDEA创建Spring boot项目有两种方式:
- 创建一个maven(或者gradle)工程,在maven(或者gradle)工程中引入spring boot 依赖(这个方法也适用于Eclipse)
- 直接创建一个 Spring Initializr 工程, 这个功能需要15以上版本的IDEA支持.
先介绍一下用maven创建spring boot 工程的方式:
创建工程
打开IDEA 先创建一个maven的project. 并填写相应的groupId和ArtifactId
由于我们使用的是实例工程是聚合多module方式, 所以删除掉创建工程中的外层src目录. 创建出来的工程如下图.
然后再创建一个maven的module.
注意: module的GroupId不能和project的GroupId一样, 最好是继承关系
建立好的工程如下:
此时, project的pom文件的packaging已经变成pom类型的了, 而且外层pom已经包含了第一个module
构建spring boot的maven依赖
在外层pom中添加spring boot的parent. 这里使用了最新版本的spring boot 2.0.0.RELEASE
<parent>
<!--spring boot 默认基础配置, 通过继承这个可以获取大部分的默认基础配置-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
这个parent是spring boot默认的基础配置,它提供了大部分的依赖配置, 添加parent后, 我们后续的所有module都继承了这个依赖,能大大减少每个module的maven配置.如果想对默认配置进行覆盖, 就需要在pom中添加如下配置:
<properties>
<!--可以对默认配置进行覆盖 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
在这里我们我们覆盖了jdk的默认版本和工程的字符集. 如果想覆盖默认的某个依赖的版本,那就添加如下的配置:
<properties>
<!--可以对上面的默认配置进行覆盖 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<!-- 将默认的 2.0.0.RELEASE 版本的spring-boot-starter-json 覆盖为1.5.4.RELEASE -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId>
<version>1.5.4.RELEASE</version>
<scope>compile</scope>
</dependency>
</properties>
至此, 外层POM的简单配置已经完成了. 完整的配置文件如下:
<?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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.learning</groupId>
<artifactId>spring-boot-learning</artifactId>
<packaging>pom</packaging>
<version>1.0</version>
<modules>
<module>demo_1</module>
</modules>
<parent>
<!--spring boot 默认基础配置, 通过继承这个可以获取大部分的默认基础配置-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
<properties>
<!--可以对上面的默认配置进行覆盖 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<!-- 将默认的 2.0.0.RELEASE 版本的spring-boot-starter-json 覆盖为1.5.4.RELEASE -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId>
<version>1.5.4.RELEASE</version>
<scope>compile</scope>
</dependency>
</properties>
</project>
下面我们来配置 第一个spring boot module的pom了. IDEA已经帮我们创建了一个基础的pom,内容如下图
先要明确指出这个module的packaging和version. 在artifactId下面添加如下配置:
<version>1.0.0</version>
<packaging>jar</packaging>
我们要展示一个restful 风格例子, 所以需要添加相关的依赖:
<dependencies>
<dependency>
<!--web 项目的依赖 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!--这里不用配置version, spring boot相关的依赖都依据 parent的版本配置-->
<!--<version>2.0.0.RELEASE</version>-->
</dependency>
</dependencies>
对,就添加这一个依赖就足够了,想想以前我们使用spring mvc的时候, 需要加一大堆的依赖才可以.
接下来我们配置spring boot 的pluging, 添加如下配置:
<build>
<plugins>
<plugin>
<!-- spring boot的 maven 插件-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
这里只是简单引入了spring boot的maven插件, 它提供了基础的基于spring boot的maven命令,我们可以在IDEA中看见
好了,module的pom也配置完成了. 完整的代码如下:
<?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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>spring-boot-learning</artifactId>
<groupId>org.learning</groupId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.learning.spring.boot</groupId>
<artifactId>lesson1</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<!--web 项目的依赖 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!--这里不用配置version, spring boot相关的依赖都依据 parent的版本配置-->
<!--<version>2.0.0.RELEASE</version>-->
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<!-- spring boot的 maven 插件-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
开始编码
下面 我们创建spring boot的入口 ,我们先新建一个包结构 ,并在这个包下面建立一个叫做Application(这个类的名字可以随意定义)的类, 如下图:
注意:这里有个坑,如果我们没有建立包结构,直接把入口放在java下面,那么在启动的时候就会报下面这个错.
** WARNING ** : Your ApplicationContext is unlikely to start due to a @ComponentScan of the default package.
在新建的类的头部添加 @SpringBootApplication 注解, 这代表这个类是spring boot的入口.
然后在这个类中新增一个main入口 完成后的代码如下:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
网上有很多例子, 会给这个入口加 @EnableAutoConfiguration @ComponentScan 等注解, 其实完全没有必要, @SpringBootApplication 是个复合注解,它已经包含了这两个注解了. 这两个注解只有在一些特殊的情况下才会显式的加入.
入口写好了,我们新建一个restful的Controller吧, 代码如下:
@RestController
public class DemoController {
@RequestMapping("/")
String home() {
return "Hello World!";
}
@RequestMapping("/hello/{myName}")
String index(@PathVariable String myName) {
return "Hello "+myName+"!!!";
}
}
到这里我们第一个spring boot的程序就写好了. 下面,我们在IDEA中启动这个程序, 就可以访问上面两个链接了.
程序写好了,怎么部署到服务器呢? 有两种方式:
一种是直接运行这个jar, spring boot 自带了tomcat容器(默认)和jetty容器
我们将编译出来的jar 放在linux下面,然后再同一目录新建一个脚本文件, 给脚本文件添加如下代码
#!/usr/bin/env bash
JAR_NAME="lesson1-1.0.0.jar"
if [ "$1" = "start" ] ; then
PS_PID=`ps -ef | grep $JAR_NAME | grep -v 'grep'`
if [ -z "$PS_PID" ] ; then
echo "Start server..."
java -Xms256m -Xmx1024m -Xmn128m -jar $JAR_NAME >out.file 2>&1 &
else
echo "server was started. PID = " $PS_PID
fi
elif [ "$1" = "stop" ] ; then
PS_PID=`ps -ef | grep $JAR_NAME | grep -v 'grep'`
if [ -z "$PS_PID" ] ; then
echo "server was stoped "
else
echo "Stop server..."
kill -15 $PS_PID
fi
else
echo "Usage: $0 {start|stop} [server console options ]"
exit 1
fi
保存后赋予权限 ./脚本文件 start 即可启动了 ./脚本文件 stop 执行停止
接下来我们再尝试一下IDEA 直接创建 spring boot module (IDEA 必须是15版本以上)
File-> new -> module
选择 Spring Initializr 点击 next
填写groupId , artifact , 包名等信息, 点击next
这里选择spring boot的依赖, 我们选择了web下面的web, 点击next
填好 module 信息 ,点击finish. OK spring boot的工程就建好了
IDEA 帮我们把pom也配置好了. 后面按照之前的步骤创建相应的Controller就可以了.
本章结束
下面一章里将介绍spring 的项目配置.敬请期待.