springboot根据bean定义写配置文件application.yaml

本文介绍了如何在SpringBoot中根据bean定义来编写application.yaml配置文件,以便于给bean注入数据。通过在类上添加@ConfigurationProperties注解,并在资源文件中定义yaml配置,可以实现属性绑定。此外,引入lombok的@Data注解和spring-boot-configuration-processor依赖,可以简化bean的getter/setter方法,提高代码可读性。文章还提到了构造绑定的替代注入方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

springboot 中bean定义好了,通过配置文件给bean注入数据如何实现呢?

为省事,我直接把官方的bean例子给搬过来吧,如下:

package com.example;

import java.net.InetAddress;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties("acme")
public class AcmeProperties {

    private boolean enabled;

    private InetAddress remoteAddress;

    private final Security security = new Security();

    public boolean isEnabled() { ... }

    public void setEnabled(boolean enabled) { ... }

    public InetAddress getRemoteAddress() { ... }

    public void setRemoteAddress(InetAddress remoteAddress) { ... }

    public Security getSecurity() { ... }

    public static class Security {

        private String username;

        private String password;

        private List<String> roles = new ArrayList<>(Collections.singleton("USER"));

        public String getUsername() { ... }

        public void setUsername(String username) { ... }

        public String getPassword() { ... }

        public void setPassword(String password) { ... }

        public List<String> getRoles() { ... }

        public void setRoles(List<String> roles) { ... }

    }
}

既然类加了注解@ConfigurationProperties("acme") ,所以我们在resource下面定义一个配置文件application.yaml,内容如下:

个人比较喜欢yaml,简洁可读性更高。在写配置文件时,有时bean的属性非常多不好记,那么可以通过提示更方便,如下:

需要在pom.xml中增加如下依赖,建议放在project的pom.xml中:

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

另外,如果bean属性较多时,get set 方法也非常之多,看起来很笨重,也有一个办法可以使代码看起来更简洁,如下操作:

(1)需要在pom.xml中增加如下依赖,建议放在project的pom.xml中:

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
            <scope>provided</scope>
        </dependency>

(2)在类上加上注解@Data,如果有内部类也要加上@Data,如下所示:

本文主要是做个笔记,如何更方便的根据bean定义写配置文件,以实现注入,其实就是加上两个依赖:spring-boot-configuration-processor 和 lombok

注意:上面的例子也可以通过构造绑定以实现数据的注入,代码修改如下:

package com.wz.controller;

import com.wz.model.AcmeProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@EnableConfigurationProperties(AcmeProperties.class)
public class PropertiesController {

    @Autowired
    private AcmeProperties properties;

    @RequestMapping("constructorbinding")
    public AcmeProperties prop(){
        return properties;
    }

}
package com.wz.model;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.ConstructorBinding;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@Data
@ConstructorBinding
@ConfigurationProperties("acme")
public class AcmeProperties {

    private boolean enabled;

    private InetAddress remoteAddress;

    private final Security security = new Security();

    @Data
    public static class Security {

        private String username;

        private String password;

        private List<String> roles = new ArrayList<>(Collections.singleton("USER"));

    }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值