[英]Spring Boot not loading @ConfigurationProperties
我正在开发一个 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);
}
}
我不明白问题出在哪里。 请帮助我。
更新: -
我想将该 object 发送到我的 jsp 页面以使用 model 显示它,而不仅仅是在 CommandLineRunner 中创建该 bean
如果我没记错的话你应该使用
@Configuration
在您的 SupportedFiles class 或
@EnableConfigurationProperties(SuppourtedFiles.class)
在您的 FirstBoot1Application 中。
希望下面会起作用,
应用:
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);
}
}
配置Class:
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
Controller:
@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());
}
}
Controller 依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
您应该在SuppourtedFiles
class 上有@Configuration
,在FirstBoot1Application
@EnableConfigurationProperties
上有 @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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.