1. 基础篇
1.1 parent和starter和引导类
- parent
- 所有springboot项目要继承的项目,定义了若干个坐标版本号(
依赖管理 ,而非依赖),以减少依赖冲突的目的
- starter
- springboot中常见项目名称,定义了当前项目使用的所有依赖坐标,以达到
减少依赖配置 的目的
- 引导类
- springboot的引导类是boot工程的执行入口,运行main方法就可以启动项目
- springboot工程运行后
初始化spring容器 ,扫描引导类所在包加载bean
1.2 配置文件的优先级
.properties > .yml > .yaml【主流使用yml配置文件】
1.3 yaml语法学习
- yaml简介
- 一种数据序列化格式
- 优点:
- 容易阅读
- 容易与脚本语言交互
- 以数据为核心,重数据轻格式
- YAML文件扩展名
- 语法规则
- 核心规则:
数据前面要加空格与冒号隔开 - 大小写敏感
- 属性层级关系使用多行描述,每行结尾使用冒号结束
- 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
- 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
- # 表示注释
- yml例子
coutry: china
province: beijing
city: beijing
area: haidian
port: 8080
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}]
- 读取yml数据
- 使用@Value读取单个数据,属性名引用方法:
${一级属性名.二级属性名....}
@RestController
@RequestMapping("/books")
public class BookController{
@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...";
}
}
- yaml中的变量引用
baseDir: c:\windows
tempDir: ${baseDir}\temp
tempDir2: "${baseDir}\temp"
- yml读取全部属性数据
@RestController
@RequestMapping("/books")
public class BookController{
@Autowired
private Environment env;
@GetMapping
public String getById() {
System.out.println(env.getPropery("user.name"));
return "springboot is running...";
}
}
- yaml读取引用类型属性数据
datasource:
driver: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost/springboot_db
username: root
password: root
@Data
@Component
@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>
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>
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
username: root
password: root
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>
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 工程打包与发布
- 对Springboot项目打包(执行Maven构建命令package)
mvn package
- 运行项目
java -jar springboot.java
- 注意事项
jar支持命令行启动需要依赖maven插件支持,请确认打包时是否具有SpringBoot对应的maven插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
2.2 临时属性设置
java -jar springboot.jar --server.port=80
- 携带多个属性启动SpringBoot,属性间使用空格分隔
2.3 配置文件
- SpringBoot种4级配置文件
- 1级:file:config/application.yml
- 2级:file:application.yml
- 3级:classpath:config/application.yml
- 4级:classpath:application.yml
- 作用
- 1级与2级留作系统打包后设置通用属性,1级常用于经理运行线上整体项目部署方案调控。
- 3级与4级用于系统开发阶段设置通用属性,3级常用于项目经理进行整体项目属性调控。
2.4 多环境开发
- 第一种方法:只用一个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
- 第二种方法:多个.yml文件
spring:
profiles:
active:
- 环境分类配置文件application-pro.yml
server:
port: 80
- 环境分类配置文件application-dev.yml
server:
port: 81
- 环境分类配置文件application-test.yml
server:
port: 82
- 多环境分组管理
- 根据功能对配置文件种的信息进行拆分,并制作独立的配置文件,命名规则如下:
application-devDB.yml
application-devRedis.yml
application-devMCV.yml
- 使用include属性在激活指定环境的情况下,同时对多个环境进行加载使其生效,多个环境间使用逗号分隔
spring:
profiles:
active: dev
include: devDB,devRedis,devMVC
当主环境dev与其他环境有相同属性时,主环境属性生效;其他环境中有相同属性时,最后加载的环境属性生效
2.5 日志
- 使用日志工具记录日志步骤
@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: true
logging:
level:
root: debug
- 设置日志组,控制指定对应的日志输出级别,也可以直接控制指定包对应的日志输出级别
logging:
group:
ebank: cn.zh.controller
level:
root: warn
ebank: debug
cn.zh.controller: debug
- 日志输出格式控制
logging:
pattern:
console: "%d - %m%n"
logging:
pattern:
console: "%d %clr(%p) --- [%16t] %clr(%-40.40c){cyan} : %m %n"
- 日志文件输出记录
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:
ip-address: 192.168.1.1
port: 2345
timeout: -1
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>
@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;
}
|