例如,如何使用spring-kafka(不带sboot)进行SSL配置,使用相对/类路径指定信任库的位置?
仅当提供了绝对路径时,它才起作用。
令人惊讶的是,当使用Spring引导运行时,它可以使用相对路径(在jar内)。。
我对此的补丁是在Spring启动时将密钥库复制到文件系统。(而不是来自 KafkaAuto 配置的消费者工厂,而是拥有自己的消费者工厂)
@Configuration
@RequiredArgsConstructor
public class KafkaConfig {
private final KafkaProperties kafkaProps;
@Bean
@ConditionalOnProperty(value = "spring.kafka.enabled", havingValue = "true")
public ConsumerFactory<?, ?> consumerFactory() throws IOException {
Path fileSystemKeyStorePath = Paths.get("/tmp", "keystore.pfx");
Resource keyStoreLocationFromProperties = kafkaProps.getSsl().getKeyStoreLocation();
Files.copy(keyStoreLocationFromProperties.getInputStream(),
fileSystemKeyStorePath, StandardCopyOption.REPLACE_EXISTING);
Ssl ssl = kafkaProps.getSsl();
ssl.setKeyStoreLocation(new FileSystemResource(fileSystemKeyStorePath));
return new DefaultKafkaConsumerFactory(kafkaProps.buildConsumerProperties());
}
}
该文件由Kafka读取,而不是斯普林。
Kafka对Spring的类路径资源抽象一无所知。
我认为你对靴子的看法是错误的;只有在罐子爆炸的情况下才有效。boot在< code > kafk properties 中有以下代码...
map.from(this::getTrustStoreLocation).as(this::resourceToPath)
.to(properties.in(SslConfigs.SSL_TRUSTSTORE_LOCATION_CONFIG));
...
private String resourceToPath(Resource resource) {
try {
return resource.getFile().getAbsolutePath();
}
catch (IOException ex) {
throw new IllegalStateException(
"Resource '" + resource + "' must be on a file system", ex);
}
}
要在jar中使用信任库,您需要在启动应用程序上下文之前,首先将其复制到文件系统(例如< code>/tmp)。
这是我的听众
在这里的Spring Boot文档中,关于服务静态内容,它说: 默认情况下,Spring Boot将从类路径中名为/static(或/public或/resources或/META-INF/resources)的目录提供静态内容。 我发现目录中的所有内容: 将被复制到类路径中,因此我可以将我的静态内容放入: 一切都会很好,我很高兴,因为我可以将我的静态内容放在src目录下。 但是,我对此有一些疑问
我正在尝试使用spring-ative来创建使用kafka ssl的Spring应用程序的本机映像。 但我有一个问题要通过Kafka信任库路径的绝对路径。 因为本机映像无法知道信任库路径的位置。 Spring靴:2.4.5 Spring原生:0.9.2 graalvm: graalvm-ce-java8-21.0.0.2 我的信任库文件位于以下路径中 Maven插件构建参数 构建并运行应用程序 那
并将这些行添加到 但仍会出现以下错误: org.apache.kafka.common.errors.SerializationException:反序列化偏移量1处分区topic2-0的键/值时出错。如有需要,请通过记录继续使用。原因:java.lang.IllegalArgumentException:类“com.SpringMiddleware.Entities.Crime”不在受信任的包[
问题内容: 这个特殊的前缀指定必须获取与给定名称匹配的所有类路径资源(内部,这实际上是通过ClassLoader.getResources(…)调用发生的),然后合并以形成最终的应用程序上下文定义。 有人可以解释吗? 使用和不使用星号有什么区别? 问题答案: 这只是意味着,将拾取类路径上所有jar中文件夹下的所有appContext.xml文件,并将其加入一个大的应用程序上下文中。 相反,将仅加载
我需要为类构建映射(字面上是