1.介绍
SpringBoot是一个微服务框架。
主要的实现了两大块功能:
- 将主流的框架的整合的代码提前都写好了,我们开发人员不需要配置整合代码了,仅仅写框架的参数就可以了。
- 直接可以将项目打包为jar,直接通过jar就可以运行,不需要再配置Web服务器。仅写web服务器参数就可以了。
just run(程序员仅仅只需要运行,,其他配置交给我,SpringBoot宗旨)
2.SpringBoot入门示例
1.配置步骤说明
第一步:生成SpringBoot项目(去Spring官方生成)
第二步:导入项目到开发空间
第三步:编写一个入门程序入门(默认整合MVC)
第一部分:生成SpringBoot项目
第一步:进入网站
进入网站:https://spring.io/projects/spring-boot,找到Spring构建入口,如图所示:
第二步:编写项目信息
第三步:选择最小模块
第四步:生成项目
出现下图,构建成功
第二部分:导入项目到IDEA
第一步:解压项目文件
将下载好的项目放在Idea的工作目录,解压就可以了。
第二步:使用Idea打开项目
第三部分:编写入门代码
第一步:修改入门类类名
注意事项: Idea的源代码文件夹、资源文件夹、测试文件夹都是类路径根目录(classpath:)
第二步:编写一个Controller
//IDEA代码提示快捷键 Ctrl+Alt+空格
@RestController //等同@Controller+@ResponseBody
public class HelloController {
@GetMapping(value="/say")
//@ResponseBody
public String say(){
return "HelloWorld";
}
}
第三步:启动测试
查看输出,出现如下则启动成功:
测试结果:
2.SpringBoot的POM依赖说明
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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--继承SpringBoot的父Pom文件,SpringBoot框架的通用配置,主要锁定软件版本-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>org.zhu.springboot</groupId>
<artifactId>springboot-demo-01-start</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-demo-01-start</name>
<description>Demo project for Spring Boot</description>
<properties>
<!--配置了JDK为1.8版本,必须要配置了SpringBoot父POM才有效-->
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--SpringBoot的Web模块,SpringMVC JSON支持-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--SpringBoot热部署依赖,在Eclipse有效-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<!---SpringBoot测试模块依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<!--SpringBoot的Maven启动插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3.SpringBoot配置文件
SpringBoot默认加载的配置文件是在classpath根目录的application.properties或者application.yml配置文件。
注意: SpringBoot支持properties和yml两个格式的配置文件。
3.1 配置Web服务器参数
1.properties格式配置
–Properties文件的属性,使用的平铺方式书写
##设置server参数
##端口
server.port=8081
##设置上下文路径
server.servlet.context-path=/springboot-demo-02-server-properties
Properties配置步骤
注意事项: 除了application.properties的其他的配置文件的文件名必须是application-xxxx.properties
第一步:编写三个配置文件
第二步:编写配置文件内容
–application.properties
##指定加载其他配置文件
spring.profiles.active=server1,server2
–application-server1.properties
##配置端口
server.port=8083
–application-server2.properties
##配置上下文路径
server.servlet.context-path=/springboot-demo-03-Properties
第三步:运行项目
2.yml格式配置
##设置server参数
##注意事项:
##1.冒号(:)和参数值直接必须要有一个空格,否则报错。
##2.必须根据属性的层级,设置好折叠级数
server:
port: 8082
servlet:
context-path: /springboot-demo-02-server-yml
yml配置步骤
第一步:编写三个配置文件
第二步:分别编写配置信息
注意: SpringBoot启动的时候加载的是application.yml配置文件,再通过application.yml配置文件的spring.profiles.active属性指定加载的其他配置文件。
其他配置文件的文件名格式为:application-.yml
–application.yml
##配置加载多个文件,
##文件名为:application-<active-name>.yml
spring:
profiles:
active: server1,server2
–application-server1.yml
##配置服务器端口
server:
port: 8082
–application-server2.yml
##配置上下文路径
server:
servlet:
context-path: /springboot-demo-03-yml
第三步:启动测试
成功结果
3.自定义属性
1.配置步骤
第一步:pom.xml导入包
<!--支持自定义属性-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
第二步:在入口类启动支持
@SpringBootApplication
@EnableConfigurationProperties({EgoManagerProperties.class}) //启动自定义配置
public class Application {
public static void main(String[] args) {
SpringApplication.run(EgoManagerApplication.class, args);
}
}
第三步:编写自定义属性类
//ftp.client.server,设置前缀,ignoreInvalidFields = true,属性是非必须的
@ConfigurationProperties(prefix = "ftp.client.server", ignoreInvalidFields = true)
public class EgoManagerProperties {
private String hostname;
private int port;
//注意事项:驼峰命名法,在配置文件取该值时,需要使用- 如:base-path
private String basePath;
private String username;
private String password;
//补全get、set
}
第四步:配置文件
applicaiton.yml调用
##Ftp参数,自定义属性的实现
ftp:
client:
server:
##ftp服务器IP
hostname: 192.168.68.13
##ftp服务器端口
port: 21
##ftp远程服务器基础路径
base-path: /home/ftpuser/ego/images
##ftp远程用户名
username: ftpuser
##ftp远程密码
password: ftpuser
4.SpringBoot运行原理
如图所示:
-
首先,SpringBoot通过加载SpringApplication入口执行类,加载配置在当前类上面的@SpringBootApplication注解,来启动SpringBoot项目的。
-
然后根据@SpringBootApplication注解定义的三个注解@SpringBootConfiguraton、@EnableAutoConfiguration、@ComponentScan,我们清楚知道了入口类的功能:
@SpringBootConfiguraton注解:意味着入口类本身就是一个配置类
@EnableAutoConfiguration注解:表示SpringBoot启动的时候就自动加载已经导入jar的组件
@ComponentScan:表示SpringBoot启动的时候就会扫描当前包和子包的组件类。 -
注意事项,SpringBoot内置支持的组件在spring-boot-autoconfigure-2.2.1.RELEASE.jar里面。根据分析,我们知道自动加载的配置类信息都在XxxxAutoConfiguration里面,配置的属性参数基本都在XxxxxProperties里面。
5.SpringBoot整合Mybatis
1.配置步骤说明
第一步:创建一个SpringBoot项目
第二步:导入Mybatis的自动加载模块(Mybatis官方)
第三步:编写配置参数
第四步:编写一个测试代码测试
第五步:对日志的支持
2.配置步骤
第一步:创建一个SpringBoot项目
–项目文件
–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>org.zhu.mybatis</groupId>
<artifactId>springboot-demo-05-mybatis</artifactId>
<version>1.0</version>
<!-- Ctrl+Shift+/ 表示注释和去掉注释-->
<!--第一步:加入SpringBoot的父POM信息-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!--第二步:配置JDK版本-->
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--第三步:加入SpringBoot支持web的模块-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<!--第四步:加入单元测试模块-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.2.1.RELEASE</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
第二步:pom.xml导入Mybatis整合SpringBoot的依赖
<!--第五步:加入Mybatis整合依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<!--第六步:数据源支持-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
</dependency>
<!--第七步:驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
第三步:编写配置参数
–编写配置文件
###配置数据源
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/users?serverTimezone=GMT
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.type=org.apache.commons.dbcp2.BasicDataSource
–编辑入口类,加入映射接口扫描路径
@SpringBootApplication
//指定扫描的映射接口
//basePackages属性:指定扫描的映射接口
//annotationClass属性:,指定限制扫描的注解,默认是@Mapper注解
@MapperScan(basePackages = "org.ranger.mybatis.mapper",annotationClass = Repository.class)
public class MybatisApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisApplication.class, args);
}
}
第四步:编写插入数据测试代码
–编写POJO
package org.zhu.mybatis.pojo;
//快捷键 ,查找替换:Ctrl+F
public class User {
private Integer userId;//INT(11) NOT NULL AUTO_INCREMENT,
private String userName;//VARCHAR(255) NULL DEFAULT NULL,
private String userAccount;//VARCHAR(255) NULL DEFAULT NULL,
private String userPassword;//VARCHAR(255) NULL DEFAULT NULL,
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserAccount() {
return userAccount;
}
public void setUserAccount(String userAccount) {
this.userAccount = userAccount;
}
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
}
–编写Mapper
//注意事项,Mybatis整合SpringBoot的代码,默认强制使用了该注解。所以必须要加上
//需要查看代码在mybatis-spring-boot-autoconfigure-2.1.1.jar找MybatisAutoConfiguration类
@Mapper
public interface UserMapper {
/**
* 插入用户
* @param user
* @return
*/
@Options(useGeneratedKeys = true,keyProperty ="userId")
@Insert("INSERT INTO tb_user(user_name, user_account, user_password) VALUES (#{userName}, #{userAccount}, #{userPassword})")
int insert(User user);
}
–测试代码
注意事项:
- 如果入口类,类名不是Application,必须要手工指定入口类名
- 需要加入@RunWith在启动之前,先在Spring配置类。
@SpringBootTest(classes = {MybatisApplication.class})
@RunWith(SpringRunner.class)
public class UserMapperTest {
@Autowired
private UserMapper userMapper;
//智能提示快捷键,alt+回车键
@Test
public void insert(){
User user=new User();
user.setUserName("张三123");
int insert = userMapper.insert(user);
System.out.println(insert);
}
}
第五步:对日志的支持
Mybatis可以直接配置控制台输出Sql语句,不需要任何的日志框架。
配置application.properties配置文件,追加以下配置代码。
##指定日志输出类
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
6.SpringBoot对Servlet组件支持
SpringBoot通过spring-boot-2.2.1.RELEASE.jar核心包下的
- org.springframework.boot.web.servlet.FilterRegistrationBean
- org.springframework.boot.web.servlet.ServletListenerRegistrationBean
- org.springframework.boot.web.servlet.ServletRegistrationBean
三个类支持Servlet的三大组件的。
1.Servlet示例
Servlet代码
public class MyServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("===============Get请求===============");
}
}
配置类代码
@Configuration
public class WebConfiguration {
/**
* 等同在web.xml配置servlet组件
* @return
*/
@Bean
public ServletRegistrationBean<MyServlet> servletRegistrationBean(){
ServletRegistrationBean<MyServlet> registrationBean=new ServletRegistrationBean<>();
//指定加载的Servlet
registrationBean.setServlet(new MyServlet());
List<String> mappers=new ArrayList<>();
mappers.add("/myServlet");
registrationBean.setUrlMappings(mappers);
return registrationBean;
}
}
2.Filter过滤器示例
–Filter代码
public class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("-这是一个过滤器-");
chain.doFilter(request, response);
}
}
–配置类代码
@Configuration
public class WebConfiguration {
//配置过滤器
@Bean
public FilterRegistrationBean<MyFilter> filterRegistrationBean(){
FilterRegistrationBean<MyFilter> registrationBean=new FilterRegistrationBean<>();
registrationBean.setFilter(new MyFilter());
List<String> mappers=new ArrayList<>();
mappers.add("/*");
registrationBean.setUrlPatterns(mappers);
//指定拦截FORWARD类型的请求
registrationBean.setDispatcherTypes(EnumSet.of(DispatcherType.REQUEST));
return registrationBean;
}
}
3.Listener监听器示例
–Listener代码
@WebListener
public class MyListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("容器启动啦");
}
}
–配置类代码
@Configuration
public class WebConfiguration {
//配置监听器
@Bean
public ServletListenerRegistrationBean<MyListener> servletListenerRegistrationBean(){
ServletListenerRegistrationBean<MyListener> registrationBean=new ServletListenerRegistrationBean<>();
registrationBean.setListener(new MyListener());
return registrationBean;
}
}
7.SpringBoot对war的支持
StringBoot默认不支持使用jar包打包有JSP页面项目,所以如果包含有JSP页面的项目,需要使用war打包
1.配置步骤说明
第一步:导入依赖的包
–pom.xml导入依赖包,并且修改打包为war包
<!--修改为war-->
<packaging>war</packaging>
<!--spring boot jsp页面解释器-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
第二步:编写Jsp页面
注意事项: 必须增加Web模块。webapp文件是web根目录。
第三步:修改入口类
增加对servlet的支持
@SpringBootApplication
public class SpringBootJspApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(SpringBootJspApplication.class, args);
}
//类似用于web.xml
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(SpringBootJspApplication.class);
}
}
第四步:修改配置文件
修改SpringBoot配置文件application.properties配置视图解释器前后缀
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
第五步:打包war
使用install命令,打包安装,可以在Tomcat里面运行。
第六步:运行war包
注意事项: Eclipse可以直接运行入口类执行,IDEA是通过配置Tomcat服务器运行的。SpringBoot2.2.2使用的是Tomcat9
8.Slf4J日志支持
1.Slf4J介绍
Slf4J是一个日志的抽象层框架。它并没有实现日志输出的功能,只是为其他各种日志控件提供统一的入口。这样,只要我们使用Slf4J的规范编写代码,那么适配哪个输出日志框架都可以了。这样可以统一项目的日志框架的标准。
2.SpringBoot对Slf4J的支持
第一步:编写日志代码
–使用Slf4J编写日志输入代码
@RestController
public class HelloController {
private static final Logger log= LoggerFactory.getLogger(HelloController.class);
@GetMapping(value = "/say")
public String say(){
log.debug("这是一个HelloWorld程序");
return "HelloWorld";
}
}
第二步:配置日志输出级别
配置SpringBoot默认的输出日志框架级别,SpringBoot默认使用logback-classic-1.2.3.jar日志框架
##配置日志登记,标红是自定义包路径
logging.level.org.ranger=debug
第三步:执行程序
执行程序,调用对应的方法,查询输出结果。确认成功。
注意事项: SpringBoot默认以及加入Slf4J的实现包,所以不需要再导入jar包
9.Lombok框架
1.Lombok介绍
Lombok是一个JavaBean编写的辅助型框架。使用了Lombok,可以让我们IDE编写JavaBean不需要生成Get、Set方法、构造方法、ToString等。使用几个简单的注解就完成对应Get、Set方法生成以及对构造方法、ToString方法、equeal方法的重写。Lombok会根据我们配置的注解自动在内存构建中生成。
工作原理如下:
2.IDEA下使用
第一步:安装Lombok插件
1.安装步骤说明:
- 进入到File > Settings > Plugins
- 点击 Browse repositories…
- 搜索 Lombok Plugin
- 点击 Install plugin
- 安装成功
- 重启开发工具后核对是否安装成功
第二步:编写测试代码
注意:安装插件成功,加入Lombok框架依赖,POJO就不用写get、set方法了。
–POJO
package org.zhu.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
//@Getter
//@Setter
@NoArgsConstructor
@AllArgsConstructor
public class User {
private int id;
private String username;
private String password;
}
–测试代码
package org.zhu.test;
import org.zhu.pojo.User;
public class UserTest {
public static void main(String[] args) {
User user=new User();
user.setUsername("zhangsan");
user.setPassword("123456");
System.out.println("用户名:"+user.getUsername()+",密码:"+user.getPassword());
System.out.println(user.toString());
}
}
3.Lombok对Slf4J框架
第一步:配置日志级别
–在applicaiton.properties配置日志级别,注意,标红的包名为我们项目的包名前缀。
##设置日志级别
logging.level.org.zhu=DEBUG
第二步:在类里面使用
package org.zhu.rest.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.zhu.rest.pojo.User;
import java.util.Date;
@RestController
@Slf4j //该注解用于让当前类获得log对象,必须IDE要按安装Lombok插件
public class UserController {
/**
* 更新用户
* @param user
* @return
*/
@PutMapping(value = "/edit")
public User edit(User user){
log.debug("用户信息"+user.toString());
user.setPassword("222222");
user.setCreateDate(new Date());
return user;
}
}