SCR / 메인 / 리소스가 누락 된 스프링 부트 액세스 정적 리소스
Spring Boot 애플리케이션에서 작업 중입니다. 시작할 때 XML 파일 (countries.xml)을 구문 분석해야합니다. 문제는 액세스 할 수 있도록 어디에 두어야할지 모르겠다는 것입니다. 내 폴더 구조는
ProjectDirectory/src/main/java
ProjectDirectory/src/main/resources/countries.xml
내 첫 번째 아이디어는 src / main / resources에 넣는 것이었지만 File (countries.xml)을 만들려고 할 때 NPE가 생기고 stacktrace는 내 파일이 ProjectDirectory에서 보이는 것을 보여줍니다 (그래서 src / main / resources / 추가되지 않음). 파일 (resources / countries.xml)을 만들려고했는데 경로가 ProjectDirectory / resources / countries.xml처럼 보일 것입니다 (다시 src / main이 추가되지 않음).
나는 결과없이 이것을 추가하려고했다.
@Override
public void addResourceHandlers(final ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
super.addResourceHandlers(registry);
}
src / main /을 수동으로 추가 할 수 있다는 것을 알고 있지만 왜 작동하지 않는지 이해하고 싶습니다. 또한 ResourceLoader로 예제를 시도했지만 동일한 결과가 없습니다.
누구든지 문제가 무엇인지 제안 할 수 있습니까?
업데이트 : 향후 참조를 위해-프로젝트를 빌드 한 후 파일 액세스에 문제가 발생하여 File을 InputStream으로 변경했습니다.
InputStream is = new ClassPathResource("countries.xml").getInputStream();
Spring 유형 ClassPathResource를 사용하십시오 .
File file = new ClassPathResource("countries.xml").getFile();
이 파일이 클래스 경로 어딘가에있는 한 Spring에서 찾을 수 있습니다. 이것은 src/main/resources
개발 및 테스트 중일 수 있습니다 . 프로덕션에서는 현재 실행중인 디렉토리 일 수 있습니다.
클래스 경로에서 파일을 가져 오려면 다음을 수행하십시오.
Resource resource = new ClassPathResource("countries.xml");
File file = resource.getFile();
onStartup 파일을 읽으려면 다음을 사용하십시오 @PostConstruct
.
@Configuration
public class ReadFileOnStartUp {
@PostConstruct
public void afterPropertiesSet() throws Exception {
//Gets the XML file under src/main/resources folder
Resource resource = new ClassPathResource("countries.xml");
File file = resource.getFile();
//Logic to read File.
}
}
다음은 Spring Boot 앱 시작시 XML 파일을 읽는 간단한 예제 입니다.
Spring Boot 애플리케이션으로 작업하는 동안 resource.getFile()
동일한 문제에 직면했기 때문에 JAR로 배포 될 때 사용하는 클래스 경로 리소스를 얻기가 어렵습니다 . 이 스캔은 Stream을 사용하여 해결되며 클래스 경로에있는 모든 리소스를 찾습니다.
다음은 동일한 코드 스 니펫입니다.
ClassPathResource classPathResource = new ClassPathResource("fileName");
InputStream inputStream = classPathResource.getInputStream();
content = IOUtils.toString(inputStream);
다음 코드를 사용하여 리소스 폴더에서 String의 파일을 읽을 수 있습니다.
final Resource resource = new ClassPathResource("public.key");
String publicKey = null;
try {
publicKey = new String(Files.readAllBytes(resource.getFile().toPath()), StandardCharsets.UTF_8);
} catch (IOException e) {
e.printStackTrace();
}
다음 공사를 사용해야합니다
InputStream in = getClass().getResourceAsStream("/yourFile");
파일 이름 앞에이 슬래시를 추가해야합니다.
나는 스프링 부트를 사용하므로 간단하게 사용할 수 있습니다.
File file = ResourceUtils.getFile("classpath:myfile.xml");
나는 Spring Boot를 사용하는데, 문제에 대한 나의 해결책은
"src/main/resources/myfile.extension"
누군가에게 도움이되기를 바랍니다.
'program story' 카테고리의 다른 글
angularjs를 사용하여 xls로 내보내기 (0) | 2020.12.29 |
---|---|
모든 텍스트 편집기에 대해 Eclipse에서 글꼴 크기를 어떻게 변경할 수 있습니까? (0) | 2020.12.29 |
UL 요소 내에서 목록 항목을 중앙에 배치하려면 어떻게합니까? (0) | 2020.12.28 |
double을 BigDecimal로 변환하고 BigDecimal 정밀도 설정 (0) | 2020.12.28 |
Jenkins 파이프 라인 NotSerializableException : groovy.json.internal.LazyMap (0) | 2020.12.28 |