Spring Boot是一个为快速搭建Spring项目而生的一个框架,整个框架只需要一个配置文件和一个启动类,即可实现对Spring IoC容器、AOP、JDBC、MVC、MyBatis、JPA等内容进行配置。
搭建
- 如果是Maven项目的搭建,首先需要继承一个Spring Boot父项目(这样就继承了父项目引入的所有依赖),并引入Spring Boot启动器(starter)的依赖。启动器有多种,包括核心启动器、jdbc、web、redis、aop、cache等等,后面的启动器都包含核心启动器。之后还可以配置一个Spring Boot插件。
指定一个入口配置类。即以下代码:
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
其中,注解
@SpringBootApplication
会引入其它注解,如:@ComponentScan
会让Spring扫描该包及子包下的类是否会实例化进入Spring容器;@EnableAutoConfiguration
会导入一个配置类,该配置类会引入Spring Boot内部META-INF/SpringFactories.properties配置文件,这一配置文件包含Spring Boot所需的所有配置类,会根据容器中含有的对象(通过@Conditional系列注解)等条件决定是否引入该配置,这便是Spring Boot能够自动配置的缘故。SpringFactories.properties开发者也可以自己写,直接将key对应的value的值覆盖为自定义的值即可。指定一个配置文件,文件名称为固定写法:application.properties或application.yml。能够对一些重要内容进行统一化的配置,如:
#application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/test?
characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 如果需要,可以进行自动建表
spring.jpa.hibernate.ddl-auto=update
# 如果需要,可以执行指定的sql文件进行建表
#spring.datasource.schema=sql/test.sql
# 如果需要,可以显示执行的sql语句
spring.jpa.show-sql=true
# 如果需要,可以格式化sql语句
spring.jpa.properties.hibernate.format_sql=true
通过配置文件,能够对Spring Boot内部的配置类的配置进行覆盖,使用客制化的配置。
通过快速搭建程序,能够对Spring Boot项目进行快速搭建,如使用IEDA、STS、start.spring.io等。
测试
Spring Boot自带了一个注解供测试使用,且使用的JUnit版本为5。
@SpringBootTest(classes = {DemoApplication.class}) // 引入入口类
class DemoApplicationTests {
@Test
void contextLoads() {
}
}
Web
Web层可以采用Spring MVC,而在Boot项目中要使用MVC,需要导入spring-boot-starter-web
启动器。
通过快速搭建程序自动生成的Spring Boot MVC项目,会在resource下生成两个文件夹:static(或public)和templates,前者用于存放css、js等静态资源,而后者用于存储thymeleaf等模板引擎;JSP则需要放在jsp目录中。这些目录是boot中配置的映射器的默认映射目录。
Dao
所有的Dao层都需要在Boot的配置文件中配置数据库连接池。
Dao层可以使用Boot自带的JDBC Template功能,需要导入spring-boot-starter-jdbc
启动器。
还可以使用MyBatis作为Dao层,需要导入mybatis-spring-boot-starter
,这是MyBatis自己实现启动器。然后配置数据库连接池,在启动类配置要扫描的Mapper的包(@MapperScan(包)),或者使用@Mapper注解让这个类成为一个Mapper类,也可以使用MyBatis注解等。
还可以使用Spring Data JPA作为Dao层,需要导入spring-boot-starter-data-jpa
,该框架是一个实现了JPA(Java Persistence API,Java持久化应用编程接口)规范的全ORM框架。与MyBatis相比,该框架能够根据具体关系型数据库自动生成SQL语句,且与Spring框架整合性好。
打包和运行
由于Spring Boot自动嵌入了Tomcat,故可以直接使用java -jar的方式运行jar包或war包,并通过--server.port=端口号
的方式指定运行的端口。
也可以不嵌入Tomcat,此时需要排除spring-boot-starter-web中对Tomcat的默认依赖,并手动添加Tomcat依赖,并指定scope为provided(仅开发使用)。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
而在开发中,可以直接运行入口类(即带@SpringBootApplication注解的类)的main方法即可运行一个Boot项目;也可以通过maven插件,使用“mvn spring-boot:run”命令来运行。