【问题标题】:How do i access .properties file in Spring with @Value?如何使用@Value 在 Spring 中访问 .properties 文件?
【发布时间】:2021-05-27 09:39:34
【问题描述】:

我正在尝试从我的 config.properties 文件中获取一些信息,该文件包含我的所有凭据信息,如下所示:

cloud.aws.credentials.accessKey=Hello
cloud.aws.credentials.secretKey=Hellobebe
cloud.aws.s3.bucket=hellome
could.aws.region.static=ap-northeast-2
cloud.stack.auto=false

在 java 文件中,我尝试使用 @Value 访问它,但我无法获取该值。 这是我的 S3Service.java 代码

package com.aplusinternational.goTrip.service;

import java.io.IOException;

import javax.annotation.PostConstruct;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.CannedAccessControlList;
import com.amazonaws.services.s3.model.PutObjectRequest;

import lombok.NoArgsConstructor;


@Service
@NoArgsConstructor
public class S3Service {
    private AmazonS3 s3Client;

    @Value("${cloud.aws.credentials.accessKey}")
    private String accessKey;

    @Value("${cloud.aws.credentials.secretKey}")
    private String secretKey;

    @Value("${cloud.aws.s3.bucket}")
    private String bucket;

    @Value("${cloud.aws.region.static}")
    private String region;

    @PostConstruct
    public void setS3Client() {
        AWSCredentials credentials = new BasicAWSCredentials(this.accessKey, this.secretKey);
        s3Client = AmazonS3ClientBuilder.standard()
                .withCredentials(new AWSStaticCredentialsProvider(credentials))
                .withRegion(this.region)
                .build();
    }

    public String upload(MultipartFile multipartFile, String dirName) throws IOException {
        String fileName = dirName + "/" + multipartFile.getOriginalFilename();
        String uploadImageUrl = putS3(multipartFile, fileName);
        //removeNewFile(multipartFile);
        return uploadImageUrl;
    }

    private String putS3(MultipartFile multipartFile, String fileName) throws IOException {
        System.out.println("file is in!: "+ fileName+" putS3");
        System.out.println(this.bucket);
        s3Client.putObject(new PutObjectRequest(bucket, fileName, multipartFile.getInputStream(), null).withCannedAcl(CannedAccessControlList.PublicRead));
        return s3Client.getUrl(bucket, fileName).toString();
    }

}

当我运行它时,它会给我${cloud.aws.s3.bucket} 本身的结果。错误将是: enter image description here

我为此花费了数千小时。请帮帮我!

ps。我能够从同一个 .properties 文件中获取数据库信息。

【问题讨论】:

    标签: java spring spring-mvc properties


    【解决方案1】:

    @PropertySource(value = {"classpath:config.properties",}, encoding = "utf-8") 尝试添加此注释。

    【讨论】:

    • 我的类路径正确吗? “classpath:src/main/webapp/config/config.properties”,我的服务 java 文件位于 src/main/java/com/aplusinternational/goTrip/service/S3Service.java
    • classpath:config/config.properties 工作正常,我首先将 webapp 标记为 Resources ROOT。
    • @Doyeon 通常属性文件位于“src/main/resources”下。如果您的项目在其他地方有属性文件,我想您必须在应用程序启动时手动加载文件,以便在文件中注册属性。见:stackoverflow.com/a/16313425/6200354
    • 谢谢!我使用路径作为类路径:config/config.properties 但它说它找不到目的地.. 你知道我为什么会收到这个错误吗?对于根上下文,它可以工作,但是在 pakages 下的 java 文件中它不会工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    • 2015-07-06
    • 2023-03-31
    • 2015-03-13
    • 2019-03-14
    • 1970-01-01
    相关资源
    最近更新 更多