SpringBoot3

发布时间 2023-06-08 15:46:23作者: zhaojianhui

开发环境: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、理解自动配置原理

流程:

  1. 导入spring-boot-starter-xxx来进行某项开发场景的部署
    1. 导入了相关场景所有依赖,比如tomcat...
    2. 每个场景启动器都引入了一个spring-boot-starter核心场景启动器
    3. 核心场景启动器引入了spring-boot-starter-autoconfigure包,这个包里面把很多配置都写好了
    4. 只要这些包下的这个类都生效,那么整合功能就写好了。
  2. 主程序:@SpringBootApplication
  3. 进行业务开发,无需关心各种整合

举例:整合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

  日志归档(每天的日志单独存到一个文档)与滚动切割(限定一个日志文件大小,超出自动分割为第二个日志文件):