SpringBoot——SpringBoot配置

一、 配置文件

在前一篇博客里面,快速创建SpringBoot项目中,我们提到在默认的resources文件夹中有一个application.properties配置文件,我们可以在配置文件中自己设定配置,比如想修改服务器的端口号码,我们可以写入server.port=8081而使得服务器的端口号码发生改变。
SpringBoot默认使用两种的配置文件作为全局的配置文件,配置文件名是固定的

  • application.properties
  • application.yml
    SpringBoot配置文件可以用来修改SpringBoot自动配置的默认值。

YAML (YAML Ain’t Markup Language),以前的配置文件,大多使用XML使用配置文件;而yml是以数据为中心

server:
  port: 8081

而xml写法大概如下:

<server>
	<port>
		8081
	</port>
</server>

在这里插入图片描述

二、YAML语法

2.1 基本语法

k:**_**v:表示一对键值对(空格必须要有)
以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一层级的。属性和值也是大小写敏感的。

2.2 值的写法

字面量:普通的值(数字,字符串,布尔)
k: v 字面量直接来写,字符串默认不用加上单引号或者双引号
  “”:双引号,不用转义字符串里面的特殊字符,比如name: "zhangsan \n lisi" 输出:zhangsan 换行 lisi
  ‘’:单引号,会转义特殊字符,特殊字符最终只是一个普通的字符串数据,比如name: "zhangsan \n lisi" 输出:zhangsan \n lisi
对象(属性和值——键值对):
  k: v 对象还是k: v的方式,只是要注意缩进

friends:
	lastName: zhangsan
	age: 20

行内写法:

friends: {
   lastName: zhangsan,age: 18}

数组(集合List、Set):
  用-值表示数组中的一个元素

pets:
 -cat
 -dog
 -pig

  行内写法

pets: [cat,dog,pig]

三、 配置文件值注入

① 配置文件application.yml

person:
  lastName: zhangsan
  age: 18
  boss: false
  birth: 2017/12/12
  maps: {
   k1: v1,k2: 12}
  lists:
    - lisi
    - zhaoliu

  dog:
    name: 小狗
    age: 2

对应JavaBean

/**
 * 将配置文件中配置每一个属性的值,映射到这个组件中
 * @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
 * prefix = "person":配置文件中哪个下面的所有属性进行一一映射
 *
 *
 * 只有这个组件是容器中的组件才能起作用
 */
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
   
    private String lastName;
    private Integer age;
    private Boolean boss;
    private Date birth;

    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;

我们可以导入配置文件处理器,以后编写配置就有提示了

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

② 配置文件application.properties

# idea使用的是utf-8
# 配置person的值
person.last-name=张三
person.age=18
person.birth=2017/12/25
person.boss=false
person.maps.k1=v1
person.maps.k2=14
person.lists=a,b,c
person.dog.name=dog
person.dog.age=2

③ 配置文件注入值数据校验

3.1 @Value获取值和@ConfigurationProperties获取值比较

@ConfigurationProperties @Value
功能 批量注入配置文件中的属性 一个个指定
松散绑定 比如firstName和first-name 不支持
SpEL 不支持 支持@Value("#{11*2}")
JSR303数据校验@Email 支持 不支持

配置文件yml还是properties它们都能获取到值。
| 复杂类型封装 | 支持 | 不支持 |

如果只是需要获取一下配置文件中的某项时,我们就使用@Value。

3.2 @PropertySource和@ImportResource

@PropertySource:加载指定的配置文件
@ConfigurationProperties:默认从全局配置文件中获取值

@Component
@PropertySource(value = {
   "classpath:person.properties"})
@ConfigurationProperties(prefix = "person")
public class Person {
   
    /**
     * 在Spring中,我们常在xml中进行如下的bean配置
     * <bean class="Person">
     *     <property name="lastName" value="**"></property>
     * </bean>
     * 那么使用@Value()就如同Spring中的配置一样
     * 其中在Value()中可以填写字面量/${key}从环境变量、配置文件中获取值的/#{SpEL}
     */
//    @Value("${person.last-name}")
//    @Email
    private String lastName;
//    @Value("#{11*2}")
    private Integer age;
//    @Value("true")
    private Boolean boss;
    private Date birth;

    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;

在这里插入图片描述
@ImportResource:导入Spring的配置文件,让配置文件里面的内容生效。
想让Spring中的配置文件生效,加载进来;@ImportResource标注在一个配置类

@SpringBootApplication
@ImportResource(value ={
   "classpath:beans.xml"})
public class Springboot01HelloworldQuickstartApplication {
   

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

}

在这里插入图片描述
SpringBoot推荐给容器中添加组件的方式:使用全注解的方式
① 配置类 》Spring配置文件
②使用@Bean给容器中添加组件

/**
 *@Configuration:指明当前类是一个配置类,就是替代之前的Spring配置文件
 * 在配置文件中用<bean></bean>标签添加组件
 */
@Configuration
public class MyAppConfig {
   

    /**
     * 将方法的返回值添加到容器中,容器中这个组件默认的id就是方法名
     * @return
     */
    @Bean
    public HelloService helloService(){
   
        return new HelloService();
    }
}

四、配置文件占位符

4.1 随机数

                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值