英文:
Spring Boot not loading @ConfigurationProperties
问题
我正在开发一个Spring Boot应用程序,尝试配置一个bean的自定义属性,该bean提供了我的文件支持的扩展名。当我运行应用程序时,它成功运行,没有错误,但扩展名没有从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。
英文:
I am developing a Spring boot application where I am trying to configure custom properties for a bean which gives the suppourted extensions for my file .
When I run the application it runs sucessfully with 0 errors but the extensions are not loaded from the application.properties file.
Here is my code in application.properties :-----
suppourted.extensions[0]="jpg"
suppourted.extensions[1]="pdf"
suppourted.extensions[2]="png"
Here is the code of the 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() + "]";
}
}
My main 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);
}
}
I do not understand where the problem is occuring. Kindly help me.
Update:--
I want to send that object to my jsp page for displaying it using model not just create that bean in CommandLineRunner
答案1
得分: 1
如果我记得正确,你应该在你的SuppourtedFiles类中使用
@Configuration
或者在你的FirstBoot1Application中使用
@EnableConfigurationProperties(SuppourtedFiles.class)
。
英文:
If I remember correctly you should either use
@Configuration
in your SuppourtedFiles class or
@EnableConfigurationProperties(SuppourtedFiles.class)
in your FirstBoot1Application.
答案2
得分: 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()) + "]"; // 更改以检查数组是否由 Spring 填充
}
}
最小 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>
英文:
Hope below will work,
Applications:
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);
}
}
Configuration 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.
}
}
minimum maven dependencies
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
</dependencies>
Optional Dependency for annotation processor:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
> Please make sure your project packaging is jar or 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:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
答案3
得分: 0
你应该在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 {
// 不需要创建 extensions 对象,只需声明它
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
英文:
You should have the @Configuration
on the SuppourtedFiles
class and also the @EnableConfigurationProperties
on the FirstBoot1Application
class and add the org.springframework.boot:spring-boot-configuration-processor
dependency.
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);
}
}
And also in the properties you do not need double quotes. You can just have,
suppourted.extensions[0]=jpg
suppourted.extensions[1]=pdf
suppourted.extensions[2]=png
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论