开发环境: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
日志归档(每天的日志单独存到一个文档)与滚动切割(限定一个日志文件大小,超出自动分割为第二个日志文件):
- SpringBoot3 SpringBootspringboot3 springboot3 springboot springboot3 springboot系统12306 springboot3 springboot方式basic springboot3 springboot swagger springboot3基础知识springboot基础 springboot springboot2 springboot3 springboot3 springboot mybatis mapper elasticsearch8 elasticsearch springboot3 springboot elasticsearch springboot3 springboot spring