spring boot的初期目标是:
- 提供一个从根本上快速简洁的Spring开发体验
- 提供诸多非必须的但是在大型的项目中很常见的功能(比如:整合的服务器,安全等)
- 无须生成代码和xml配置
基于此,spring boot在项目中使用的优点显而易见:没有各种烦人的xml配置。 spring boot能让你更专注业务代码。
项目地址:https://github.com/yhan219/spring-boot-demo
新建spring boot项目
spring boot项目新建非常简单,可以到官网上新建后下载。如果你使用idea,new->project->Spring Initializr。如果你使用eclipse,可安装spring插件后新建。 如果你只有maven,不想安装插件,不想下载idea,那也很简单。新建一个maven项目。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.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yhan</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.BUILD-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
非常推荐使用gradle管理和构建项目。不过这里使用大家熟悉的maven。推荐打成jar包,而不是war。
spring boot无需特定的代码结构。但是推荐项目目录结构如下:
│ .gitignore
│ pom.xml
│ README.md
├─src
│ ├─main
│ │ ├─java
│ │ │ └─com
│ │ │
│ │ └─resources
│ │ │ application.yml
│ │ │
│ │ ├─static
│ │ └─templates
│ └─test
│ └─java
│ └─com
└─target
spring mvc
spring boot提供了很简单的整合spring mvc的方法,你仅仅只需要添加如下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
添加好依赖后,spring boot已经为你配置好了常用的配置,比如tomcat。
编码
编码过程很简单,新建入口类:
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
不用感到奇怪,spring boot就是这样,直接运行main方法就能启动应用,无需配置tomcat(因为tomcat已经内置了)。
解释一下@SpringBootApplication注解,这个注解告诉spring boot怎么猜测你想如何配置spring,主要根据你添加的jar包。 因为 spring-boot-starter-web添加有tomcat和SpringMVC,所以SpringBoot会认为你在开发一个web项目,并以此进行配置。
最后的部分是应用的main方法。这是标准的java程序入口方法。我们的主方法委托给SpringBoot的SpringApplication类的run方法。 SpringApplication会启动我们的程序,启动自动配置的tomcat。我们需要把DemoApplication.class作为参数传递给SpringApplication。
写一个简单的Controller。如下:
@RestController
public class UserController {
@GetMapping("/user/{name}")
public String getUsername(@PathVariable String name) {
return name;
}
}
运行main方法,在浏览器上输入 localhost:8080/user/张三 即可看到相关输出。
spring boot devtools
顾名思义,这个包是用来为开发者服务的一个模块。其重要的功能就是热部署,类似jrebel插件。依赖如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
常用的配置:
一些特定的资源改变无需触发重启,比如js,此时只需配置spring.devtools.restart.exclude属性。 比如你想排除/static和/public(spring boot已经默认排除了这两个目录,这里只是示例)下的资源,设置如下: application.properties:
spring.devtools.restart.exclude=static/**,public/**
或者使用yml配置:
spring:
devtools:
restart:
exclude: static/**,public/**
由于yml更简洁,推荐使用yml配置方式。
你可能需要SpringBoot在你修改非classpath路径下的文件时也触发重启。这时你需要修改spring.devtools.restart.additional-paths来添加额外的路径进行监测。 另外还有运行远程程序及远程更新、远程调试等。
actuator
actuator是spring boot四大神器(auto-configuration、starters、cli、actuator)之一。 actuator是spring boot提供的对应用系统的自省和监控的集成功能,可以对应用系统进行配置查看、相关功能统计等。 简单说就是应用健康监控。 添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
主要暴露的功能:
GET | /autoconfig | 查看自动配置的使用情况 | true |
GET | /configprops | 查看配置属性,包括默认配置 | true |
GET | /beans | 查看bean及其关系列表 | true |
GET | /dump | 打印线程栈 | true |
GET | /env | 查看所有环境变量 | true |
GET | /env/{name} | 查看具体变量值 | true |
GET | /health | 查看应用健康指标 | false |
GET | /info | 查看应用信息 | false |
GET | /mappings | 查看所有url映射 | true |
GET | /metrics | 查看应用基本指标 | true |
GET | /metrics/{name} | 查看具体指标 | true |
POST | /shutdown | 关闭应用 | true |
GET | /trace | 查看基本追踪信息 |
例如,访问 http://localhost:8080/health 返回:
{
"status": "UP"
}
ps:等添加了数据源后再回来试试这些命令。
mybatis
配置
spring boot整合mybatis非常简单。同样的,只要添加如下依赖:
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.2.0</version>
</dependency>
在这之前,你需要添加数据库驱动和连接池。依赖如下:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.28</version>
</dependency>
数据源配置如下:
spring:
datasource:
url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
driver-class-name: com.mysql.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
username: root
password: 6789@jkl
好了,配置好了,如果你不会mybatis,请按ctrl+w。
编码
@Mapper
public interface StudentRepository {
@Insert("insert into student(id,name,sex) values(#{id},#{name},#{sex})")
int insertStudent(Student student);
@Select("select id,name from student where id=#{id}")
Student selectStudent(@Param("id") String id);
}
如果你想使用mybatis官方推荐的xml,这里也很简单。
application.yml中添加:
mybatis:
typeAliasesPackage: com.yhan.demo.domain
mapper-locations: classpath:mapper/*.xml
把你的xml写到resource/mapper目录下试试看吧。
启动事物
仅仅只需要在入口类(DemoApplication.java)添加注解: @EnableTransactionManagement