Spring Boot не загружает @ConfigurationProperties - PullRequest
0 голосов
/ 29 мая 2020

Я разрабатываю приложение загрузки 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 страницу для его отображения с использованием модели, а не просто создать этот bean-компонент в CommandLineRunner

Ответы [ 3 ]

0 голосов
/ 29 мая 2020

Надеюсь, что ниже будет работать,

Приложения:

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>
0 голосов
/ 29 мая 2020

У вас должен быть @Configuration в классе SuppourtedFiles, а также @EnableConfigurationProperties в классе FirstBoot1Application и добавить зависимость 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
0 голосов
/ 29 мая 2020

Если я правильно помню, вы должны использовать

@Configuration

в своем классе SuppourtedFiles или

@EnableConfigurationProperties(SuppourtedFiles.class)

в своем FirstBoot1Application.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...