[SPRING] Spring 부트 액세스 정적 리소스 scr / main / resources 누락
SPRINGSpring 부트 액세스 정적 리소스 scr / main / resources 누락
나는 스프링 부트 애플리케이션을 개발 중이다. 시작할 때 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 / 추가되지 않음). File (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 / manually를 추가 할 수 있다는 것을 알고 있지만 왜 그렇게 작동하지 않는지 이해하고 싶다. 또한 ResourceLoader를 사용하여 예제를 시도했지만 결과는 같습니다.
누구든지 문제가 무엇인지 제안 할 수 있습니까?
최신 정보: 향후 참조 용으로 - 프로젝트를 빌드 한 후에 파일에 액세스 할 때 문제가 발생하여 File을 InputStream으로 변경했습니다.
InputStream is = new ClassPathResource("countries.xml").getInputStream();
해결법
-
==============================
1.스프링 타입 ClassPathResource 만 사용하면됩니다.
스프링 타입 ClassPathResource 만 사용하면됩니다.
File file = new ClassPathResource("countries.xml").getFile();
이 파일이 classpath 어딘가에 있다면, Spring은 그것을 발견 할 것이다. 이것은 개발 및 테스트 중에 src / main / resources가 될 수 있습니다. 프로덕션 환경에서는 현재 실행중인 디렉토리 일 수 있습니다.
-
==============================
2.클래스 경로에서 파일을 가져 오려면 다음을 수행하십시오.
클래스 경로에서 파일을 가져 오려면 다음을 수행하십시오.
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. } }
다음은 봄 부팅 응용 프로그램 시작시 XML 파일을 읽는 작은 예제입니다.
-
==============================
3.Spring Boot 애플리케이션으로 작업하는 동안 동일한 문제에 직면했을 때 JAR로 전개 될 때 resource.getFile ()을 사용하여 클래스 경로 자원을 확보하기가 어렵습니다. 이 스캔은 Streampath를 사용하여 해결되며 클래스 패스의 어느 위치 에나 배치 된 모든 리소스를 찾습니다.
Spring Boot 애플리케이션으로 작업하는 동안 동일한 문제에 직면했을 때 JAR로 전개 될 때 resource.getFile ()을 사용하여 클래스 경로 자원을 확보하기가 어렵습니다. 이 스캔은 Streampath를 사용하여 해결되며 클래스 패스의 어느 위치 에나 배치 된 모든 리소스를 찾습니다.
다음은 같은 코드 스 니펫입니다.
ClassPathResource classPathResource = new ClassPathResource("fileName"); InputStream inputStream = classPathResource.getInputStream(); content = IOUtils.toString(inputStream);
-
==============================
4.다음 코드를 사용하여 리소스 폴더에서 String 파일을 읽을 수 있습니다.
다음 코드를 사용하여 리소스 폴더에서 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(); }
-
==============================
5.다음과 같은 구조를 사용해야합니다.
다음과 같은 구조를 사용해야합니다.
InputStream in = getClass().getResourceAsStream("/yourFile");
파일 이름 앞에 슬래시를 추가해야합니다.
from https://stackoverflow.com/questions/36371748/spring-boot-access-static-resources-missing-scr-main-resources by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring RequestMapping 경로 매개 변수가있는 인코딩 된 슬래시 (% 2F)는 HTTP 400을 제공합니다. (0) | 2019.01.01 |
---|---|
[SPRING] 스프링 기본 범위는 싱글 톤인가 그렇지 않은가? (0) | 2019.01.01 |
[SPRING] 최대 절전 시퀀스가 존재하지 않습니다. (0) | 2019.01.01 |
[SPRING] Spring을 사용하여 Hibernate에서 내장 c3p0 풀링을 설정하기 (0) | 2019.01.01 |
[SPRING] RestTemplate을 이용한 Spring 보안 인증 (0) | 2019.01.01 |