web-dev-qa-db-ja.com

Spring Bootは@ConfigurationPropertiesをAutowireにできません

これが私のFileStoragePropertiesクラスです。

 @Data
 @ConfigurationProperties(prefix = "file")
 public class FileStorageProperties {
       private String uploadDir;
 }
 _

これは私に言っています: @EnableConfigurationPropertiesを介して登録されていないか、Spring Component としてマークされています。

そしてここで私のFileStorageService

@Service
public class FileStorageService {

private final Path fileStorageLocation;

@Autowired
public FileStorageService(FileStorageProperties fileStorageProperties) {
    this.fileStorageLocation = Paths.get(fileStorageProperties.getUploadDir())
            .toAbsolutePath().normalize();

    try {
        Files.createDirectories(this.fileStorageLocation);
    } catch (Exception ex) {
        throw new FileStorageException("Could not create the directory where the uploaded files will be stored.", ex);
    }
}

public String storeFile(MultipartFile file) {
    // Normalize file name
    String fileName = StringUtils.cleanPath(file.getOriginalFilename());

    try {
        // Check if the file's name contains invalid characters
        if(fileName.contains("..")) {
            throw new FileStorageException("Sorry! Filename contains invalid path sequence " + fileName);
        }

        // Copy file to the target location (Replacing existing file with the same name)
        Path targetLocation = this.fileStorageLocation.resolve(fileName);
        Files.copy(file.getInputStream(), targetLocation, StandardCopyOption.REPLACE_EXISTING);

        return fileName;
    } catch (IOException ex) {
        throw new FileStorageException("Could not store file " + fileName + ". Please try again!", ex);
    }
}

public Resource loadFileAsResource(String fileName) {
    try {
        Path filePath = this.fileStorageLocation.resolve(fileName).normalize();
        Resource resource = new UrlResource(filePath.toUri());
        if(resource.exists()) {
            return resource;
        } else {
            throw new MyFileNotFoundException("File not found " + fileName);
        }
    } catch (MalformedURLException ex) {
        throw new MyFileNotFoundException("File not found " + fileName, ex);
    }
}
}
 _

これは私にエラーが発生します:がfound の型のBeanを起動できませんでした。

そしてこれが私のプロジェクト構造です:

Spring Boot can't autowire @ConfigurationProperties - project structure

そして私がそれを実行しようとすると、それは私に与えます:


アプリケーションは起動できませんでした

説明:

Com.mua.cse616.Service.FileStorageServiceのコンストラクタのパラメータ0は、見つからなかったタイプ 'com.mua.cse616.property.FileStorageProperties'のBeanを必要としました。

注入ポイントには、次の注釈があります。 - @ org.springFramework.Beans.Factory.Ankotation.Autowired(必須= true)

アクション:

設定に 'com.mua.cse616.property.fileStorageProperties'の種類のBeanを定義することを検討してください。


どうやってこれを解決できますか?

9
Maifee Ul Asad

fileStoragePropertiesクラスでBellow注釈を追加します。

@成分

1
tuan