【问题标题】:Spring Boot not loading @ConfigurationPropertiesSpring Boot 未加载 @ConfigurationProperties
【发布时间】:2020-05-29 11:08:45
【问题描述】:

我正在开发一个 Spring 引导应用程序,我正在尝试为一个 bean 配置自定义属性,该属性为我的文件提供支持的扩展名。 当我运行应用程序时,它成功运行,出现 0 个错误,但扩展程序未从 application.properties 文件加载。

这是我在 application.properties 中的代码:-----

suppourted.extensions[0]="jpg"
suppourted.extensions[1]="pdf"
suppourted.extensions[2]="png"

这是bean的代码:--

package com.MyBoot.FirstBoot;

import java.util.ArrayList;
import java.util.List;

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


@ConfigurationProperties(prefix = "suppourted")
public class SuppourtedFiles {

    private List<String> extensions=new ArrayList<>();

    public List<String>getExtensions() {
        return extensions;
    }

    public void setExtensions(List<String>extensions) {
        this.extensions = extensions;
    }

    @Override
    public String toString() {
        return "SuppourtedFiles [extensions=" + extensions.size() + "]";
    }

}

我的主要SpringBootApplication:----

package com.MyBoot.FirstBoot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication

public class FirstBoot1Application {

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

}


我不明白问题出在哪里。请帮助我。

更新:--

我想将该对象发送到我的 jsp 页面以使用模型显示它,而不仅仅是在 CommandLineRunner 中创建该 bean

【问题讨论】:

  • 您如何尝试访问您在属性文件中设置的值?使用@Value?
  • 不,我正在使用@ConfigurationProperties

标签: java spring spring-boot configuration


【解决方案1】:

希望下面会起作用,

应用:

package com.MyBoot.FirstBoot;

import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;


@SpringBootApplication
@EnableConfigurationProperties(SuppourtedFiles.class)
public class FirstBoot1Application implements CommandLineRunner {
    private final SuppourtedFiles suppourtedFiles;

    public FirstBoot1Application(SuppourtedFiles suppourtedFiles) {
        this.suppourtedFiles = suppourtedFiles;
    }

    @Override
    public void run(String... args) throws Exception {
        System.out.println(suppourtedFiles);
    }

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

}

配置类:

package com.MyBoot.FirstBoot;

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

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


@ConfigurationProperties(prefix = "suppourted")
public class SuppourtedFiles {

    private List<String> extensions = new ArrayList<>();

    public List<String> getExtensions() {
        return extensions;
    }

    public void setExtensions(List<String> extensions) {
        this.extensions = extensions;
    }

    @Override
    public String toString() {
        return "com.MyBoot.FirstBoot.SuppourtedFiles [extensions=" + Arrays.toString(extensions.toArray()) + "]"; // Changed to check if array is filled from spring or not.
    }

}

最少的 maven 依赖项

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
    </dependencies>

注解处理器的可选依赖:

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

请确保你的项目打包是jar或者war

控制器:

@RestController
public class SampleController {
    private final SuppourtedFiles suppourtedFiles;

    public SampleController(SuppourtedFiles suppourtedFiles) {
        this.suppourtedFiles = suppourtedFiles;
    }

    @GetMapping("/extensions")
    public ResponseEntity<List<String>> extensions(){
        return ResponseEntity.ok(suppourtedFiles.getExtensions());
    }
}

控制器依赖:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

【讨论】:

  • 包装是如何关联的?
  • 它成功了。你能给我这个作品的基本解释或参考
  • 另外我想将它的对象发送到我的jsp页面进行渲染以显示它的形式:选择给用户,所以通过这种方法它不起作用。请帮我解决这个问题跨度>
  • 你在项目中做了什么改变?
  • 我的项目一直是这样的
【解决方案2】:

如果我没记错的话,你应该使用

@Configuration

在您的 SuppourtedFiles 类中或

@EnableConfigurationProperties(SuppourtedFiles.class)

在您的 FirstBoot1Application 中。

【讨论】:

  • 我都试过了,但还是不行,而且在 Spring Boot 2.2 使用类路径自动检测到它之后,我们不必在外部使用这些注释
【解决方案3】:

您应该在SuppourtedFiles 类上拥有@Configuration,在FirstBoot1Application 类上也应该拥有@EnableConfigurationProperties,并添加org.springframework.boot:spring-boot-configuration-processor 依赖项。

package com.MyBoot.FirstBoot;

import java.util.ArrayList;
import java.util.List;

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

@Configuration
@ConfigurationProperties(prefix = "suppourted")
public class SuppourtedFiles {
    //You should not create the extensions object just declare it
    private List<String> extensions;

    public List<String>getExtensions() {
        return extensions;
    }
    public void setExtensions(List<String>extensions) {
        this.extensions = extensions;
    }
}

package com.MyBoot.FirstBoot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableConfigurationProperties
public class FirstBoot1Application {

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

}

而且在你不需要双引号的属性中。你可以拥有,

suppourted.extensions[0]=jpg
suppourted.extensions[1]=pdf
suppourted.extensions[2]=png

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 2015-06-17
    • 2018-02-07
    相关资源
    最近更新 更多