SpringBoot2学习之旅

1. 基础篇

1.1 parent和starter和引导类

  1. parent
  • 所有springboot项目要继承的项目,定义了若干个坐标版本号(依赖管理,而非依赖),以减少依赖冲突的目的
  1. starter
  • springboot中常见项目名称,定义了当前项目使用的所有依赖坐标,以达到减少依赖配置的目的
  1. 引导类
  • springboot的引导类是boot工程的执行入口,运行main方法就可以启动项目
  • springboot工程运行后初始化spring容器,扫描引导类所在包加载bean

1.2 配置文件的优先级

.properties > .yml > .yaml【主流使用yml配置文件】

1.3 yaml语法学习

  1. yaml简介
  • 一种数据序列化格式
  • 优点:
    • 容易阅读
    • 容易与脚本语言交互
    • 以数据为核心,重数据轻格式
  • YAML文件扩展名
    • .yml(主流)
    • .yaml
  1. 语法规则
  • 核心规则:数据前面要加空格与冒号隔开
  • 大小写敏感
  • 属性层级关系使用多行描述,每行结尾使用冒号结束
  • 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
  • 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
  • # 表示注释
  1. yml例子
# 字符串数据
coutry: china
province: beijing
city: beijing
area: haidian

# 数字
port: 8080

# boolean
party: true

# 时间
birthday: 1949-10-01

# 对象
user:
 name: zhangsan
 age: 23

# 数组
likes:
 - game
 - music
 - sleep
likes2: [games,music,sleep]

# 对象数组
users:
 - name: zhangsan
   age: 18
 - name: wangwu
   age: 23
users2: [{name:zhangsan,age:18},{name:lisi,age:23}]
  1. 读取yml数据
  • 使用@Value读取单个数据,属性名引用方法:${一级属性名.二级属性名....}
@RestController
@RequestMapping("/books")
public class BookController{

	//读取yaml数据中的单一数据格式
	@Value("${country}")
	private String country1;

	//读取对象数据
	@Value("${user.name}")
	private String name1;

	//读取数组数据
	@Value("${likes[1]}")
	private String likes1;

	//读取对象数组
	@Valuse("${users[1].age}")
	private String age1;

	@GetMapping
	public String getById() {
		System.out.println("conutry1===>" + conuntry1);
		System.out.println("name1===>" + name1);
		System.out.println("likes1===>" + likes1);
		System.out.println("age1===>" + age1);
		return "springboot is running...";
	}
}
  1. yaml中的变量引用
baseDir: c:\windows
# 使用${属性名}引用数据
tempDir: ${baseDir}\temp  # c:\windows\temp
# 使用引号包裹的字符串,其中的转义字符可以生效
tempDir2: "${baseDir}\temp"  # c:\windows	emp
  1. yml读取全部属性数据
@RestController
@RequestMapping("/books")
public class BookController{

	//使用自动装配将所有的数据封装到一个对象Environment中
	@Autowired
	private Environment env;

	@GetMapping
	public String getById() {
		System.out.println(env.getPropery("user.name"));
		return "springboot is running...";
	}
}
  1. yaml读取引用类型属性数据
datasource:
 driver: com.mysql.jdbc.Driver
 url: jdbc:mysql://localhost/springboot_db
 username: root
 password: root
@Data
//交给spring管理
@Component
//和上边的datasource对应上
@ConfigurationProperties(prefix = "datasource")
public class MyDataSource{
	private String driver;
	private String url;
	private String username;
	private String password;
}

1.4 整合JUnits

  • 引入依赖
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-test</artifactId>
	<scope>test</scope>
</dependency>
  • 名称@SpringBootTest
  • 类型:测试类注解
  • 位置:测试类定义上方
@SpringBootTest
class JuintApplicationTests{
	@Autowired
	private BookService bookService;
	@Test
	public void testSave(){
		bookService.save();
	}
}

1.5 整合MyBatis

  • 引入依赖
<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>2.2.0</version>
</dependency>
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>runtime</version>
</dependency>
  • application.yml中配置相关信息
