java 配置文件

配置文件

1.Springboot读取配置文件

1.1 使用@Value 获取简单配置

配置文件: demo.properties/demo.yml

#端口配置
port=23001
# 。。。

代码中使用:Demo.java

Class Demo{
    
    
    @Value("${port}")
    private String port;

    // ....
}

1.2 使用@ConfigurationProperties(prefix = “XXXX”)获取复杂配置(即映射成实体类)

配置文件:

data-upload:
  animals:
    - dog
    - cat
    - fisher

  # 可以支持@Value
  animalsList: aa,ss,dd

  relations:
    dog: wangcai
    cat: maomi
    fisher: huahua

  # 不支持@Value
  relations1: {
    
    key1: value1, key2: value2}

代码中使用:

@ConfigurationProperties(prefix = "data-upload")
@Component
@Data
public class MyConfig {
    
    
    List<String> animals;
    HashMap<String, String> relations;
}

@Service
public class TsetConfig {
    
    

    @Autowired
    MyConfig myConfig;

    @Value("${data-upload.animalsList}")
    List<String> animals;

    @PostConstruct
    public void test_1(){
    
    
        System.out.println(myConfig.getAnimals().toString());
        System.out.println(myConfig.getRelations().toString());

        System.out.println(animals.toString());
    }
}

引入依赖:(不引入依赖会导致编译器报错"springboot configuration annotation processor not configured")

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

2.Springboot集成nacos配置中心

1.添加bootstrap.yml

#application.yml 配置文件转移到nacos配置中心
spring:
  application:
    name: access-init-adapter-config
  cloud:
    nacos:
      discovery:
        server-addr: nacos-server:8848
      config:
        server-addr: nacos-server:8848
        file-extension: yml
        group: ACCESSINITADAPTER_GROUP
#        ext-config[0]:
#          data-id: access-init-adapter-edge.properties
#          group: ACCESSINITADAPTER_GROUP
#          refresh: true

2.引入依赖

<!-- nacos依赖 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>0.2.1.RELEASE</version>
        </dependency>

spring boot集成nacos config报错

NoClassDefFoundError: org/springframework/boot/context/properties/ConfigurationBeanFactoryMetadata

原因是我的spring boot版本是2.4.3 , nacos config的版本是0.2.7

两个版本不兼容导致,在spring boot 2.4之后删掉了ConfigurationBeanFactoryMetadata

将spring boot版本降级为2.3.9.RELEASE即可解决.

3.Springboot配置文件优先级

优先级如下

  1. 第一种是在执行命令的目录下建config文件夹,然后把配置文件放到这个文件夹下。(在jar包的同一个目录下建config文件夹,执行命令需要在jar包所在目录下才行)
  2. 第二种是直接把配置文件放到jar包的同级目录
  3. 第三种在classpath下建一个config文件夹,然后把配置文件放进去。
  4. 第四种是在classpath下直接放配置文件。

springboot默认是优先读取它本身同级目录下的一个config/application.properties文件的。在src/main/resource文件夹下创建的application.properties文件的优先级是最低的

所以springboot启动读取外部配置文件,只需要在外面加一层配置文件覆盖默认的即可,不用修改代码.

** 注:

  • 配置文件名必须是application, 同一级别下properties的优先级高于yml
  • 如果启动程序时指定配置文件路径,则程序运行时只读取指定的配置文件。指定配置文件不存在则报错,程序启动失败

4.java 将整个配置文件读取成Proerties

  Properties properties = new Properties();
  
  try {
    
    
      InputStream in = new BufferedInputStream(new FileInputStream("src/main/resources/xxfwConsumer.properties"));
      properties.load(in);
      logger.info(properties.toString());
  } catch (IOException e) {
    
    
      e.printStackTrace();
      logger.error("读取消费者配置文件失败!");
  }

おすすめ

転載: blog.csdn.net/cc890824/article/details/117122014