开发环境:IDEA2023
1、IDEA中配置MAVEN
下载安装详见博客(配置阿里云镜像):https://blog.csdn.net/oHaoEr/article/details/128981955
Tips:环境变量中系统变量和用户变量可能都需要配置一下
IDEA中配置详见博客:https://blog.csdn.net/qq_45056135/article/details/124933705
java: 错误: 不支持发行版本 6解决方案:http://www.dtmao.cc/ios/94814.html
2、IDEA中新建一个MAVEN项目,在pom.xml中加入下面依赖
<!--本项目使用的springboot版本,下面相关依赖均被本版本控制-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.5</version>
</parent>
<dependencies>
<!-- web开发使用-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
3、编写启动类
package com.zhaojianhui;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author zhaojianhui
* @date 2023-06-03-20:24
* @project Default (Template) Project
*/
@SpringBootApplication//这是一个springboot应用
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
}
4、编写controller类
package com.zhaojianhui.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
/**
* @author zhaojianhui
* @date 2023-06-03-20:36
* @project springboot3_study
*/
@RestController//返回纯文本或Json,而不是跳动页面
public class HelloController {
@GetMapping("/hello")
public String hello(){
return "hello,springboot3";
}
}
5、启动启动类,执行完成后浏览器输入:localhost:8080,即可看到返回的内容:hello,springboot3
6、部署程序
<!-- 打包插件-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
接着运行maven的clean和package指令:

接着在cmd命令行输入:java -jar boot3_demo1-1.0-SNAPSHOT.jar,应用启动成功,访问localhost:8080/hello看到结果
如果对于jar文件想改配置,在同级目录下创建application.properties文件,里面进行对应修改即可

7、Spring Initializer快速创建项目
8、组件注册
package com.zhaojianhui.boot3_demo2.config;
import com.zhaojianhui.boot3_demo2.bean.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.Scope;
/**
* @author zhaojianhui
* @date 2023-06-06-0:27
* @project springboot3_study
*/
@Import(FunctionalInterface.class)//导入第三方类作为组件,默认组件名为全类名
@Configuration//这是一个配置类
public class AppConfig {
//配置类
@Scope//控制单例多例
@Bean//往容器中放组件,默认为单例,组件在容器中的名字默认是其方法名,可以直接修改注解的默认值
public User user() {
var user = new User();
user.setId(1L);
user.setName("张三");
return user;
}
}
9、条件注解
package com.zhaojianhui.boot3_demo2.config;
import com.zhaojianhui.boot3_demo2.bean.User;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
/**
* @author zhaojianhui
* @date 2023-06-06-0:41
* @project springboot3_study
*/
public class AppConfig2 {
//条件注解
//条件中有下面类才给容器注入User组件
@ConditionalOnClass(name="com.zhaojianhui.boot3_demo2.bean.Cat")//也可以value=
@Bean
public User user(){
return new User();
}
}
10、属性绑定
给容器中注册组件---->使用@ConfigurationProperties声明和配置文件哪些配置项进行
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @author zhaojianhui
* @date 2023-06-06-0:25
* @project springboot3_study
*/
//方法一
@Component//放入容器
@ConfigurationProperties(prefix = "pig")//将配置文件中前缀为pig的拿过来绑定
public class User {
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//方法二:在配置类上写上@EnableConfigurationProperties(Sheap.class)//哪些类和配置文件绑定,一般用于导入第三方的属性绑定
11、理解自动配置原理
流程:
- 导入spring-boot-starter-xxx来进行某项开发场景的部署
- 导入了相关场景所有依赖,比如tomcat...
- 每个场景启动器都引入了一个spring-boot-starter核心场景启动器
- 核心场景启动器引入了spring-boot-starter-autoconfigure包,这个包里面把很多配置都写好了
- 只要这些包下的这个类都生效,那么整合功能就写好了。
- 主程序:@SpringBootApplication
- 进行业务开发,无需关心各种整合
举例:整合Redis
- 第一步:选场景启动器,这里选取的是springboot下的redis场景
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
- 第二步:分析该场景下的自动配置类:ctrl+N搜索RedisAutoConfiguration类,然后发现其中有@EnableConfigurationProperties({RedisProperties.class}),进入该配置类,查看有哪些配置信息:发现它绑定的配置文件前缀为spring.data.redis,里面的属性有database、url、host等等,进入配置文件application.properties里面进行相应更改即可分析组件:分析RedisAutoConfiguration类里有哪些组件StringRedisTemplate,在我们的业务场景中@Autowired自动装配它即可
- 第三步:定制化
法1:改配置文件,但是目前这个组件和配置文件关联不多
法2:自己自定义这个组件放入容器
12、yaml配置文件:application.yml
#k: v(k和v之间有空格,不同层级之间还需要空格,同一层级上下要对齐) server: port: 8081
复杂对象表示:
13、整合日志
底层使用了logback+slf4j
以logging为开始的格式都是日志相关。
快捷记录日志信息:使用lombok包
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.28</version>
</dependency>
package org.zhaojianhui.controller;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author zhaojianhui
* @date 2023-06-03-20:36
* @project springboot3_study
*/
@Slf4j//lombok底层创建了一个Slf4j类的log对象用于记录日志信息
@RestController//返回纯文本或Json,而不是跳动页面
public class HelloController {
//自定义记录日志信息
Logger logger = LoggerFactory.getLogger(getClass());
@GetMapping("/hello")
public String hello(String a, String b) {
//记录传递的参数值
log.info("123321 a:{} b:{}", a, b);
return "hello,springboot3";
}
}
日志级别:
SpringBoot的默认日志级别为INFO
#整个项目以info级别记录日志 logging.level.root=info #org.zhaojianhui.controller.HelloController的这个类以warn级别记录日志信息 logging.level.org.zhaojianhui.controller.HelloController=warn
日志分组:
#后面跟的是包路径,abc是组名 logging.group.abc=org.zhaojianhui.controller,com.service.dao #abc组的所有包下面的类都是debug级别 logging.level.abc=debug #数据库全用debug logging.level.sql=debug #web全用debug logging.level.web=debug
日志文件输出:
#指定日志文件的名字,所有日志信息写入下面的文件里 logging.file.name=demo.log #指定日志文件的名字,所有日志信息写入下面的文件里 #logging.file.name=D:\\demo.log
日志归档(每天的日志单独存到一个文档)与滚动切割(限定一个日志文件大小,超出自动分割为第二个日志文件):