gpt4 book ai didi

java - Micronaut 和 Java Mail API

转载 作者:搜寻专家 更新时间:2023-11-01 03:45:42 24 4
gpt4 key购买 nike

我们正在尝试将单体应用的一部分迁移到微服务,因此我们决定使用 micronaut。我们现在正在提取一个电子邮件服务,该服务提供一些输入将呈现电子邮件并与 SMTP 服务器交谈以发送它们。

为此,我们使用 Java Mail,当我们尝试创建 GraalVM docker 镜像时,它似乎有一些问题。有没有人设法做到这一点,或者根本不可能让它发挥作用?

一些附加信息:

Docker 文件:

FROM oracle/graalvm-ce:19.2.0 as graalvm
COPY . /home/app/email-service
WORKDIR /home/app/email-service
RUN gu install native-image
RUN native-image --no-server -cp build/libs/email-service-*.jar

FROM frolvlad/alpine-glibc
EXPOSE 8080
COPY --from=graalvm /home/app/email-service .
ENTRYPOINT ["./email-service"]

原生图像.properties:

JDBC 驱动程序、redis、kafka 和 thymeleaf 有一些其他“惰性”初始化。

Args = --initialize-at-run-time=io.micronaut.views.thymeleaf.ThymeleafFactory \
--initialize-at-run-time=io.micronaut.views.thymeleaf.ThymeleafViewsRenderer \
--initialize-at-run-time=io.micronaut.views.velocity.VelocityViewsRenderer \
--initialize-at-run-time=io.micronaut.configuration.lettuce.session.$RedisHttpSessionConfigurationDefinition \
--initialize-at-run-time=io.micronaut.configuration.kafka.embedded.KafkaEmbedded \
--initialize-at-run-time=oracle.jdbc.driver.OracleDriver \
--initialize-at-run-time=java.sql.DriverManager \
--initialize-at-run-time=org.hibernate.jpa.HibernatePersistenceProvider \
--initialize-at-run-time=com.sun.mail.util.MailLogger \
-H:IncludeResources=logback.xml|application.yml \
-H:Name=email-service \
-H:Class=com.acme.MySuperDuperApplication

Micronaut 版本:1.2.0
Java 邮件版本:1.6.2 (com.sun.mail:javax.mail:1.6.2)

原生图像编译错误:

Warning: Aborting stand-alone image build. com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: No instances of com.sun.mail.util.MailLogger are allowed in the image heap as this class should be initialized at image runtime. To see how this object got instantiated use -H:+TraceClassInitialization.
Detailed message:
Trace:
at parsing javax.mail.internet.MailDateFormat.access$000(MailDateFormat.java:149)
Call path from entry point to javax.mail.internet.MailDateFormat.access$000():
at javax.mail.internet.MailDateFormat.access$000(MailDateFormat.java:149)
at javax.mail.internet.MailDateFormat$AbstractDateParser.parse(MailDateFormat.java:426)
at javax.mail.internet.MailDateFormat.parse(MailDateFormat.java:251)
at java.text.DateFormat.parse(DateFormat.java:364)
at freemarker.core.JavaTemplateDateFormat.parse(JavaTemplateDateFormat.java:49)
at freemarker.core.JavaTemplateDateFormat.parse(JavaTemplateDateFormat.java:33)
at freemarker.core.BuiltInsForMultipleTypes$dateBI$DateParser.parse(BuiltInsForMultipleTypes.java:204)
at freemarker.core.BuiltInsForMultipleTypes$dateBI$DateParser.get(BuiltInsForMultipleTypes.java:167)
at freemarker.ext.beans.HashAdapter.get(HashAdapter.java:73)
at freemarker.ext.beans.HashAdapter$1$1$1.getValue(HashAdapter.java:124)
at sun.security.ssl.SSLSocketImpl$NotifyHandshakeThread.run(SSLSocketImpl.java:2687)
at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:460)
at com.oracle.svm.core.posix.thread.PosixJavaThreads.pthreadStartRoutine(PosixJavaThreads.java:193)
at com.oracle.svm.core.code.IsolateEnterStub.PosixJavaThreads_pthreadStartRoutine_e1f4a8c0039f8337338252cd8734f63a79b5e3df(generated:0)

最佳答案

不确定它是否足够,但您可以尝试在构建时初始化 com.sun.mail.util.MailLogger 传递额外的--initialize-at-build-time=com.sun.mail.util.MailLogger 作为参数

这将在运行前预加载类,这可能解决或不解决编译问题

附带说明一下,我想您可以将运行时初始化参数链接到一个逗号分隔的列表中,即

--initialize-at-runtime=io.micronaut.views.thymeleaf.ThymeleafFactory,io.micronaut.views.thymeleaf.ThumeleafViewsRenderer, ...

关于java - Micronaut 和 Java Mail API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57804966/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com