当前位置: 首页 > 知识库问答 >
问题:

Spring Boot无法自动连接@ConfigurationProperties

韩阳成
2023-03-14

这是我的FileStorageProperties类:

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

这让我想到:未通过@enableconfigurationproperties注册或标记为spring组件。

这是我的文件存储服务:

@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);
    }
}
}

这给了我一个错误:无法自动关联未找到类型的bean。

这是我的项目结构:

当我试图运行它时,它给了我:

申请无法启动

描述:

com中构造函数的参数0。穆阿。cse616.服务。FileStorageService需要“com”类型的bean。穆阿。cse616.属性。找不到FileStorage属性“”。

注入点有以下注解:-@org.springframework.beans.factory.annotation.Autow的(必需=true)

措施:

考虑定义“com”类型的bean。穆阿。cse616.属性。配置中的“FileStorageProperties”。

我该如何解决这个问题?

共有3个答案

汪丁雷
2023-03-14

在FileStorageProperties类中添加以下注释:

@Component
施玉宸
2023-03-14

尝试使用ConfigurationProperties和Component进行注释

在这里,Spring Boot是外部化配置的注解。如果试图将属性文件中的属性值注入类,则可以在类级别使用构造型注释(如组件)添加配置属性,或将配置属性添加到Bean方法中。

阴永逸
2023-03-14

这是预期的,因为ConfigurationProperties不会使a类Spring组件成为Spring组件。用组件标记类,它应该可以工作。请注意,只有当类是组件时,才可以注入它。

编辑:从Spring 2.2(参考)@ConfigurationProperties扫描带有@ConfigurationProperties注释的类现在可以通过类路径扫描找到,作为使用@EnableConfigurationProperties@Component的替代方案。将@ConfigurationProperty tiesScan添加到您的应用程序以启用扫描。

 类似资料:
  • 我有一个应用类 我有控制器课 并且,我想为Application test编写一个测试用例,以确保创建的实例类型为HelloController 但是,我在自动连接 hello控制器变量时遇到错误(找不到 hello 控制器类型的 bean)。根据我的理解,@SpringBootTest应该创建上下文并返回一个实例。我们不需要编写任何上下文 xml 或使用任何注释Config 类来获取实例。缺少了

  • 我正在学习将activiti与spring boot结合使用,但我遇到了一些错误,并且搜索了太多关于使用spring boot和java的acitiviti稳定版本的信息 我正在使用java 8和tomcat 8.0.3 我更改了这么多版本的spring和jdk,检查了这么多样本,没有发现任何问题,我只有一个控制器类和spring主类,当我运行项目时,得到了以下错误: 这是我的RestContro

  • 我与SpringBoot和JPA合作。我收到一个无法完成的错误。 这是我的主要课程: 这是我的班级失败的原因: 这是类: 这是错误消息: 错误创建bean的名称'请求LoggerImpl':注入自动生成的依赖失败; 无法自动关联字段:专用com。存储库。请求logdao.com。记录器。impl。RequestLoggerImpl。请求logdao;嵌套的异常是org。springframewor

  • 我有一个简单的组件类: 在构造函数的参数中,IntelliJ报告:

  • 我正在使用java配置而不是XML迁移到spring Security4.0.1。当我自动操作时,它会给出以下错误: HTTP状态500-org.springframework.beans.factory.beanCreationException:创建名为“ScopedTarget.UsersComponent”的bean时出错:注入autowired依赖项失败;嵌套异常为org.springf

  • 当我在spring boot中添加安全配置时,遇到了这个令人讨厌的错误: 这是SpringBootApplication: 最后,这是我的项目树: