【Java】SpringBoot通过yml配置文件配置自定义信息,并获取到自定义的信息


前言

我们在使用SpingBoot开发过程中,经常会遇到需要配置一些固定的配置信息,当然需要可动态修改的配置,大多是选择存储在数据库中的,但是当出现不同机构的某些固定信息,每次修改数据库也会比较麻烦,但是我们可以通过yml配置文件,配置每个机构环境的自己的yml,并且在配置文件中加入独有的配置信息,就可以很方便的达到目的,例如配置机构编码名称,接口加签密钥等信息。


一、yml多环境配置

1.先创建一个系统运行时使用yml

提示:其中的dev代表你要使用的yml的别名,例如我这边配置的是dev,那么那个yml文件的名称就是:application-dev.yml 依次类推

spring:
  profiles:
    active: dev

2.具体的yml配置信息

#开发环境配置
server:
  port: 9800
spring:
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 10MB
  datasource:
    druid:
      url: jdbc:sqlserver://127.0.0.1:1433;databaseName=Test;
      driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
      username: root
      password: root
      initial-size: 5 #初始化时建立物理连接的个数。
      max-active: 20  #最大连接池数量
      min-idle: 5     #最小连接池数量
      max-wait: 3000  #获取连接时最大等待时间,单位毫秒
      ...........

二、yml增加配置信息

1.yml最下方增加你的自定义配置信息

提示:如果你配置的内容是0开头的字符串,例如:01;这种就需要在配置文件中给他加上字符串:"01"
代码如下:

app:
  config:
    hospital-name: XXXX医院
    hospital-code: 666666

2.编写获取配置代码

创建一个HospitalConfig类,用来专门获取配置信息
提示:注意我的${app.config.hospital-name}" 和你yml的别名要保持一致,才能获取到对应的配置内容
代码如下(示例):

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

/**
 * @author 孤巷.
 * @description
 * @date 2024/11/22 上午 9:21
 */
@Component
public class HospitalConfig {

    @Value("${app.config.hospital-name}")
    private String hospitalName;

    @Value("${app.config.hospital-code}")
    private String hospitalCode;

    // Getters
    public String getHospitalName() {
        return hospitalName;
    }

    public String getHospitalCode() {
        return hospitalCode;
    }
}

3.获取配置信息

在你需要获取配置信息的Service里面引入HospitalConfig类,就可以直接使用了


    @Resource
    HospitalConfig hospitalConfig;

	public String test(){
		//这里取到的内容,就是你所需要的配置信息了!
	 	String orgId = hospitalConfig.getHospitalCode();//666666
	    String orgName = hospitalConfig.getHospitalName();//XXXX医院
	}


总结

以上就是今天要分享的内容,这个功能还是会比较实用的。

### 创建和使用自定义 YML 配置文件Spring Boot 中,可以通过多种方式加载自定义的 YAML (YML) 配置文件。以下是具体的方法: #### 方法一:通过 `YamlMapFactoryBean` 加载自定义 YML 文件 可以利用 `YamlMapFactoryBean` 来解析注册自定义的 `.yml` 或者 `.yaml` 文件到环境变量中。 ```java import org.springframework.context.annotation.Bean; import org.springframework.core.io.ClassPathResource; import org.springframework.stereotype.Component; import org.yaml.snakeyaml.Yaml; @Component public class CustomConfigLoader { @Bean public static PropertySourcesPlaceholderConfigurer properties() { final PropertySourcesPlaceholderConfigurer props = new PropertySourcesPlaceholderConfigurer(); try { Map<String, Object> yamlProps = loadYaml(new ClassPathResource("custom-config.yml")); MutablePropertySources sources = ((AbstractEnvironment)props.getEnvironment()).getPropertySources(); .sources.addFirst(new PropertiesPropertySource("customYaml", convertToProperties(yamlProps))); } catch (IOException e) { throw new RuntimeException(e); } return props; } private static Map<String,Object> loadYaml(Resource resource) throws IOException{ Yaml yaml = new Yaml(); InputStream is = null; try { is = resource.getInputStream(); return yaml.loadAs(is, Map.class); } finally { IOUtils.closeQuietly(is); } } } ``` 此代码片段展示了如何创建一个组件类来处理外部化的配置文件将其内容注入到应用程序上下文中[^1]。 #### 方法二:在 application.yml 中指定额外的 profile-specific 配置文件 可以在项目的根目录下的 `application.yml` 文件内声明要引入其他特定于profile的配置文件列表。 ```yaml spring: profiles: include: - order-config - user-config ``` 这段设置会使得当应用启动时自动尝试去寻找名为 `order-config.yml` 和 `user-config.yml` 的文件将它们的内容合进来[^2]。 #### 方法三:编写 Java Config 类通过 `@ConfigurationProperties` 绑定数据 对于版本高于等于 1.5.x 的 Spring Boot 应用程序来说,如果想要直接操作 YAML 结构的数据,则应该考虑采用这种方式而不是依赖 `@PropertySource` 注解因为后者不支持原生地读取`.yml`格式的资源文件。 首先定义一个 POJO 对象用来映射配置项: ```java @ConfigurationProperties(prefix="myapp") public class MyAppSettings { private String title; private int port; // getters and setters... } ``` 接着在一个 Configuration 类里边启用它: ```java @EnableConfigurationProperties(MyAppSettings.class) public class AppConfig {} ``` 最后,在任意位置放置你的自定义 .yml 文件(比如 src/main/resources/myapp-settings.yml),按照前缀匹配的方式填写键值对即可完成绑定过程[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值