Я создал весеннее загрузочное приложение, которое будет подключаться к облачному пабу Google / sub и получать данные из темы.Для аутентификации я добавил это свойство spring.cloud.gcp.credentials.location=C:\\Users\\Admin\\dev\\Projects\\cloud\\credentials-file.json
в application.properties
файл.
Когда я запускаю приложение, я получаю это исключение
> Caused by: java.io.FileNotFoundException: Could not open ServletContext resource [/C:/Users/Admin/dev/Projects/cloud/credentials-file.json]
at org.springframework.web.context.support.ServletContextResource.getInputStream(ServletContextResource.java:158) ~[spring-web-5.1.4.RELEASE.jar:5.1.4.RELEASE]
at org.springframework.cloud.gcp.core.DefaultCredentialsProvider.<init>(DefaultCredentialsProvider.java:94) ~[spring-cloud-gcp-core-1.1.0.RELEASE.jar:1.1.0.RELEASE]
at org.springframework.cloud.gcp.autoconfigure.core.GcpContextAutoConfiguration.googleCredentials(GcpContextAutoConfiguration.java:58) ~[spring-cloud-gcp-autoconfigure-1.1.0.RELEASE.jar:1.1.0.RELEASE]
at org.springframework.cloud.gcp.autoconfigure.core.GcpContextAutoConfiguration$$EnhancerBySpringCGLIB$$375b81d4.CGLIB$googleCredentials$1(<generated>) ~[spring-cloud-gcp-autoconfigure-1.1.0.RELEASE.jar:1.1.0.RELEASE]
at org.springframework.cloud.gcp.autoconfigure.core.GcpContextAutoConfiguration$$EnhancerBySpringCGLIB$$375b81d4$$FastClassBySpringCGLIB$$81fbe7e5.invoke(<generated>) ~[spring-cloud-gcp-autoconfigure-1.1.0.RELEASE.jar:1.1.0.RELEASE]
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244) ~[spring-core-5.1.4.RELEASE.jar:5.1.4.RELEASE]
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:363) ~[spring-context-5.1.4.RELEASE.jar:5.1.4.RELEASE]
at org.springframework.cloud.gcp.autoconfigure.core.GcpContextAutoConfiguration$$EnhancerBySpringCGLIB$$375b81d4.googleCredentials(<generated>) ~[spring-cloud-gcp-autoconfigure-1.1.0.RELEASE.jar:1.1.0.RELEASE]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_191]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_191]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_191]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_191]
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE]
Я пытался оценитьэкскреция в режиме отладки, все работает .Для этого я оценил эту строку в Intellij Idea.
is = new FileInputStream("C:\\Users\\Admin\\dev\\Projects\\cloud\\credentials-file.json");
в этом методе
@Override
public InputStream getInputStream() throws IOException {
InputStream is = this.servletContext.getResourceAsStream(this.path);
if (is == null) {
throw new FileNotFoundException("Could not open " + getDescription());
}
return is;
}
Решение Я переместил свой файл учетных данных впапка resources/static/my-credentials-file.json
![project structure](https://i.stack.imgur.com/3KCKf.png)
И измененный путь к файлу в файле application.properties
(находится в папке src/resources
).
spring.cloud.gcp.credentials.location=file:src/main/resources/static/my-credentials-file.json
spring.cloud.gcp.project-id=my-project-id