spring:
 datasource:
  driver-class-name: com.mysql.cj.jdbc.Driver
  url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
  username: root
  password: root
  • 定义数据层接口与映射配置
@Mapper
public interface UserDao{
	@Select("select * from user")
	public List<User> getAll();
}

1.6 整合MyBatis-Plus

  • 导入依赖
<dependency>
	<groupId>com.baomidou</groupId>
	<artifactId>mybatis-plus-boot-starter</artifactId>
	<version>3.4.3</version>
</dependency>
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>runtime</version>
</dependency>
  • application.yml中配置相关信息
spring:
 datasource:
  driver-class-name: com.mysql.cj.jdbc.Driver
  url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
  username: root
  password: root

# 设置Mp相关的配置
mybatis-plus:
 global-config:
  db-config:
   table-prefix: tbl_
  • 使用
@Mapper
public interface BookDao extends BaseMapper<Book>{
}

1.7 整合Druid

  • 导入依赖
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.6</version>
</dependency>
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>runtime</version>
</dependency>
  • application.yml中配置相关信息
# 第一种配置方法
spring:
 datasource:
  driver-class-name: com.mysql.cj.jdbc.Driver
  url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
  username: root
  password: root
  type: com.alibaba.druid.pool.DruidDataSource

# 第二种配置方法【推荐使用这个】
spring:
 datasource:
  druid:
   driver-class-name: com.mysql.cj.jdbc.Driver
   url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
   username: root
   password: root

2. 运维实用篇

2.1 工程打包与发布

  1. 对Springboot项目打包(执行Maven构建命令package)
mvn package
  1. 运行项目
java -jar springboot.java
  1. 注意事项

jar支持命令行启动需要依赖maven插件支持,请确认打包时是否具有SpringBoot对应的maven插件

<build>
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
		</plugin>
	</plugins>
</build>

2.2 临时属性设置

  • 带属性数启动SpringBoot
java -jar springboot.jar --server.port=80
  • 携带多个属性启动SpringBoot,属性间使用空格分隔

2.3 配置文件

  1. SpringBoot种4级配置文件
  • 1级:file:config/application.yml
  • 2级:file:application.yml
  • 3级:classpath:config/application.yml
  • 4级:classpath:application.yml
  1. 作用
  • 1级与2级留作系统打包后设置通用属性,1级常用于经理运行线上整体项目部署方案调控。
  • 3级与4级用于系统开发阶段设置通用属性,3级常用于项目经理进行整体项目属性调控。

2.4 多环境开发

  1. 第一种方法:只用一个application.yml
# 公共配置
spring:
 profiles:
  active: dev
---
# 生产环境
spring:
 config:
  activate:
   on-profile: pro
server:
 port: 80
---
# 开发环境
spring:
 config:
  activate:
   on-profile: dev
server:
 port: 81
---
# 测试环境
spring:
 config:
  activate:
   on-profile: test
server:
 port: 82
  1. 第二种方法:多个.yml文件
  • 主启动配置文件application.yml
spring:
 profiles:
  active: 
  • 环境分类配置文件application-pro.yml
server:
 port: 80
  • 环境分类配置文件application-dev.yml
server:
 port: 81
  • 环境分类配置文件application-test.yml
server:
 port: 82
  1. 多环境分组管理
  • 根据功能对配置文件种的信息进行拆分,并制作独立的配置文件,命名规则如下:
application-devDB.yml
application-devRedis.yml
application-devMCV.yml
  • 使用include属性在激活指定环境的情况下,同时对多个环境进行加载使其生效,多个环境间使用逗号分隔
spring:
 profiles:
  active: dev
  include: devDB,devRedis,devMVC
  • 注意事项
当主环境dev与其他环境有相同属性时,主环境属性生效;其他环境中有相同属性时,最后加载的环境属性生效

2.5 日志

  1. 使用日志工具记录日志步骤
  • 添加日志记录操作
@RestController
@RequestMapping("/books")
public class BookController extends BaseController{
	private static final Logger log = LoggerFactory.getLogger(BookController.class);
	@GetMapping
	public String getById(){
		log.debug("debug...");
		log.info("info...");
		log.warn("warn...");
		log.error("error...");
		retrun "springboot is running...";
	}
}
  • 日志级别
