Spring Boot核心配置与注解

Spring Boot核心配置与注解

Spring Boot全局配置文件

1、application.properties
2、application.yaml

全局配置文件能对一些默认配置值进行修改。Spring Boot使用一个application.properties或者application.yaml的文件作为全局配置文件。
存放路径:src/main/resource目录或者类路径的/config下。

application.properties

在这里插入图片描述
使用Spring Initializr方式构建Spring Boot项目时,会在resource目录下自动生成一个空的application.properties文件,Spring Boot项目启动时会自动加载application.properties文件。
示例

server.port=8443
server.servlet.context-path=/chapter02
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.config.additional-location=

1)使用Spring Initializr方式创建一个名为chapter02的Spring Boot项目,在Dependencies依赖选中Web依赖。
2)为了方便查看application.properties配置文件属性配置的效果,先在chapter02项目的com.example包下创建一个domain包,并在该包下创建两个实体类Pet和Student
Pet.java

package com.example.demain;

public class Pet {
    private String type;
    private String name;
	//省略getter、setter、toString
}

Student.java

package com.example.demain;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.Arrays;
import java.util.List;
import java.util.Map;

@Component  //用于将Person类作为Bean注入Spring容器中
@ConfigurationProperties(prefix="student")  //将配置文件中以student开头的属性注入该类中
public class Student {
    private int id;//学号
    private String name;//姓名
    private List hobby;//爱好
    private String[] family;//家庭成员
    private Map map;
    private Pet pet;//宠物

	...//省略getter setter
	
    public void setPet(Pet pet) {
        this.pet = pet;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", hobby=" + hobby +
                ", family=" + Arrays.toString(family) +
                ", map=" + map +
                ", pet=" + pet +
                '}';
    }
}

其中,@ConfigurationProperties(prefix=“student”)注解的作用是将配置文件中以student开头的属性通过setter方法注入实体类对应属性中。@Component注解的作用是将当前注入属性值的Person类对象作为Bean组件放到Spring容器中,只有这样才能被注解赋值。根本目的是让Spring Boot可以扫描到该组件,除了可以使用@Component,还可以使用@Controller、@Service、@Repository、@Configuration(这些有不同含义,之后详解)
注:使用@ConfigurationProperties注解批量注入属性值时,要保证配置文件中的属性与对应实体类的属性一致,否则无法正确获取并注入属性值。

3)打开chapter02的resource目录下的application.properties配置文件,编写对Student类设置的配置属性
application.properties

server.port=8443
server.servlet.context-path=/chapter02
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

#对Student属性进行配置,完成属性值的注入
student.id= 126
student.name=tom
student.hobby=play,read,sleep
student.family=father,mother
student.map.k1=v1;
student.map.k2=v2;
student.pet.type=dog
student.pet.name=kity

在Spring Boot默认全局配置文件application.properties中通过student.xxx对Student的相关属性进行了配置,这些配置属性会通过@ConfigurationProperties(prefix="student")注解注入对应的属性中。
注:在编写application.properties配置文件时,由于要配置的Person对象属性是我们自定义的,Spring Boot无法自动识别,所用不会有任何书写提示。在实际开发中,为了出现代码提示的效果来方便配置,在使用@ConfigurationProperties注解进行配置文件属性值注入时,可以在pom.xml文件中添加一个Spring Boot提供的配置处理器依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

在pom.xml中添加上述配置依赖后,重构项目即可。
4)为了查看application.properties配置文件是否正确,同时查看属性配置效果,在项目chapter02的测试类Chapter02ApplicationTests中引入Person实体类Bean,并进行输出测试

package com.example.demain;

import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.junit4.SpringRunner;
import com.example.demain.*;

@RunWith(SpringRunner.class)
@SpringBootTest
class Chapter02ApplicationTests {
    @Autowired
    private Student student;
    @Test
    public void contextLoads(){
        System.out.println(student);
    }
}

在这里插入图片描述

Application.yaml

