当前位置: 首页 > 知识库问答 >
问题:

如何将kafka信任存储位置的绝对路径传递给Spring boot本机映像

楚洋
2023-03-14

我正在尝试使用spring-ative来创建使用kafka ssl的Spring应用程序的本机映像。

但我有一个问题要通过Kafka信任库路径的绝对路径。

因为本机映像无法知道信任库路径的位置。

  • Spring靴:2.4.5
  • Spring原生:0.9.2
  • graalvm: graalvm-ce-java8-21.0.0.2

我的信任库文件位于以下路径中

src
  - main
    - resources
      - truststore
         mytrustsotre.jks
# Kafka properties
spring:
  kafka:
    ssl:
      trustStorePassword: "password"
      trustStoreLocation: "classpath:truststore/mytrustsotre.jks"

Maven插件构建参数

            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <image>
                        <builder>paketobuildpacks/builder:tiny</builder>
                        <env>
                            <BP_NATIVE_IMAGE>true</BP_NATIVE_IMAGE>
                            <BP_NATIVE_IMAGE_BUILD_ARGUMENTS>
                                -H:IncludeResourceBundles=sun.security.util.Resources
                                -H:IncludeResources=truststore/mytrustsotre.jks
                            </BP_NATIVE_IMAGE_BUILD_ARGUMENTS>
                        </env>
                    </image>
                </configuration>
            </plugin>

构建并运行应用程序

mvn spring-boot:build-image -Dspring-boot.build-image.imageName=my.way.com/app:1.0.0-SNAPSHOT

...
...

docker run -it -e "SPRING_PROFILES_ACTIVE=default" \
-e "--spring.application.name=app" \
my.way.com/app:1.0.0-SNAPSHOT

那么当消息到来时,错误就发生了。

Caused by: java.lang.IllegalStateException: Resource 'class path resource [truststore/mytrustsotre.jks]' must be on a file system
        at org.springframework.boot.autoconfigure.kafka.KafkaProperties$Ssl.resourceToPath(KafkaProperties.java:1155) ~[com.naver.gla.pgsync.PgSyncApplicationKt:na]
        at org.springframework.boot.context.properties.PropertyMapper$Source.lambda$as$2(PropertyMapper.java:220) ~[na:na]
        at org.springframework.boot.context.properties.PropertyMapper$Source.to(PropertyMapper.java:314) ~[na:na]
        at org.springframework.boot.autoconfigure.kafka.KafkaProperties$Ssl.buildProperties(KafkaProperties.java:1143) ~[com.naver.gla.pgsync.PgSyncApplicationKt:na]
        at org.springframework.boot.autoconfigure.kafka.KafkaProperties.buildCommonProperties(KafkaProperties.java:159) ~[com.naver.gla.pgsync.PgSyncApplicationKt:na]
        at org.springframework.boot.autoconfigure.kafka.KafkaProperties.buildProducerProperties(KafkaProperties.java:190) ~[com.naver.gla.pgsync.PgSyncApplicationKt:na]
        at com.naver.gla.pgsync.config.ApplicationConfiguration.producerFactory(ApplicationConfiguration.kt:70) ~[com.naver.gla.pgsync.PgSyncApplicationKt:na]
        at com.naver.gla.pgsync.config.ApplicationConfiguration.producer(ApplicationConfiguration.kt:73) ~[com.naver.gla.pgsync.PgSyncApplicationKt:na]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[na:na]
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[na:na]
        ... 49 common frames omitted
Caused by: java.io.FileNotFoundException: class path resource [truststore/mytrustsotre.jks] cannot be resolved to absolute file path because it does not reside in the file system: resource:truststore/mytrustsotre.jks
        at org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:217) ~[na:na]
        at org.springframework.core.io.AbstractFileResolvingResource.getFile(AbstractFileResolvingResource.java:154) ~[na:na]
        at org.springframework.boot.autoconfigure.kafka.KafkaProperties$Ssl.resourceToPath(KafkaProperties.java:1152) ~[com.naver.gla.pgsync.PgSyncApplicationKt:na]
        ... 58 common frames omitted

如果没有本机映像,此应用程序将正常工作。

如何将绝对路径传递给本机映像?

共有1个答案

洪研
2023-03-14

我自己解决这个问题。

我将 docker 卷设置为链接主机中的信任文件。

docker run -it -v /my/resources:/app/resources \
-e "SPRING_PROFILES_ACTIVE=default" \
-e "--spring.application.name=app" \
my.way.com/app:1.0.0-SNAPSHOT
 类似资料:
  • 问题内容: 我有一个实例化的对象。我知道它包含图片格式。除了对我可用的方法等,我不知道文件在系统上的放置位置。 我的问题是:如何实例化带有图片的JavaFX 对象? 问题答案: 提供检索文件的URL的方法和在构造函数需要一个URL 。

  • 我已经使用FastAPI创建了一个简单的API,我正在尝试将URL作为任意的<code>路径</code>参数传递给FastAPI路由。 当我测试它时,它不起作用并抛出错误。我以这种方式测试它:

  • 我的RestController中有如下API方法 类如下所示。 在postman中,我传递了一个JSON字符串,如 我得到一个错误说 2021-08-16 18:25:53.953警告4164---[io-8080-exec-10]. w. s. m. s.DefaultHandlerExceptionResolver:已解决[org.springframework.http.converter

  • 通过物理介质将docker映像重定位到另一台机器上的步骤是什么? /var/lib/docker/images/overlay2/imagedb/content 但本地包含6KB.txt文件。我知道一个docker图像的大小通常在600MB左右。

  • 我正在创建一个新的ChromeDriver对象,但是我想向它传递一个ChromeDriverService对象、一个ChromeOptions对象和一个驱动程序路径。然而,在这个页面上,配置程序不支持传递所有这三个。我怎么能做到呢?

  • 如果需要与特定的应用编程接口/硬件组件交互,您将如何将信息从Flutter传递回Android/Native代码? 是否有任何事件通道可以以其他方式或类似于回调的方式发送信息? platform_channel文档指出,“方法调用也可以反向发送,平台充当Dart中实现的方法的客户端。quick_actions插件就是一个具体的例子。”在这种情况下,我看不出本机是如何接收到来自Flatter的消息的