spring boot入门
Posted ac_dao_di
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring boot入门相关的知识,希望对你有一定的参考价值。
一、相对于spring的优点
- 便捷部署:支持嵌入式tomcat,无需依赖外部tomcat,可以本地启动,可以打成fat jar运行。
- 端点监控:能够查看spring boot内部的运行时状态,包括bean的生效情况、应用健康情况等。
- 外部化配置:支持从fat jar外application.yaml读取配置,无需修改内部代码和配置。支持对象配置注入和宽松绑定。
- 注解驱动编程:无任何xml,基于spring 4.0条件注解实现bean注册,基于servlet 3.0实现动态servlet等。
- 自动化配置:快速构建,避开依赖地狱,引进starter jar,配置yaml,即可开箱使用相关功能。
二、IDEA构建和本地运行
详细见:github本博客源码
2.1 新建spring boot demo
(1) 点击File->New->Project…
(2) pom添加starter web依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
自动引进相关jar:
传统spring需要引进多个jar:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.3.12</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.12</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.5</version>
<scope>compile</scope>
</dependency>
(3) 编写HelloController
package com.jessin.springboot.demo.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Author: jessinguo
* @Date: 2021/10/24 1:16 PM
*/
@RestController
public class HelloController
@RequestMapping("/hello")
public String hello()
return "hello world spring boot";
(4) 本地运行DemoApplication.main
到这一步,花的时间很少,不需要配置web.xml,不需要配置spring相关xml
(5) 命令行启动:
mvn spring-boot:run
(6) 打成jar
mvn -DskipTests package
可执行jar的结构为spring boot特有,且该jar不可被作为依赖引入。如果需要在外部tomcat运行,则需要打成war。 该jar结构与传统可执行jar有何不同?见jar
运行命令,通过-D指定catalina.base属性
java -jar -Dcatalina.base=target target/demo-0.0.1-SNAPSHOT.jar
jessin@JESSINGUO-MB0 META-INF % cat MANIFEST.MF
Manifest-Version: 1.0
Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx
Implementation-Title: demo
Implementation-Version: 0.0.1-SNAPSHOT
Spring-Boot-Layers-Index: BOOT-INF/layers.idx
Start-Class: com.jessin.springboot.demo.DemoApplication
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Build-Jdk-Spec: 1.8
Spring-Boot-Version: 2.5.6
Created-By: Maven Jar Plugin 3.2.0
#启动类是JarLauncher
Main-Class: org.springframework.boot.loader.JarLauncher
三、常见自定义配置
3.1 web mvc配置
先将application.properties改为application.yaml
(1)注意yaml的一些特性。默认不配置路径的话,servlet为懒加载,端口号为8080,路径为/。在application.yaml中添加以下参数,修改servlet为启动时加 载,且路径为/practice
spring:
mvc:
servlet:
path: /practice
load-on-startup: 1
访问路径变为:
http://localhost:8080/practice/hello
(2) 自定义内嵌tomcat的端口,注意是内嵌tomcat
server:
port: 9999
访问路径变为:
http://localhost:9999/practice/hello
3.2 logback配置
默认情况下,spring boot使用的是logback来记录日志
(1) 方式一:配置yaml
logging:
#filepathfile
path: "/home/jessin/logs"
#10bps.log.2019-08-03.69.gz
file.max-history: 10
file.max-size: 1GB
#file: "$catalina.base/logs/bps.log"
pattern:
#
file: "%dISO8601 [%-5level] [%thread] |%L|%-40.40logger0|QTraceID[%Xqtraceid]|---%msg%n"
console: "%dISO8601 [%-5level] [%thread] |%L|%-40.40logger0|QTraceID[%Xqtraceid]|---%msg%n"
level:
#logger
root : info
com.jessin.practice.spring.boot.controller.HelloController: debug
(2) 方式二:配置logback-spring.xml
上面只提供了一个file appender和一个console appender,如果需要多个appender,则需要自定义配置文件logback-spring.xml
。
注意不是logback.xml,如果配置logback.xml,spring boot启动会根据logback.xml重新初始化
<?xml version="1.0" encoding="UTF-8"?>
<!-- slf4j -->
<configuration debug="true" scan="true" scanPeriod="30 seconds">
<!-- -->
<property name="log.dir" value="$catalina.base/logs" />
<property name="encoding" value="UTF-8" />
<!--<property name="normal-pattern" value="%dMM-dd HH:mm:ss %-5level [%thread]
%logger10.%M:%L %msg%n" /> -->
<property name="normal-pattern"
value="%dISO8601 [%-5level] [%thread] |%L|%-40.40logger0|QTraceID[%Xqtraceid]|---%msg%n" />
<property name="console-pattern"
value="%dyyyy-MM-dd HH:mm:ss|%.-5level|%-40.40logger0|%msg%n" />
<property name="plain-pattern" value="%dMM-dd HH:mm:ss %msg%n" />
<!-- log file default -->
<appender name="default"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>$log.dir/demo.log</File>
<prudent>false</prudent>
<Append>true</Append>
<encoder>
<pattern>$normal-pattern</pattern>
<charset>$encoding</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>$log.dir/demo.%dyyyy-MM-dd-HH.log
</fileNamePattern>
</rollingPolicy>
</appender>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>$normal-pattern</pattern>
<charset>$encoding</charset>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="default" />
<appender-ref ref="console" />
</root>
</configuration>
3.3 mybatis配置
(1) 引进starter
<!--
1.0.0版本无法扫描classpath:*Mapper.xml
1.3.0可以,注入的是String[],
但是需要使用@MapperScan或者对单独的接口标注@Mapper
-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
(2) yaml配置数据源
#变量自己替换掉
spring:
# 如果不配置的话,默认数据源为:com.zaxxer.hikari.HikariDataSource
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://$dbIp:3306/spring?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: $dbUser
password: $dbUserPassword
(3) yaml配置mapper文件路径
mybatis:
mapper-locations: "classpath:mappers/*Mapper.xml"
(4) 增加User model和UserMapper接口,设置Mapper xml
controller访问mapper
四、端点监控查看spring boot内部运行状态
4.1 引进starter
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
4.2 配置yaml
management:
endpoints:
web:
# base-path: /hello
exposure:
#15endpointendpointhealthinfo
#http://localhost:9999/practice/actuator
include: "*"
# server:
# port: 8888
4.3 相关http接口
查看自动化配置类的生效情况: http://localhost:9999/practice/actuator/conditions
查看注入的bean: http://localhost:9999/practice/actuator/beans
查看mapping: http://localhost:9999/practice/actuator/mappings
五、自动化配置原理
spring boot启动时从类路径找到所有META-INF/spring.factories配置文件,加载key=org.springframework.boot.autoconfigure. EnableAutoConfiguration对应的自动化配置类,之后自动化配置类根据条件注解自动注入相应的bean,如果自定义配置了bean,则使用自定义的,否则使用默认的。
添加注解有@ConditionalOnClass/@ConditionalOnBean/@ConditionalOnProperty,都是基于@conditional。
其中spring boot已经在autoconfigure包中自定义好了spring支持的自定义配置类:如DispatcherServletAutoConfiguration自动配置DispatcherServlet。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>2.5.6</version>
</dependency>
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\\
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\\
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\\
六、传统spring项目改造为spring boot
-
将依赖替换为starter(web-starter/mybatis-starter),并解决依赖冲突,去除重复引入的jar,编译通过。
-
引进入口类和application.yaml,并替换掉xml。定义相关的异常日志报告。
-
去掉web.xml配置,qa环境去除内嵌tomcat,改用sci。
更多精彩样例,请关注公众号:
以上是关于spring boot入门的主要内容,如果未能解决你的问题,请参考以下文章