YAML文件格式是Spring Boot支持的一种JSON超集文件格式,相较于传统的Properties配置文件,YAML文件以数据为核心,是一种更为直观且容易被计算机识别的数据序列化格式。application.yaml配置文件的工作原理和application.properties是一样的,只不过YAML格式配置文件看起来更简洁一些。
application.yaml文件使用"key:(空格)value"格式配置属性,使用缩进控制层级关系。
1)value值为普通数据类型(如数字,字符串,布尔等)
当YAML配置文件中配置的属性值为普通数据类型时,可以直接配置对应的属性值,同时对于字符串类型的属性值,不需要额外添加引号

server:
	port: 8081
	path: /hello

上述代码用于配置server的port和path属性,port和path属于同一层级
2)value值为数组和单列表集合
当YAML配置文件中配置的属性值为数组或单列集合类型时,主要有两种书写方式:缩进式写法和行内式写法

缩进式写法还有两种表示形式

person:
	hobby:
		- play
		- read
		- sleep

person:
	hobby:
		play,
		read,
		sleep

上述代码使用两种缩进式写法为person对象的属性hobby赋值,其中一种是通过- 属性值的形式为属性赋值,另外一种是直接赋值并使用英文逗号分隔属性值。
在YAML配置文件中,还可以将上述缩进式写法简化为行内式写法

person:
	habby: [play,read,sleep]

在YAML配置文件中,行内式的写法显然比缩进式更加简洁。使用行内式写法设置属性值时,中括号[]是可以省略的,程序会自动匹配校对属性的值。
3)value值为Map集合和对象
当YAML配置文件中配置的属性值为Map集合或对象类型时,YAML配置文件格式同样可以分为两种书写方式:缩进式写法和行内式写法

其中缩进式写法

person: 
	map:
		k1:v1
		k2:v2

行内式

person:
	map:{k1:v1,k2:v2}

在YAML配置文件中,配置的属性值为Map集合或对象类型时,缩进式写法的形式按照YAML文件格式编写即可,而行内式写法的属性值要用大括号{}包含。
1)在chapter02项目的resources目录下,新建一个application.yaml配置文件

student:
  id: 2
  name: zhangsan
  hobby: [sing,read,sleep]
  family: [father,mother]
  map: {k1: v1,k2: v2}
  pet: {type: cat, name: tom}

在Spring Boot全局配置文件application.yaml中配置了student的相关属性,这些配置属性也将会通过@ConfigurationProperties(prefix="student")注解注入Student
注:这里行内式:后的空格不能省略
2)打开chapter02项目的测试类,再次执行测试方法contextLoads()
在这里插入图片描述

测试方法contextLoads()同样运行成功,并正确打印出了Student实体类对象。
注意:测试之前需要将application.properties配置文件的配置进行注释,因为application.properties配置文件的优先级高于application.yaml配置文件

配置文件属性值的注入

Spring Boot支持多种注入配置文件属性的方式,本节我们将介绍如何使用注解@ConfigurPropertiesValue注入属性

使用@ConfigurationProperties注入属性

Spring Boot提供的@ConfigurationProperties注解用来快速、方便地将配置文件中的自定义属性值批量注入某个Bean对象地多个对应属性中。

@Component  
@ConfigurationProperties(prefix="student")
public class Student {
    private String id;//学号
    public void setId(String id) {
        this.id=id;
    }
}

需要注意的是,使用@ConfigurationProperties注解批量注入属性值时,要保证配置文件的属性与对应实体类的属性名一致,否则无法正确获取并注入属性值。

使用@Value注入属性

@Value注解是Spring框架提供的,用来读取配置文件中的属性值并逐个注入Bean对象的对应属性中。Spring Boot框架对Spring框架中的@Value注解进行了默认继承,所以在Spring Boot框架中还可以使用该注解读取和注入配置文件属性值。

@Component  
public class Student {
	@Value("${student.id}")
    private String id;
}