trace:运行堆栈信息,使用率低
debug:程序员调试代码使用
info:记录运维过程数据
warn:记录运维过程报警数据
error:记录错误堆栈信息
fatal:灾难信息,合并计入error
  • 设置日志输出级别
# 开启debug模式,输出调试信息,用于检查系统运行状况
debug: true

# 设置日志级别,root表示根节点,即整体应用日志级别
logging:
 level:
  root: debug
  • 设置日志组,控制指定对应的日志输出级别,也可以直接控制指定包对应的日志输出级别
logging:
 # 设置日志组
 group:
  # 自定义组名,设置当前组中所包含的包
  ebank: cn.zh.controller
 level:
  root: warn
  # 为对应组设置日志级别
  ebank: debug
  # 为对应包设置日志级别
  cn.zh.controller: debug
  1. 日志输出格式控制
  • 设置日志输出格式
# %d:日期
# %m: 消息
# %n: 换行
logging:
 pattern:
  console: "%d - %m%n"
# %clr:颜色
# %p: 日志级别
# %t: 线程名称
# %c:类名
logging:
 pattern:
  console: "%d %clr(%p) --- [%16t] %clr(%-40.40c){cyan} : %m %n"
  1. 日志文件输出记录
  • 设置日志文件
loggin:
 file:
  name: server.log
  • 日志文件详细配置
logging:
 file:
  name: server.log
 logback:
  rollingpolicy:
   max-file-size: 3KB
   file-name-pattern: server.%d{yyyy-MM-dd}.%i.log

3. 开发实用篇

3.1 第三方bean属性绑定

  • 使用@ConfigurationProperties为第三方bean绑定属性
@Bean
@ConfigurationProperties(prefix = "datasource")
public DruidDataSource dataSource() {
	DruidDataSource ds = new DruidDataSource();
	return ds;
}
datasource:
 driverClassName: com.mysql.jdbc.Driver
  • @EnableConfigurationProperties注解可以将使用@ConfigurationProperties注解对应的类加入Spring容器
@SpringBootApplication
@EnableConfigurationProperties(ServerConfig.class)
public class DemoApplication{
}
@Data
@ConfigurationProperties(prefix = "serves")
public class ServerConfig{
}

3.2 松散绑定

  • @ConfigurationProperties绑定属性支持属性名宽松绑定
public class ServerConfig{
	private String ipAddress;
	private int port;
	private long timeout;
}
servers:
# ipAddress: 192.168.1.1
# ip_address: 192.168.1.1
ip-address: 192.168.1.1 # 推荐这种方法
# IP_ADDRESS: 192.168.1.1
 port: 2345
 timeout: -1
  • 宽松绑定不支持注解@Value引用单个属性的方式

3.3 常用计量单位应用

  • SpringBoot支持JDK8提供的时间与空间计量单位
@Component
@Data
@ConfigurationProperties(prefix = "servers")
public class ServerConfig {
	private String ipAddress;
	private int port;
	private long timeout;
	@DruationUnit(ChronoUnit.MINUTES)
	private Duration serverTimeout;
	@DataSizeUnit(DataUnit.MEGABYTES)
	private DataSize dataSize;
}
servers:
 ip-address: 192.168.1.1
 port: 2345
 timeout: -1
 serverTimeOut: 3
 dataSize: 10

3.4 数据校验

  • 添加JSR303规范坐标与Hibernate校验框架对应坐标
<dependency>
	<groupId>javax.validation</groupId>
	<artifactId>validation-api</artifactId>
</dependency>
<dependency>
	<groupId>org.hibernate.validator</groupId>
	<artifactId>hibernate-validator</artifactId>
</dependency>
  • 开启Bean校验功能
@Component
@Data
@ConfigurationProperties(prefix = "servers")
@Validated
pulic class ServerConfig{
}
  • 设置校验规则
@Component
@Data
@ConfigruationProperties(prefix = "servers")
@Validated
public class ServerConfig{
	@Max(value=400, message="最大值不超过400")
	private int port;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值