Spring-SpringBoot

SpringBoot

1.概述

SpringBoot对Spring的改善和优化,它基于约定优于配置的思想,提供了大量的默认配置和实现
使用SpringBoot之后,程序员只需按照它规定的方式去进行程序代码的开发即可,而无需再去编写一堆复杂的配置
SpringBoot的主要功能如下:

  • 起步依赖:SpringBoot以功能化的方式将需要的依赖进行组装,并且允许程序员以start的方式进行引入
  • 默认配置:SpringBoot实现了大量依赖框架的默认配置项,程序员无须再进行自己配置
  • 内置Tomcat:SpringBoot内置了一个tomcat,使用它开发的程序无需再进行tomcat部署,可直接运行

总之:SpringBoot最主要作用就是帮我们快速的构建庞大的spring项目,并且尽可能的减少配置,让程序员去关注业务而非配置。

2.入门案例

2.1 代码开发

2.1.1 创建工程,导入依赖

创建一个maven工程,导入依赖

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.3</version>
    </parent>


    <dependencies>
        <!--web依赖启动器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
2.1.2 创建Controller
@RestController
public class IndexController {

    @GetMapping("/index")
    public  String index(){
        return "hello,springboot";
    }
}
2.1.3 创建启动类
//注意一下:启动类的位置必须位于com.itheima下
@SpringBootApplication//启动类专用注解
public class SpringbootDemoApplication {

    public static void main(String[] args) {
        //参数1.当前类名.class
        //参数2:args
        //固定格式
        SpringApplication.run(SpringbootDemoApplication.class,args);
    }
}

2.1.4 启动项目

请添加图片描述

2.1.5 测试

请添加图片描述

2.2 案例解析

  • 做完了入门案例,应该会有下面这样几个疑问:
    1. 工程在引入spring-boot-starter-web依赖的时候,为什么没有指定版本
    2. spring-boot-starter-web是个啥,为什么引入了它之后,就不需要再引入原来做spring开发的那一堆包了
    3. 程序没有部署到tomcat,为什么就可以被访问
    4. 为什么访问程序的时候要用8080端口,谁定义的
2.2.1 版本锁定

项目继承了spring-boot-starter-parent父工程,它内部已经锁定了一些常见依赖的版本号,故而在自己开发的工程中无需再指定依赖的版本。
请添加图片描述

2.2.2 起步依赖

SpringBoot根据场景将各种依赖组装成了一个个的集合(starter),根据功能引入指定的starter即可。
请添加图片描述

2.2.3 内置Tomcat

SpringBoot在中引入一个内置的tomcat,故而无需再将程序部署到位置的tomcat中即可运行。
请添加图片描述

2.2.4 默认配置

SpringBoot的约定大于配置,即SpringBoot的大量配置都有默认值,如果不去写配置就使用默认的。
**比如说:**tomcat默认端口 8080等等
请添加图片描述

3.配置文件

3.1 自定义配置

SpringBoot是基于约定的,很多配置都有默认值,但也允许自定义配置,具体做法是在resources下创建文件:

application.yaml   或者   application.yml  或者  application.properties

注意:目前版本中, SpringBoot启动时会依次加载:yaml、yml、properties文件,优先级依次升高

3.2 YAML介绍

YAML(YAML Ain’t Markup Language),一种数据序列化格式

3.2.1 语法
# 大小写敏感
# 使用缩进表示层级关系
# 缩进的空格数目不重要,但是相同层级的元素必须左侧对齐 
# 参数值和冒号之间必须有空格
# # 表示注释,从这个字符一直到行尾,都会被解析器忽略
server:
  port: 8082  #修改默认端口号
  servlet:
    context-path: /itheima   #修改地址,必须通过此地址访问
3.2.2 数据格式
#简单值
username: 张三
# 对象:键值对的集合
user:
  username: '张三'
  password: '123'
  addressList: # 数组:一组按次序排列的值 -加上空格
  - '北京'
  - '上海'
  - '广州'

3.3 读取配置

  • 方式1: @Value (了解)
    此注解是Spring框架提供的,用来读取配置文件中的属性值并逐个注入到Bean对象的对应属性中
  • 方式2: @ConfigurationProperties(掌握)
    此注解是SpringBoot框架提供的,用来快速将配置文件中的属性值批量注入到某个Bean对象的多个对应属性中