上述代码中,@Component和@Value用于注入Person的id属性。其中,@Value不仅支持注入Person的id属性,而且还可以直接为id属性赋值,这是@ConfigurationProperties不支持的。
1)在com.ex.domain包下创建一个实体类Person,并使用@Value注解注入属性id和name

package com.example.demain;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class Person {
    @Value("${student.id}")
    private String id;
    @Value("${student.name}")
    private String name;
    @Override
    public String toString() {
        return "Person{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                '}';
    }
}

注:使用@Value进行注入,不需要setter方法,即使你编写了setter方法,spring boot也会忽略。
2)为了查看@Value注解方式的使用效果,打开chapter02项目的测试类Chapter02 ApplicationTests,在该测试类中引入Student实体类Bean,并新增一个测试方法进行输出测试

@Autowired
    private Person person;
    @Test
    public void contextLoads(){
        System.out.println(person);
    }

在这里插入图片描述

两种注解对比分析

对比点@ConfigurationProperties@Value
底层框架Spring BootSpring
功能批量注入配置文件中的属性单个注入
setter方法需要不需要
复杂类型属性注入支持不支持
松散绑定支持不支持
JSR303数据校验支持不支持
SpEL表达式不支持支持

1、底层框架
@ConfigurationProperties注解是Spring Boot框架自带的;而@Value注解是Spring框架支持的,只不过Spring Boot框架对Spring进行了默认支持,所以也可以使用@Value注解的相关功能
2、功能
@ConfigurationProperties能够将配置文件中的属性批量注入Bean对象,而@Value只能一个单独注入。
3、属性setter方法
在使用@ConfigurationProperties注解进行配置文件属性值读取注入时,还必须为每一个属性设置setter方法,通过对应的注解才能够配置文件中的属性——匹配并注入对应的Bean属性上、如果配置文件中没有配置属性值,则会自动将对应的Bean属性设置为空。
@Value完全不需要为属性设置setter方法,该属性会先通过表达式读取配置文件中指定属性值,然后自动注入下发的Bean属性上。如果读取的配置文件属性为空,进行属性注入时程序会自动报错。
4、复杂类型属性注入
@ConfigurationProperties和@Value都能注入配置文件中的属性,不同的是@ConfigurationProperties支持任意数据类型注入,包括基本数据类型和复杂数据类型,而@Value只能注入基本类型的属性。
5、松散绑定
@ConfigurationProperties注解进行配置文件属性值注入时,支持松散绑定语法。例如Person类有一个字符串类型的属性firstName,那么在配置文件中进行属性配置时可以

person.firstName=james //标准写法,对应Person类属性名
person.first-name=james//使用横线'-'分隔多个单词
person.first_name=james//使用下划线'_'分隔多个单词
PERSON.FIRST_NAME=james//使用大小写格式,推荐常量属性配置

如果要注入上述松散绑定语法的属性,那么使用@Value注入是无效的,只能使用@ConfigurationProperties
6、JSR303数据校验
@ConfigurationProperties注解进行配置文件属性值注入时,支持JSR303数据校验,其主要作用是校验配置文件中注入对应Bean是属性的值是否符合相关值得规则

@Component  
@ConfigurationProperties(prefix="student")
@Validated //引入Spring框架支持得数据校验规则
public class Student {
	@Email //对属性进行规则匹配
    private String email;
    public void setEmail(String email) {
        this.email=email;
    }
}

上述代码中,使用@ConfigurationProperties注解注入配置文件属性值时,在实体类Example上引入@Validated注解进行数据校验,在属性email上引入@Email注解进行邮件规则校验。如果注入得配置文件属性值不符合相关校验规则,程序自动报错、@Value注解不支持JSR303数据校验功能。
7、SpEL表达式
@Value注解注入配置文件属性时,支持SpEL表达式语法,即"#{xx}"。例如Person类由一个整数类型得属性id,直接使用SpEL表达式语法进行属性注入

@Value("#{5*2}")
private int id;

