tentukan file di folder sumber daya di file spring application.properties

Saya memiliki aplikasi Spring Boot, kodenya perlu mengakses file di bawah folder sumber daya. ini file application.properties saya:

cert.file=classpath:/resources/cert.p12

namun ia selalu mengeluh:

java.io.FileNotFoundException: classpath:/resources/cert.p12 (No such file or directory)

Saya memeriksa ulang folder my_project/target/classes untuk memastikan file cert.p12 keluar dari sana.

dan dalam kode saya mencoba mengakses file:

@Value("${cert.file}")
private String certFile;
....
@Bean
public Sender sender() {
    return new Sender(certFile);
}

apa sebenarnya classpath ini? dan mengapa tidak dapat menemukan file tersebut? Terima kasih!


person user468587    schedule 28.08.2015    source sumber
comment
sudahkah kamu berhasil menyelesaikan ini?   -  person David Krenkel    schedule 18.10.2017
comment
apakah ada solusi untuk ini?   -  person Vishal    schedule 25.04.2018


Jawaban (5)


Classpath mencakup apa yang Anda miliki di dalam direktori sumber daya Anda.

Mencoba:

cert.file=classpath:cert.p12

Saya berasumsi Anda memiliki struktur katalog pakar standar.

person raduy    schedule 29.08.2015
comment
itu menimbulkan kesalahan yang sama: FileNotFoundException: classpath:cert_key.p12. Saya menggunakan struktur pakar standar - person user468587; 31.08.2015

Sintaks ini tidak berfungsi dengan FileInputStream normal. Gunakan Spring Resourceloader sebagai gantinya.

@Autowired
private ResourceLoader resourceLoader;

@Value("${property.name}")
private String property;

File getPropertyFile(){
    return resourceLoader.getResource(property).getFile();
}

aplikasi.properti

property.name=classpath:filename.txt
person Domo    schedule 11.12.2017
comment
ketika saya menjalankan aplikasi dengan java -jar kode ini tidak berfungsi. - person amir110; 31.03.2020

Anda cukup menggunakan XXX.class.getResourceAsStream("filename") untuk mendapatkan sumber daya. seperti:

ObjectInputStream ois = new ObjectInputStream(MyClass.class.getResourceAsStream(PUBLIC_KEY_FILE));
        Key key = (Key) ois.readObject();
        ois.close();

Dan, ini berfungsi dalam kode saya. MyClass adalah penyihir kelas yang menggunakan file crt Anda. PUBLIC_KEY_FILE saya adalah "/rsa/PublicKey" dan hanya disimpan di folder src/main/resources/rsa

lokasi sumber daya

person BeeNoisy    schedule 09.11.2016

seperti yang dikatakan @BeeNoisy, Anda harus menggunakan getResourceAsSreame(...) daripada getResource(...).getFile().

saya melihat persis masalah Anda dan kode saya berjalan di komputer saya dengan benar tetapi ketika saya memuat aplikasi dengan kucing jantan yang tertanam dengan perintah java -jar saya melihat kesalahan ini:

jadi saya mengubah kode seperti ini dan kesalahan teratasi:

private final String licencePass;
private final String licenceName;

public ProcessFormController(@Value("${ramona.licence.keystore.fullname}") String licenceName,
                             @Value("${ramona.licence.pass}") String licencePass) throws Exception {
    this.licenceName = licenceName;
    this.licencePass = licencePass;
    this.restTemplate = new RestTemplate(getHttpsRequestFactory());
}

private ClientHttpRequestFactory getHttpsRequestFactory() throws Exception {
    logger.info("licenceName:" + licenceName);
    final InputStream resourceAsStream =
            getClass().getClassLoader().getResourceAsStream(
                    licenceName
            );
    KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
    keyStore.load(resourceAsStream, licencePass.toCharArray());
    ...
}

properti:

ramona.licence.keystore.fullname=key.p12
person amir110    schedule 31.03.2020

Jalur ini berfungsi untuk saya cert.file=./build/resources/main/cert.p12

person fjkjava    schedule 08.11.2016