问题描述
我有一个带有 gradle 依赖关系的 java 项目org.javamoney:moneta:1.3
。
我还有两个 Kubernetes 集群。我使用 docker-container 部署我的 java 应用程序。
当我在第一个Kubernetes 集群中部署我的应用程序时,一切都很好。但是当我在第二个Kubernetes 集群中部署我的应用程序(相同的 docker-container)时,会出现以下错误:
javax.money.MonetaryException: No MonetaryAmountsSingletonSpi loaded.
at javax.money.Monetary.lambda$getDefaultAmountFactory$13(Monetary.java:291)
at java.base/java.util.Optional.orElseThrow(Optional.java:408)
at javax.money.Monetary.getDefaultAmountFactory(Monetary.java:291)
它出现在以下代码中:
MonetaryAmount amount = javax.money.Monetary.getDefaultAmountFactory()
.setCurrency("USD")
.setNumber(1L)
.create();
软件版本
- 莫内塔:
1.3
。 - 摇篮:
6.0.1
。 - 基础泊坞窗图像:
openjdk:11.0.7-jdk-slim
. - 弹簧靴:
2.2.7.RELEASE
。 - Kubernetes(两个集群上的相同版本)
Server Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.3", GitCommit:"2d3c76f9091b6bec110a5e63777c332469e0cba2", GitTreeState:"clean", BuildDate:"2019-08-19T11:05:50Z", GoVersion:"go1.12.9", Compiler:"gc", Platform:"linux/amd64"}
:. - 爪哇:
java -version openjdk version "11.0.7" 2020-04-14 OpenJDK Runtime Environment 18.9 (build 11.0.7+10) OpenJDK 64-Bit Server VM 18.9 (build 11.0.7+10, mixed mode)
。
我试过的
以不同的方式声明 gradle-dependency
我发现了这个问题,它给了我一个想法,尝试以某种不同的方式声明 gradle-dependency。我努力了:
implementation 'org.javamoney:moneta:1.3'
compile group: 'org.javamoney', name: 'moneta', version: '1.3', ext: 'pom'
compile 'org.javamoney:moneta:1.3'
runtimeOnly 'org.javamoney:moneta:1.3'
不幸的是,它没有给出任何积极的结果。
Moneta 的复制粘贴服务加载器配置
正如此评论中提到的,我尝试将服务加载器配置从 Moneta复制到以下项目目录:src/main/resources/META-INF/services
.
不幸的是,它没有帮助。
无弹簧初始化自定义货币
我试图只在 Main-class 中这样做,但它并没有解决问题。
问题
- 这个问题的根本原因是什么?
- 这个问题的正确解决方案是什么?