3.3.1 @Value
#自定义配置
user:
  username: '张三' #不要用name,会与计算机用户名冲突
  password: '123'
  addressList: #数组
    - '上海'
    - '北京'
    - '广州'

读取配置文件属性

    @Value("${user.username}") //使用spring提供的value
    private String username;
    @Value("${user.password}")
    private String password;
    @Value("&{user.addressList[1]}")
    private String[] addressList_1;


    @GetMapping("/index")
    public  String index(){
        System.out.println("username:"+username+",password:"+password+",address:"+addressList_1 );

        return "hello,springboot";
    }

请添加图片描述

@Value用来读取配置文件中的属性值并逐个注入到Bean对象的对应属性中

3.3.2 @ConfigurationProperties
3.3.2.1 创建配置类(读取配置类属性)
@Data
@Configuration
@ConfigurationProperties(prefix = "user") //读取配置文件中的配置项到当前类对象中,需要指定前缀
public class UserConfig {
    private String username;
    private String password;
    private List<String> addressList;
}

在使用的地方直接注入配置类

@RestController
public class IndexController {
    @Autowired
    private UserConfig userConfig;
    @GetMapping("/config1")
    public  String config1() {
        System.out.println(userConfig);
        return "hello,springboot";
    }
3.3.2.2 爆红

请添加图片描述

添加下面依赖可以解决图中的红色提示

  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
3.3.3 注意事项

使用value时无法获得集合中的值,必须使用@ConfigurationProperties

3.4 多环境配置

在实际开发中,项目的开发环境、测试环境中配置可能不一致,因此SpringBoot支持多环境配置
主配置

#多环境测试
spring:
  profiles:
    active: dev

#自定义配置
user:
  username: '主配置'
  password: '123'
  addressList: #数组
    - '上海'
    - '北京'
    - '广州'

子配置(开发环境)

user:
  username: '开发环境'
  password: '123'

子配置(测试环境)

user:
  username: '测试环境'
  password: '123'
3.4.1 使用开发环境

请添加图片描述

子配置可以继承父配置的内容

3.5 将项目打包成jar包

在springboot中打包jar包需要添加以下配置

  <!--在pom.xml的project节点中添加下面配置,然后执行maven clean package-->
	<build>
        <finalName>springboot</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
3.5.1 在命令行修改

java –jar springboot.jar --spring.profiles.active=test # 指定使用test环境
请添加图片描述

java –jar springboot.jar --spring.profiles.active=test --server.port=9090 # 指定使用test环境,端口号为9090
请添加图片描述

4.常用功能

4.1 日志输出

Spring支持多种日志级别,通过配置文件,可以输出指定级别的日志

# 包名: 日志级别(常用的级别有4个: debug info warn error)
logging:
  level: #指定每个包接下来要记录的日志级别
    com.itheima: debug
  file: #指定日志输出路径
    name: D:\soft\review\springboot\springboot.log
4.1.1 打印日志的时候,设置级别

在输出日志的时候就需要设置好当前日志内容级别

@RestController
@Slf4j  //添加此注解后,就可以在类中使用一个log的对象了
public class IndexController {

    //读取配置
    @GetMapping("/log")
    public String log(){
        log.debug("AAA");
        log.info("BBB");
        log.warn("CCC");
        log.error("DDD");
        return "hello, springboot";
    }
4.1.2 控制日志的访问级别
# 设置                      输出
# debug                     debug  info  warn  error
# info                      info  warn  error
# warn                      warn  error
# error                     error
4.1.3 访问测试

请添加图片描述

4.2 单元测试

4.2.1 引入依赖

在pom.xml加入单元测试的starter

<!--引入junit依赖启动器-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
</dependency>
4.2.2 编写测试类

注意测试类的位置: 必须在启动类所在包之下

//测试类的位置必须在启动类所在包之下
@SpringBootTest
public class UserConfigTest {
    @Autowired
    private UserConfig userConfig;

    @Test
    public void test1(){
        System.out.println(userConfig);
    }
}

4.3 静态资源

现在项目是一个普通java工程,没有webapp,那么静态资源应该放哪里呢?
SpringBoot默认的静态资源是在classpath:/static/ 目录
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值