由于在日常开发中,有时需要单独重新创建项目的情况,一直以为创建springboot 通过自己手动添加spring-boot-parent-start等包来进行创建,往往会发生许多异常的情况,刚看了些资料发现一个IDEA工具自动搭建最为简单,而且一定不会出错,特此记录下来。
本文参考链接来自:IDEA自动搭建SpringBoot工程
Build Anything with Spring Boot: Spring Boot is the starting point for building all Spring-based applications. Spring Boot is designed to get you up and running as quickly as possible, with minimal upfront configuration of Spring.
上面是引自官网的一段话,大概是说: Spring Boot 是所有基于 Spring 开发的项目的起点。Spring Boot 的设计是为了让你尽可能快的跑起来 Spring 应用程序并且尽可能减少你的配置文件。
回顾我们之前的 SSM 项目,搭建过程还是比较繁琐的,需要:
而使用 Spring Boot 来开发项目则只需要非常少的几个配置就可以搭建起来一个 Web 项目,并且利用 IDEA 可以自动生成生成,这简直是太爽了...
第一步:新建项目
在IDEA中选择 File ==> New ==> Project ==> Spring Initializr,如下图所示,选好JDK
选择“Next",修改下Group和Artifact信息,如下,点击【Next】
勾选上web模板选项,然后点击【Next】:
最后在确认一下工程名,点击【Finish】:
如果是第一次配置 Spring Boot 的话可能需要等待一会儿 IDEA 下载相应的 依赖包,默认创建好的项目结构如下:
项目结构还是看上去挺清爽的,少了很多配置文件,我们来了解一下默认生成的有什么:
第二步:HelloController
在com.heima.controller包下创建HelloController.java类
package com.heima.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping("/hello")
public String get(){
return "hello Spring Boot!";
}
}
第三步:在IDEA中启动Spring Boot工程
我们回到 BootcreateApplication 这个类中,然后点击启动按钮启动:
等待一会儿就会看到下方的成功运行的提示信息:
可以看到我们的 Tomcat 运行在 8080 端口,我们来访问 “/hello
” 地址试一下:
可以看到页面成功显示出我们返回的信息。
解析pom.xml文件
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.2.2.RELEASE
com.heima
bootcreate
0.0.1-SNAPSHOT
bootcreate
Demo project for Spring Boot
1.8
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
org.junit.vintage
junit-vintage-engine
org.springframework.boot
spring-boot-maven-plugin
我们可以看到一个比较陌生一些的标签
,这个标签是在配置 Spring Boot 的父级依赖:
org.springframework.boot
spring-boot-starter-parent
2.2.2.RELEASE
有了这个,当前的项目才是 Spring Boot 项目,spring-boot-starter-parent 是一个特殊的 starter ,它用来提供相关的 Maven 默认依赖,使用它之后,常用的包依赖就可以省去 version 标签。
关于具体 Spring Boot 提供了哪些 jar 包的依赖,我们可以查看本地 Maven 仓库下:\repository\org\springframework\boot\spring-boot-dependencies\2.2.2.RELEASE\spring-boot-dependencies-2.2.2.RELEASE.pom 文件来查看,挺长的...
Spring Boot 项目通常有一个名为 *Application 的入口类,入口类里有一个 main 方法, 这个 main 方法其实就是一个标准的 Java 应用的入口方法。
@SpringBootApplication 是 Spring Boot 的核心注解,它是一个组合注解,该注解组合了:@Configuration、@EnableAutoConfiguration、@ComponentScan; 若不是用 @SpringBootApplication 注解也可以使用这三个注解代替。
Spring Boot 的配置文件
Spring Boot 使用一个全局的配置文件 application.properties 或 application.yml,放置在【src/main/resources】目录或者类路径的 /config 下。
Spring Boot 不仅支持常规的 properties 配置文件,还支持 yaml 语言的配置文件。yaml 是以数据为中心的语言,在配置数据的时候具有面向对象的特征。
Spring Boot 的全局配置文件的作用是对一些默认配置的配置值进行修改。
简单实例一下:
我们同样的将 Tomcat 默认端口设置为 8080 ,并将默认的访问路径从 “/
” 修改为 “/hello
” 时,使用 properties 文件和 yml 文件的区别如上图。
:
” 后加一个空格,幸好 IDEA 很好地支持了 yml 文件的格式有良好的代码提示;
- 我们可以自己配置多个属性
我们直接把 .properties 后缀的文件删掉,使用 .yml 文件来进行简单的配置,然后使用 @Value 来获取配置属性:
@RestController
public class HelloController {
@Value("${name}")
private String name;
@Value("${age}")
private Integer age;
@RequestMapping("/hello")
public String get(){
return name + ":"+age;
}
}
结果如下:
在目前的 Spring Boot 项目中,当发生了任何修改之后我们都需要重新启动才能够正确的得到效果,这样会略显麻烦,Spring Boot 提供了热部署的方式,当发现任何类发生了改变,就会通过 JVM 类加载的方式,加载最新的类到虚拟机中,这样就不需要重新启动也能看到修改后的效果了。
我们往 pom.xml 中添加一个依赖就可以了:
org.springframework.boot
spring-boot-devtools
true
IDEA配置热部署入口:热部署配置
重新启动 Spring Boot(版本需要在2.0.x以内,测试2.2.2版本存在问题) ,然后修改任意代码,保存时,就能观察到控制台的自动重启现象:
长型的方框是启动完成的最后状态,下方小型放开是修改代码后自动热部署启动的截图。
上面已经完成了 Spring Boot 项目的简单搭建,我们仅仅需要进行一些简单的设置,写一个 HelloController 就能够直接运行了,不要太简单...接下来我们再深入了解一下 Spring Boot 的使用。
Spring Boot 的默认视图支持是 Thymeleaf 模板引擎,但是这个我们不熟悉啊,我们还是想要使用 JSP 怎么办呢?
javax.servlet
javax.servlet-api
provided
javax.servlet
jstl
org.apache.tomcat.embed
tomcat-embed-jasper
provided
修改 application.yml 文件,将我们的 JSP 文件重定向到 /WEB-INF/views/ 目录下:
修改 @RestController 注解为 @Controller ,然后将 hello 方法修改为:
在【src/main】目录下依次创建 webapp、WEB-INF、views 目录,并创建一个 hello.jsp 文件:
以spring-boot-run来启动程序,可以访问到jsp页面
访问地址:
集成mybatis
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.1.1
mysql
mysql-connector-java
5.1.21
这里我们就直接使用之前创建好的 student 表了吧:
public class Student implements Serializable{
private static final long serialVersionUID = 4780975752032126427L;
private Integer id;
private String name;
private Integer age;
private String sex;
private Date birthday;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
StudentMapper:
@Mapper
public interface StudentMapper {
@Select("select * from t_student")
List findAll();
}
@Controller
public class StudentController {
@Autowired
private StudentMapper studentMapper;
@RequestMapping("getStudents")
public String listStudent(Model model){
List all = studentMapper.findAll();
model.addAttribute("students",all);
return "listStudent";
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
id
name
${s.id}
${s.name}