springboot通过配置文件获取yaml的配置值及其避坑点

先说坑:配置完了之后不生效。

原因:直接new出来的对象,必须使用@autowire或者@resource出来才能自动装配上

过程:

1.先配项目中的yaml或者nacos中的yaml:(另起一行顶格)

nc:
  client_id: 123
  client_secret: 123
  pubKey: 123
  secret_level: 123
  baseUrl: http://127.0.0.0:9080
  username: 123
  pwd: 123
  busi_center: 123
  grant_type: 123
  usercode: 123
  repeat_check: 123
  busi_id: 123

2.这里注意三个注解缺一不可

@Data
@Component
@ConfigurationProperties(prefix="nc")
public class NCConfigVo {
    public String  client_id;
    public String  client_secret;
    public String  pubKey;
    public String  secret_level;
    public String  baseUrl;
    public String  username;
    public String  pwd;
    public String  busi_center;
    public String  grant_type;
    public String  usercode;
    public String  repeat_check;
    public String  busi_id;
}

3.测试 注意必须使用自动装配方式,new对象出来一辈子也是空的。!!!!!

  @Resource
    NCConfigVo ncConfigVo;
    @RequestMapping("test")
    public void test(){
        System.out.println(JSON.toJSONString(ncConfigVo));
    }

4.扩展下:如果自定义yaml咋办

 


import org.springframework.boot.env.YamlPropertySourceLoader;
import org.springframework.core.env.PropertySource;
import org.springframework.core.io.support.DefaultPropertySourceFactory;
import org.springframework.core.io.support.EncodedResource;
 
import java.io.IOException;
import java.util.List;
 
public class PropertySourceFactory extends DefaultPropertySourceFactory {
    @Override
    public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {
        if (resource == null) {
            return super.createPropertySource(name, resource);
        }
        List<PropertySource<?>> sources = new YamlPropertySourceLoader().load(resource.getResource().getFilename(), resource.getResource());
        return sources.get(0);
    }
}
@Component
@PropertySource(value="test.yml",factory=PropertySourceFactory.class)
public class TestBean{
 
    @Value("${name}")
    private String name;
}

一般不建议使用第五步骤,除非你想搞屎山程序
 

### 关于Spring Boot YML配置的教程与最佳实践 #### 使用YAML文件替代properties文件 Spring Boot支持使用YAML作为外部化配置的一种方式。相比于传统的`.properties`文件,YAML具有更清晰的层次结构和更好的可读性[^1]。 ```yaml server: port: 8081 spring: datasource: url: jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC username: root password: secret ``` 此段代码展示了如何通过YAML来设置服务器端口以及数据库连接信息。注意缩进对于定义不同级别的属性至关重要。 #### 加载多个环境下的配置文件 为了适应不同的运行环境(如开发、测试、生产),可以创建特定环境的application.yml文件,例如`application-dev.yml`用于开发模式下覆盖默认配置: ```yaml --- spring: profiles: dev server: port: 9090 logging: level: org.springframework.web: DEBUG ``` 当应用程序启动时指定活动profile即可加载对应的配置文件,在命令行可以通过参数`--spring.profiles.active=dev`实现这一。 #### 配置数据源和其他第三方组件 除了基本的服务端口设定外,还可以利用YAML格式轻松管理复杂的数据源或者其他依赖服务的信息。比如下面的例子说明了怎样声明JPA实体扫描包路径及HikariCP池大小调整等细节: ```yaml spring: jpa: hibernate: ddl-auto: update show-sql: true datasource: type: com.zaxxer.hikari.HikariDataSource hikari: minimum-idle: 5 maximum-pool-size: 20 ``` 以上内容不仅限定了Hibernate的行为还指明了要使用的具体数据源类型及其内部线程池特性。 #### 应用程序全局属性定制 有时需要为整个应用提供一些通用性的变量,这时可以在顶层直接定义它们而无需嵌套到其他类别之下。这些自定义键名能够被注入到任何地方以便重用。 ```yaml app: name: MyAwesomeApplication version: 1.0-SNAPSHOT ``` 之后便能借助`${app.name}`这样的表达式获取相应的字符串并应用于日志记录或是界面展示等方面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cai_code

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值