直接使用@Value注解支持的SpEL表达式注入Bean属性,而@ConfigurationProperties注解不支持此功能。
在实际开发中,如何选择
1)如果只是针对某一个业务需求,要引入配置文件中得个别属性值,推荐使用@Value
2)如果针对某个JavaBean类,需要批量注入属性值,则推荐使用@ConfigurationProperties

Spring Boot自定义配置

Spring Boot免除了项目中大部分的手动配置,对于一些特定情况,我们可以通过修改全局配置文件以适应具体生产环境,可以说,几乎所有的配置都可以写在全局配置文件中,Spring Boot会自动加载全局配置文件从而免除我们手动加载的烦恼。但是,如果我们自定义配置文件,Spring Boot是无法识别这些配置文件的,此时就需要我们手动加载。

使用@PropertySource加载配置文件

如果要加载自定义配置文件,可以使用@PropertySource和@Configuration注解实现。@PropertySource注解可以指定自定义配置文件的位置和名称,@Configration注解可以将实体类指定为自定义配置类。如果需要将自定义配置文件中的属性值注入实体类属性,可以使用@ConfigurationProperties或@Value注入属性值。
1)打开Spring Boot项目chapter02的resources目录,在项目的类路径下新建一个test.properties自定义配置文件,在该配置文件中编写需要设置的配置属性
test.properties

test.id=110
test.name=test

2)在com.example.domain包自定义一个配置类MyProperties

package com.example.demain;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

@Configuration  //自定义配置类
@PropertySource("classpath:test.properties")  //指定自定义配置文件位置和名称
@EnableConfigurationProperties(MyProperties.class)  //开启对应配置类的属性注入功能
@ConfigurationProperties(prefix = "test")   //指定配置文件注入属性前缀
public class MyProperties {
    private int id;
    private String name;
	//省略属性getter和setter方法
	//省略toString()方法
}

@Configuration注解用于表示当前类是一个自定义配置类,该类会作为Bean组件添加到Spring容器中,这里等同于@Component注解。
@PropertySource(“classpath:test.properties”) 注解指定了自定义配置文件的位置和名称,此实例表示自定义配置文件为classpath类路径下的test.properties文件。
@ConfigurationProperties(prefix = “test”)注解将上述自定义配置文件test.properties中以test开头的属性值注入该配置类属性中。
@EnableConfigurationProperties(MyProperties.class)注解表示开启对应配置类MyProperties的属性注入功能,该注解是配合@ConfigrationProperties使用的。如果自定义配置类使用了@Component注解而非@Configuration注解,那么@EnableConfigurationProperties注解可以省略。
3)打开chapter02项目的测试类Chapter02ApplicationTests,在该测试类中引入MyProperties类型的Bean,并新增一个测试方法进行输出测试

    @Autowired
    private MyProperties myProperties;
    @Test
    public void myPropertiesTest(){
        System.out.println(myProperties);
    }

在这里插入图片描述

使用@ImportResource加载XML配置文件

传统的Spring项目配置主要基于XML文件。Spring Boot框架在Spring 4.x基础上进行了改进,默认不再使用XML文件配置项目,且XML配置文件不会加载到Spring容器中。如果希望将外部的XML文件加载到程序中,可以使用@ImportResource注解加载配置文件。
@ImportResource注解标注在一个配置类上,通常放置在应用启动类上,使用时需要指定XML配置文件的路径和名称。
1)在chapter02项目下新建一个com.example.config包,并在该包下创建一个类MyService

package com.example.config;

public class MyService {
}

一个空的MyService类,而该类目前没有添加任何配置和注解,因此还无法正常被Spring Boot扫描和识别。
2)打开chapter02项目的resources目录,在该目录下创建一个名为beans.xml的xml自定义配置文件,在该配置文件中将MyService配置为Bean
beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="myService" class="com.example.config.Service"/>
</beans>

