Spring Boot
Spring Boot -01- 快速入门篇(图文教程)
https://icode.blog.****.net/article/details/84194493
今天开始不断整理 Spring Boot 2.0 版本学习笔记,大家可以在博客看到我的笔记,然后大家想看视频课程也可以到【慕课网】手机 app,去找【Spring Boot 2.0 深度实践】的课程,令人开心的是,课程完全免费!
什么是 Spring Boot?
Spring Boot 是由 Pivotal 团队提供的全新框架。Spring Boot 是所有基于 Spring Framework 5.0 开发的项目的起点。Spring Boot 的设计是为了让你尽可能快的跑起来 Spring 应用程序并且尽可能减少你的配置文件。
设计目的: 用来简化新 Spring 应用的初始搭建以及开发过程。
从最根本上来讲,Spring Boot 就是一些库的集合,它能够被任意项目的构建系统所使用。它使用 “习惯优于配置” (项目中存在大量的配置,此外还内置一个习惯性的配置)的理念让你的项目快速运行起来。用大佬的话来理解,就是 spring boot 其实不是什么新的框架,它默认配置了很多框架的使用方式,就像 maven 整合了所有的 jar 包,spring boot 整合了所有的框架,总结一下及几点:
(1)为所有 Spring 开发提供一个更快更广泛的入门体验。
(2)零配置。无冗余代码生成和XML 强制配置,遵循“约定大于配置” 。
(3)集成了大量常用的第三方库的配置, Spring Boot 应用为这些第三方库提供了几乎可以零配置的开箱即用的能力。
(4)提供一系列大型项目常用的非功能性特征,如嵌入式服务器、安全性、度量、运行状况检查、外部化配置等。
(5)Spring Boot 不是Spring 的替代者,Spring 框架是通过 IOC 机制来管理 Bean 的。Spring Boot 依赖 Spring 框架来管理对象的依赖。Spring Boot 并不是Spring 的精简版本,而是为使用 Spring 做好各种产品级准备
Spring Boot 在应用中的角色
Spring Boot 是基于 Spring Framework 来构建的,Spring Framework 是一种 J2EE 的框架(什么是 J2EE?)
Spring Boot 是一种快速构建 Spring 应用
Spring Cloud 是构建 Spring Boot 分布式环境,也就是常说的云应用
Spring Boot 中流砥柱,承上启下
环境准备
- (1)JDK 环境必须是 1.8 及以上,传送门:jdk1.8.191 下载
- (2)后面要使用到 Maven 管理工具 3.2.5 及以上版本,所以会先介绍 Maven 的安装与配置
- (3)开发工具建议使用 IDEA,也可以 MyEclipse,为了实现一站式服务,传送门:
Maven 安装与环境变量配置
(1)Maven 安装:
(2)Maven 配置环境变量:
解压到一个路径,然后配置环境变量:
- 新建变量名:MAVEN_HOME 变量值:D:serverapache-maven-3.6.0(这是我的 MAVEN 路径)
- 编辑变量名:Path 在最前面加上:%MAVEN_HOME%in
(3)检查是否配置成功:
在命令行输入:
mvn -V
然后会一大堆东西:
(4)配置 maven 仓库:
1.打开 maven 文件夹下的 config 文件夹下的 settings.xml;
2.找到 localRepository 标签,此时是被注释掉的,我们解除注释,然后配置一个路径,例如:D:/space/MavenRepository/maven_jar,这样以后 MAVEN 管理下载的jar 包都会在这个路径下。
【注意】:注意结点的位置,先找到注释掉的部分,贴在下面
<localRepository>D:spaceMavenRepositorymaven_jar</localRepository>
3.配置远程仓库,找到 mirrors 标签
<!--远程仓库-->
<mirror>
<id>aliyun</id>
<name>aliyun Maven</name>
<mirrorOf>*</mirrorOf>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
4.当然我们需要先建这样一个目录结构,然后还要把settings.xml 复制一份到 D:/space/MavenRepository 下
(5)在 idea 配置 maven:
点击【File】>【Settings】>搜索【Maven】,按截图配置安装目录和选择刚刚 settings 配置文件;
选择完settings之后,本地仓库自动改成settings文件中配置的;点击apply,再点击ok即配置完成。
使用 idea 快速搭建 Spring Boot
第一步:新建 Spring Initializr 项目:
(1)选择 Spring Initializr
(2)选择 SDK,点击【new】这里就是使用 JAVA SDK 要求版本 1.8+,选择你默认安装在 C:Program FilesJavajdk1.8.0_191 目录:
(3)然后选择默认的 url (不用管)点击【Next】:
(4)然后填写一下项目的信息:
(5)先勾选上 Web 依赖:
(6)勾选 SQl 下的 MySQL,MyBatis 依赖:
(根据自己的项目选择,后面可加)
(7)选择好项目的位置,点击【Finish】:
(7)如果是第一次配置 Spring Boot 的话可能需要等待一会儿 IDEA 下载相应的 依赖包,默认创建好的项目结构如下:
项目结构还是看上去挺清爽的,少了很多配置文件,我们来了解一下默认生成的有什么:
- SpringbootApplication: 一个带有 main() 方法的类,用于启动应用程序
- SpringbootApplicationTests:一个空的 Junit 测试了,它加载了一个使用 Spring Boot 字典配置功能的 Spring 应用程序上下文
- application.properties:一个空的 properties 文件,可以根据需要添加配置属性
- pom.xml: Maven 构建说明文件
第二步:HelloController
在 【main/java/com.xpwi.springboot】包下新建一个【HelloController】:
package com.xpwi.springboot;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 测试控制器
*
* @author: @肖朋伟****
* @create: 2018-11-18
*/
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello() {
return "Hello Spring Boot!";
}
}
第三步:利用 IDEA 启动 Spring Boot
(1)我们回到 SpringbootApplication 这个类中,然后右键点击运行:
(2)会提示 Maven 导包,点击 import
(3)注意:我们之所以在上面的项目中没有手动的去配置 Tomcat 服务器,是因为 Spring Boot 内置了 Tomcat
等待一会儿就会看到下方的成功运行的提示信息:
(4)此时,可以看到我们的 Tomcat 运行在 8080 端口,我们来访问下面地址试一下:
http://localhost:8080/hello
Spring Boot 项目文件介绍
一、解析 pom.xml 文件:
(1)让我们来看看默认生成的 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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xpwi</groupId>
<artifactId>springboot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>springboot</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.RELEASE</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-web</artifactId>
</dependency>
<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>
(2)我们可以看到一个比较陌生一些的标签 ,这个标签是在配置 Spring Boot 的父级依赖:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
有了这个,当前的项目才是 Spring Boot 项目,spring-boot-starter-parent 是一个特殊的 starter ,它用来提供相关的 Maven 默认依赖,使用它之后,常用的包依赖就可以省去 version 标签。
关于具体 Spring Boot 提供了哪些 jar 包的依赖,我们可以查看本地 Maven 仓库下: epositoryorgspringframeworkootspring-boot-dependencies2.1.0.RELEASEspring-boot-dependencies-2.1.0.RELEASE.pom 文件来查看,挺长的…
二、应用入口类 SpringbootApplication.java
Spring Boot 项目通常有一个名为 *Application 的入口类,入口类里有一个 main 方法, 这个 main 方法其实就是一个标准的 Javay 应用的入口方法。
@SpringBootApplication 是 Spring Boot 的核心注解,它是一个组合注解,该注解组合了:@Configuration、@EnableAutoConfiguration、@ComponentScan; 若不是用 @SpringBootApplication 注解也可以使用这三个注解代替。
- 其中,@EnableAutoConfiguration 让 Spring Boot 根据类路径中的 jar 包依赖为当前项目进行自动配置,例如,添加了 spring-boot-starter-web 依赖,会自动添加 Tomcat 和 Spring MVC 的依赖,那么 Spring Boot 会对 Tomcat 和 Spring MVC 进行自动配置。
- Spring Boot 还会自动扫描 @SpringBootApplication 所在类的同级包以及下级包里的 Bean ,所以入口类建议就配置在 grounpID + arctifactID 组合的包名下(这里为 com.xpwi.springboot 包)
三、Spring Boot 的配置文件:
Spring Boot 使用一个全局的配置文件 application.properties 或 application.yml,放置在【src/main/resources】目录或者类路径的 /config 下。
Spring Boot 不仅支持常规的 properties 配置文件,还支持 yaml 语言的配置文件。yaml 是以数据为中心的语言,在配置数据的时候具有面向对象的特征。
Spring Boot 的全局配置文件的作用是对一些默认配置的配置值进行修改。
修改 properties 配置文件实例:
(1)打开 resources 下的 application.properties
(2)在这里我们可以设置访问的端口,将 Tomcat 默认端口设置为 8080 (默认的不修改) ,并将默认的访问路径从 “/” 修改为 “/cn” 时,再访问 http://localhost:8080/ 是什么都没有的,此时要访问 hello 是要使用 http://localhost:8080/cn/hello
注意:如果是 yml 需要在 “:” 后加一个空格,幸好 IDEA 很好地支持了 yml 文件的格式有良好的代码提示;
我们可以自己配置多个属性
(3)使用 yml 文件作为配置文件,我们直接把 .properties 后缀的文件删掉,使用 .yml 文件来进行简单的配置
(4)在然后使用在我们的 HelloController.java 类中使用 @Value 来获取配置属性,代码(请看注释):
package com.xpwi.springboot;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 测试控制器
*
* @author: @肖朋伟****
* @create: 2018-11-18
*/
@RestController
public class HelloController {
// 获取.yml 文件中值
@Value("${name}")
private String name;
// 获取 age
@Value("${****Url}")
private String ****Url;
//路径映射,对应浏览器访问的地址,访问该路径则执行下面函数
@RequestMapping("/hello")
public String hello() {
return name + " **** 博客:"+ ****Url;
}
}
(5)重启 Spring Boot ,输入地址:http://localhost:8080/hello 能看到正确的结果:
【注意】:此时如果你第一次使用 idea 出现中文乱码,解决办法:
(6)【注意】: 我们并没有在 yml 文件中注明属性的类型,而是在使用的时候定义的。你也可以在配置文件中使用当前配置:
(7)任然可以得到正确结果:
(8)【问题】: 这样写配置文件繁琐而且可能会造成类的臃肿,因为有许许多多的 @Value 注解。
可以,封装配置信息
封装配置信息使用方法:
(1)application.yml 文件内容如下:
(2)新建 author.java 和 HelloController.java 同级,内容如下:
package com.xpwi.springboot;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "author")
public class author {
private String name;
private String ****Url;
public String getCsdnUrl() {
return ****Url;
}
public void setCsdnUrl(String ****Url) {
this.****Url = ****Url;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
(3)此时可能会报错,如果报错,打开 pom.xml 文件,添加内容(注意位置):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
(4)重新编写 HelloController 类,内容如下:
package com.xpwi.springboot;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 测试控制器
*
* @author: @肖朋伟****
* @create: 2018-11-18
*/
@RestController
public class HelloController {
// 获取.yml 文件中值
//@Value("${name}")
//private String name;
// 获取 age
//@Value("${****Url}")
//private String ****Url;
@Autowired
private author author;
//路径映射,对应浏览器访问的地址,访问该路径则执行下面函数
@RequestMapping("/hello")
public String hello() {
return "名字:" + author.getName() + " 地址:" + author.getCsdnUrl();
}
}
(5)重启 Spring Boot,访问浏览器:
http://localhost:8080/hello
【提示】:我们可以把配置信息封装成一个类,首先在我们的 name 和 age 前加一个 student 前缀,然后新建一个 StudentProperties 的类用来封装这些信息,并用上两个注解:
- @Component:表明当前类是一个 Java Bean
- @ConfigurationProperties(prefix = “author”):表示获取前缀为 author 的配置信息
Spring Boot -02- Spring Boot 热部署
在目前的 Spring Boot 项目中,当发生了任何修改之后我们都需要重新启动才能够正确的得到效果,非常麻烦,Spring Boot 提供了热部署的方式,当发现任何类发生了改变,就会通过 JVM 类加载的方式,加载最新的类到虚拟机中,这样就不需要重新启动也能看到修改后的效果了。
(一)热部署前 IDEA 中的一些设置
(1)打开自动构建项目:
(2)在编辑器中,同时按下:Ctrl + Shift + Alt + ?(/) 四个键,出现下面菜单:
(3)点击第一个,找到截图中的选项,打上勾选:
(二) pom.xml 文件中的一些设置
pom.xml 是 Maven 的配置文件,当我们需要使用 其他的支持的时候,经常需要在这里配置
(1)在 pom.xml 的 dependencies 中添加内容:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
</dependency>
【注意位置】:
2.在 pom.xml 的 plugins 中添加内容::
<configuration>
<fork>true</fork>
<addResources>true</addResources>
</configuration>
【注意位置】:
(3)执行 import ,在编辑器的右下角会提示
(4)重新启动 Spring Boot ,然后修改任意代码,只需要在浏览器刷新就能看到更新,控制台的也会有自动重启现象:
欢迎转载,转载请注明出处 https://blog.****.net/qq_40147863/article/details/84197273
Spring Boot -03- Spring Boot 整合 JSP
上面已经完成了 Spring Boot 项目的简单搭建,我们仅仅需要进行一些简单的设置,写一个 HelloController 就能够直接运行了,不要太简单…接下来我们再深入了解一下 Spring Boot 的使用。
Spring Boot 加入 JSP 支持
Spring Boot 的默认视图支持是 Thymeleaf 模板引擎,但是这个我们不熟悉啊,我们还是想要使用 JSP 怎么办呢?
(1)修改 pom.xml 增加对 JSP 文件的支持
<!-- servlet依赖. -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!-- tomcat的支持.-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
【注意位置】:
(2)右下角会提示,点击 import
(3)配置试图重定向 JSP 文件的位置
修改 application.yml 文件,将我们的 JSP 文件重定向到 /WEB-INF/views/ 目录下:
(4)创建上面的目录,和 index.jsp,page1.jsp 两个测试 jsp 文件,内容:
文件较多注意目录结构:
index.jsp 文件源码:
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Spring Boot Sample</title>
</head>
<body>
Time: ${time}
<br>
Message: ${message}
</body>
</html>
page1.jsp 文件源代码:
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Spring Boot Sample</title>
</head>
<body>
<h1>${content }</h1>
</body>
</html>
(5)创建 JspController.java (注意目录,看上面截图)
JspController.java 文件源代码(看注释):
package com.xpwi.springboot;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import java.util.Date;
import java.util.Map;
/**
* @author xiaodongdong
* @description: 测试controller跳转到jsp页面
* @create 2017-11-13 11:36
**/
@Controller
public class JspController {
// 从 application.yml 中读取配置,如取不到默认值为Hello Jsp
@Value("${application.hello:肖朋伟:Hello Jsp}")
private String hello = "肖朋伟:Hello Jsp";
/**
* 默认页<br/>
* @RequestMapping("/") 和 @RequestMapping 是有区别的
* 如果不写参数,则为全局默认页,加入输入404页面,也会自动访问到这个页面。
* 如果加了参数“/”,则只认为是根页面。
* 可以通过localhost:8080或者localhost:8080/index访问该方法
*/
@RequestMapping(value = {"/","/index"})
public String index(Map<String, Object> model){
// 直接返回字符串,框架默认会去 spring.view.prefix 目录下的 (index拼接spring.view.suffix)页面
// 本例为 /WEB-INF/views/index.jsp
model.put("time", new Date());
model.put("message", this.hello);
//return 的是文件的名字
return "index";
}
/**
* (方法一)
* 响应到JSP页面page1
*/
@RequestMapping("/page1")
public ModelAndView page1(){
// 页面位置 /WEB-INF/views/page1.jsp
ModelAndView mav = new ModelAndView("page1");
mav.addObject("content", hello);
return mav;
}
/**
* (方法二)
* 响应到JSP页面page1(可以直接使用Model封装内容,直接返回页面字符串)
* 浏览器地址栏使用 page2
*/
@RequestMapping("/page2")
public String page2(Model model){
// 页面位置 /WEB-INF/views/page1.jsp
model.addAttribute("content", hello + "(第二种)");
return "page1";
}
}
访问测试:
(1)访问:
http://localhost:8080/index
(2)访问:
http://localhost:8080/page1
(3)访问:
http://localhost:8080/page2
欢迎转载,转载请注明出处 https://blog.****.net/qq_40147863/article/details/84197797
Spring Boot -04- 使用自定义 Banner
提示: banner.txt 必须是 ANSI 编码的,一般工具创建会是 UTF-8,会显示不出来
使用 Spring Boot 开发时,当程序启动的时候控制台会输出由字符组成的 Spring 符号。这个是SpringBoot 为自己设计的Banner:
. ____ _ __ _ _
/\ / ___'_ __ _ _(_)_ __ __ _
( ( )\___ | '_ | '_| | '_ / _` |
\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.0.5.RELEASE)
所有的 springboot 程序启动时都是输出 spring,这是不是太单调了。那么输出一些有个性的符号,或者输出公司的名字是不是更有意思?
当然我们也可以在 banner.txt 中添加 spring boot 版本号之类的东西。或是自己公司的一些信息。
我应该怎么个性化定banner 呢?
这个很简单只需要两步!
第一步:在 src/main/resource 下新建 banner.txt
- 可以在项目中创建,也只直接拷贝别人的直接放在 resources 下
- 必须放在 resources 目录下(不需要配置,直接放在根目录,会自动扫描)
- 命名必须为 banner.txt
第二步:获取自定义 Banner 文本:
- 可以去下面网站(喜欢哪个用哪个)去生成自己的个性 banner,再拷贝过去就行啦:
- 可以只有文本没有那个 ${} ,这个是自定颜色的
- 也可以直接拷贝别人的
- 比如,我想用这个:
我经常用的一个超酷汽车
- 预览图片
- 点击下载:
代码:
${AnsiColor.RED}
_.-="_- _
_.-=" _- | ||"""""""---._______ __..
___.===""""-.______-,,,,,,,,,,,,`-''----" """"" """"" __'
__.--"" __ ,' o __ [__|
__-""=======.--"" ""--.=================================.--"" ""--.=======:
] [w] : / : |========================| : / : [w] :
V___________:| @ |: |========================| :| @ |: _-"
V__________: / :_|=======================/_____: / :__-"
-----------' "-____-" `-------------------------------' "-____-"
${AnsiColor.YELLOW}-------------------------------------------------------------------------------
${AnsiColor.YELLOW} :: ${AnsiColor.YELLOW}@xiaopengwei.com
${AnsiColor.YELLOW}-------------------------------------------------------------------------------${AnsiColor.WHITE}
其他 banner:
${AnsiColor.RED}
.::::.
.::::::::.
:::::::::::
..:::::::::::'
'::::::::::::'
.::::::::::
'::::::::::::::..
..::::::::::::.
``::::::::::::::::
::::``:::::::::' .:::.
::::' ':::::' .::::::::.
.::::' :::: .:::::::'::::.
.:::' ::::: .:::::::::' ':::::.
.::' :::::.:::::::::' ':::::.
.::' ::::::::::::::' ``::::.
...::: ::::::::::::' ``::.
````':. ':::::::::' ::::..
'.:::::' ':'````..
${AnsiColor.YELLOW}------------------------------------------