这是我的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”。
我该如何解决这个问题?
这是预期的,因为ConfigurationProperties不会使a类Spring组件成为Spring组件。用组件标记类,它应该可以工作。请注意,只有当类是组件时,才可以注入它。
编辑:从Spring 2.2(参考)@ConfigurationProperties
扫描带有@ConfigurationProperties
注释的类现在可以通过类路径扫描找到,作为使用@EnableConfigurationProperties
或@Component
的替代方案。将@ConfigurationProperty tiesScan
添加到您的应用程序以启用扫描。
尝试使用ConfigurationProperties和Component进行注释
在这里,Spring Boot是外部化配置的注解。如果试图将属性文件中的属性值注入类,则可以在类级别使用构造型注释(如组件)添加配置属性,或将配置属性添加到Bean方法中。
在FileStorageProperties类中添加以下注释:
@Component