3)编写完Spring的XML配置文件后,Spring Boot默认是无法识别的,为了保证XML配置文件生效,需要在项目启动类Chapter02Application上添加@ImportResource注释来指定XML文件位置。

package com.example.demain;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;

@ImportResource("classopath:beans.xml") //加载自定义XML配置文件位置
@SpringBootApplication
public class Chapter02Application {

    public static void main(String[] args) {
        SpringApplication.run(Chapter02Application.class, args);
    }
}

4)打开chapter02项目的测试类Chapter02ApplicationTest,在该测试类中ApplicationContext实体类Bean,并新增一个测试方法进行输出测试

    @Autowired
    private ApplicationContext applicationContext;
    @Test
    public void iocTest(){
        System.out.println(applicationContext.containsBean("myService"));
    }

在这里插入图片描述

使用@Configuration编写自定义配置类

上面讲解了如何在Spring Boot中引入自定义的XML配置文件,这种配置方式在实际开发中的特殊情况下才会使用。在Spring Boot开发中,"约定大于配置"的思想,更推荐使用配置类的方式替代XML配置。
使用@Configuration注解可以指定配置类,他的作用和XML配置是一样的,配置类中@Bean注解方法返回的对象都将作为Bean注入Spring容器,并且默认情况下,使用@Bean注解的方法名就是组件名。
1)在chapter02项目的com.example.demain.config包下,新建一个类MyConfig,并使用Configration注解将该类声明一个配置类
MyConfig.java

package com.example.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration  //定义该类是一个配置类
public class MyConfig {
    @Bean   //将返回值对象作为组件添加到Spring容器中,该组件id默认为方法名
    public MyService myService(){
        return new MyService();
    }
}

MyConfig是@Configuration注解声明的配置类(类似于声明一个XML配置),该配置类会被Spring Boot自动扫描识别;使用@Bean注解的myService()方法,其返回的对象会作为组件添加到Spring容器中,并组件的id默认是方法名myService。
2)将之前的启动类的@ImportResource注解注释,执行项目测试类Chapter02ApplicationTests中测试方法iocTest()
在这里插入图片描述
注:需要将config包与启动类在同一目录下,这样spring才会扫描到配置类。

Profile多环境配置

在实际开发中,应用程序通常需要部署到不同的运行环境中,如开发环境、测试环境、生产环境等。不同的环境可能需要不同的环境配置,针对这种情况,显然手动修改配置文件适应不同的开发环境的做法是不太现实的,此时通常会对项目进行多环境配置。Spring Boot框架提供了多环境配置的方式,分别是Profile文件多环境配置和@Profile注解多环境配置。

使用Profile文件进行多环境配置

在Spring Boot框架中,使用Profile配置文件进行多环境配置时,该配置文件名必须满足application-{profile}.properties的格式,其中{profile}对应具体的环境标识。

application-dev.properties  //开发环境配置文件
application-test.properties //测试环境配置文件
application-prod.properties //生产环境配置文件

如果要使用上述对应环境的配置文件,只需要在Spring Boot全局配置文件中激活指定环境的配置文件即可。
例如,在控制台执行下列命令激活环境配置

java -jar xxx.jar --spring.profiles.active=dec

在项目全局配置文件中配置属性激活配置

spring.profile.active=dev

1)打开chapter02项目的resources目录,在该目录下按照Profile文件命名规则创建不同运行环境对应的配置文件,这里分别创建application-dev.properties、application-test.properties、application-prod.properties多环境配置文件,并在各个配置文件中对服务端口进行不同的设置
application-dev.properties

server.port=8081

application-test.properties

server.port=8082

application-prod.properties

server.port=8083

2)打开chapter02项目的resource目录下的全局配置文件application.properties,在该配置文件中配置spring.profiles.active属性选择性激活Profile文件设置

spring.profiles.active=dev

3)启动,查看控制台输出
在这里插入图片描述

使用@Profile注解进行多环境配置

@Profile注解注意作用于类,并通过value属性指定配置环境(等同于Profile文件名称中的profile值)。使用@Profile注解配置的环境,同样需要在全局配置文件中激活。
1)在chapter02项目的com.example.domain.config包下,创建一个用于配置数据库的接口文件DBConnector

package com.example.demain.config;

public interface DBConnector {
    public void configure();
}

2)在com.example.demain.config包下,创建三个实现了DBConnector接口的类DevDBConnector、TestDBConnector、ProdDBConnector并重写了configure()方法,分别模拟连接配置不同的数据。
DevDBConnector

package com.example.demain.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

@Configuration
@Profile("dev")
public class DevDBConnector implements DBConnector{
    @Override
    public void configure(){
        System.out.println("数据库配置环境dev");
    }
}

TestDBConnector

package com.example.demain.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

@Configuration
@Profile("test")
public class TestDBConnector implements DBConnector{
    @Override
    public void configure(){
        System.out.println("数据库配置环境test");
    }
}

ProdDBConnector

package com.example.demain.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

@Configuration
@Profile("prod")
public class ProdDBConnector implements DBConnector{
    @Override
    public void configure(){
        System.out.println("数据库配置环境prod");
    }
}

3)在全局配置文件application.properties中设置spring.profiles.active属性激活使用@Profile注解构建的多环境配置。
4)为了测试@Profile注解多环境配置的效果,在chapter02项目中新建一个com.example.demain.controller包,并在该包下创建一个表示数据库连接配置的DBController类进行测试
DBController.java

package com.example.demain.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DBController {
    @Autowired
    private DBConnector dbConnector;
    @GetMapping("/showDB")
    public void showDB(){
        dbConnector.configure();
    }
}

5)启动chapter02项目的Chapter02Application启动类
在这里插入图片描述

随机值设置以及参数间引用

在Spring Boot配置文件中设置属性时,除了可以像前面示例中显示的配置属性值外,还可以使用随机值和参数间引用对属性值进行设置。

随机值设置

在Spring Boot配置文件中,随机值设置使用到了Spring Boot内嵌的RandomValuePropertySource类,对一些隐秘属性值或者测试用例属性值进行随机值注入。随机值设置的语法格式为${random.xxx}xxx表示需要指定生成的随机数类型和范围,他可以生成随机的整数、通用唯一识别码或字符串

my.string=${random.value}    //配置随机字符串
my.string=${random.int}      //配置随机的整数
my.bignumber=${random.long}  //配置随机long类型值
my.uuid=${random.uuid}       //配置随机UUID类型值
my.number.less.than.ten=${random.int(10)}  //配置小于10的随机整数
my.number.in.range=${random.int[1024,65536]}//配置范围在1024,65536之间的随机整数

参数间引用

在Spring Boot配置文件中,配置文件的属性值还可以进行参数间的引用,也就是说,先前定义的属性可以被引用,并配置文件可以解析引用的属性值。使用参数间引用的好处就是,在多个具有相互关联的配置属性中,只需要对其中一处属性预先配置,其他地方都可以引用,省去了后续多处修改的麻烦。
参数间引用的语法格式为${xxx}xxx表示先去在配置文件中已经配置过的属性名

app.name=MyApp
app.description=${app.name} is a Spring Boot application

1)在chapter02的全局配置文件application.properties中分别通过随机值和参数间应用的方式添加两个测试属性

tom.age=${random.int[10,20]}
tom.description=Tom的年龄可能是${tom.age}

2)测试类

    @Value("${tom.description}")
    private String description;
    @Test
    public void placeholderTest(){
        System.out.println(description);
    }

这里会出现中文乱码,这是spring boot扫描properties文件底层使用的是GBK编码,有两种解决方式。
1、修改IDEA配置
File->settings
在这里插入图片描述
在这里插入图片描述
将三个选改为UTF-8,并勾选Transprent…
重启即可
2、改为使用yaml文件
spring boot扫描yaml文件底层使用的是UTF-8,这样不会乱码
在这里插入图片描述

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值