springapplication.properties 파일의 resources 폴더에 파일 지정
Spring Boot 응용 프로그램이 있습니다. 코드는 resources 폴더 아래의 파일에 액세스해야 합니다.다음은 내 application.properties 파일입니다.
cert.file=classpath:/resources/cert.p12
하지만 그것은 항상 불평했습니다.
java.io.FileNotFoundException: classpath:/resources/cert.p12 (No such file or directory)
cert.p12 파일이 그곳에 있는지 확인하기 위해 my_project/target/classes 폴더를 두 번 확인했습니다.
코드에서 파일에 액세스하려고 했습니다.
@Value("${cert.file}")
private String certFile;
....
@Bean
public Sender sender() {
return new Sender(certFile);
}
이 클래스 경로는 정확히 무엇입니까? 그리고 왜 파일을 찾을 수 없습니까?감사합니다!
클래스 경로에는 리소스 dir 내부에 있는 내용이 포함됩니다.
시도:
cert.file=classpath:cert.p12
저는 당신이 표준 메이븐 카탈로그 구조를 가지고 있다고 생각합니다.
이 구문은 일반 FileInputStream에서 작동하지 않습니다.대신 스프링 리소스 로더를 사용합니다.
@Autowired
private ResourceLoader resourceLoader;
@Value("${property.name}")
private String property;
File getPropertyFile(){
return resourceLoader.getResource(property).getFile();
}
application.properties
property.name=classpath:filename.txt
그냥 사용할 수 있습니다.XXX.class.getResourceAsStream("filename")
자원을 얻기 위해.예:
ObjectInputStream ois = new ObjectInputStream(MyClass.class.getResourceAsStream(PUBLIC_KEY_FILE));
Key key = (Key) ois.readObject();
ois.close();
그리고, 이것은 제 코드에 있는 일입니다.MyClass는 crt 파일을 사용하는 클래스 스위치입니다.나의PUBLIC_KEY_FILE
이라"/rsa/PublicKey"
그리고 그냥 가게에 보관하세요.src/main/resources/rsa
폴더
@Bee Noisy가 말했듯이, 당신은 사용해야 합니다.getResourceAsSreame(...)
대신에getResource(...).getFile()
.
나는 당신의 문제를 정확히 보고 내 코드가 내 컴퓨터에서 올바르게 실행되었지만 내장된 Tomcat이 있는 앱을 로드할 때.java -jar
명령 다음 오류가 표시됩니다.
그래서 코드를 이렇게 변경하고 오류를 해결했습니다.
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());
...
}
속성:
ramona.licence.keystore.fullname=key.p12
나의 경험을 공유하기
1단계 : /src/main/resources/data/test.data 아래에 리소스 파일을 생성합니다.
2단계: 값 정의application.properties/yml
com.test.package.data=#{new org.springframework.core.io.ClassPathResource("/data/test.data").getFile().getAbsolutePath()}
3단계: 코드의 파일을 가져옵니다.
@Value("${com.test.package.data}")
private String dataFile;
private void readResourceFile() {
Path path = Paths.get(dataFile);
List<String> allLines = Files.readAllLines(path);
}
이 길은 확실히 저에게 효과가 있었습니다.file=./build/main/cert.p12
언급URL : https://stackoverflow.com/questions/32278204/specify-files-in-resources-folder-in-spring-application-properties-file
'programing' 카테고리의 다른 글
IntelliJ Idea 2017.3 Kotlin Spring Boot App을 시작할 수 없음 - @Configuration 클래스가 final이 아닐 수 있습니다. (0) | 2023.06.20 |
---|---|
CTE에서 에 삽입 (0) | 2023.06.20 |
마리아에서 항상 생성됨DB (0) | 2023.06.20 |
UIView 프레임, 경계 및 중심 (0) | 2023.06.20 |
MariaDB가 한 데이터베이스에 대해 종속 하위 쿼리에 대해 색인을 사용하지 않지만 동일한 서버에 있는 다른 데이터베이스에는 사용하지 않음 (0) | 2023.06.15 |