Springboot 与 RestEasy 集成并部署到 Jboss 服务器
Posted
技术标签:
【中文标题】Springboot 与 RestEasy 集成并部署到 Jboss 服务器【英文标题】:Springboot integration with RestEasy and deploying to Jboss server 【发布时间】:2018-01-01 06:58:15 【问题描述】:我想将 Spring Boot 与 RestEasy 集成。 我通过引用 link 开始使用 Paypal Springboot starter
我已经添加了上面链接中提到的 paypal resteasy 依赖项。 但是在部署到 Jboss 服务器时出现以下错误:
Caused by: java.lang.NoClassDefFoundError: org/jboss/resteasy/spi/NotImplementedYetException
at java.lang.Class.getDeclaredConstructors0(Native Method) [rt.jar:1.8.0_131]
at java.lang.Class.privateGetDeclaredConstructors(Unknown Source) [rt.jar:1.8.0_131]
at java.lang.Class.getConstructor0(Unknown Source) [rt.jar:1.8.0_131]
at java.lang.Class.newInstance(Unknown Source) [rt.jar:1.8.0_131]
at org.jboss.as.web.deployment.ServletContainerInitializerDeploymentProcessor.loadSci(ServletContainerInitializerDeploymentProcessor.java:194)
at org.jboss.as.web.deployment.ServletContainerInitializerDeploymentProcessor.deploy(ServletContainerInitializerDeploymentProcessor.java:131)
有人可以建议我将 Springboot 与 RestEasy 集成的最佳方法吗?
【问题讨论】:
如果你使用的是spring boot,jar不应该已经有嵌入式服务器吗?为什么需要部署到另一台服务器? 我同意,它适用于 Spring boot Embedded 服务器。但是,在我们的项目中,我们在生产中拥有 Jboss 服务器,并且我们只能在 Jboss 服务器上部署...... 【参考方案1】:这里似乎是两个独立的问题:如何集成 RESTEasy,以及如何部署到 JBoss。
RESTEasy:您提到的用于 RESTEasy 的 Paypal 启动器已转移到新家。 https://github.com/resteasy/resteasy-spring-boot/blob/master/mds/USAGE.md 最新版本运行良好。 (我不知道你使用的版本之后发生了什么变化。)
JBoss: 将自托管 Spring Boot 应用程序转换为在 JBoss 上运行的应用程序需要几个步骤,从您的文章中并不清楚您已经进行了哪些更改。
1) 在您的 pom.xml 中,将包装从 jar 更改为 war。
2) 同样在 pom.xml 中,从任何试图引入它的依赖项中排除 spring-boot-starter-tomcat。通常这是 spring-boot-starter-web,但如果您使用的是 resteasy-spring-boot -starter 你会从那个中排除。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
3) 更改main
类并使其扩展SpringBootServletInitializer
。
4) 同样在main
中覆盖configure
方法。 (有些文章省略了这一步——它与确保您的组件被正确扫描有关,因此可能有一些方法可以配置项目,因此它是可选的。)
public class NameOfMyMainClass extends SpringBootServletInitializer
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
return application.sources(NameOfMyMainClass.class);
public static void main(String[] args)
SpringApplication.run(NameOfMyMainClass.class, args);
这些步骤详细写在这里:https://thepracticaldeveloper.com/2018/08/06/how-to-deploy-a-spring-boot-war-in-wildfly-jboss/
理论上,这就是您所需要的。但在实践中,我从来没有让它工作(Spring Boot 2.0.4,JBoss 7.1。)
第一个问题:Spring Boot 2 显然需要 JBoss 7。直到我在 JBoss 6 上浪费了一些时间后才知道这一点。 第二个问题:即使在升级服务器之后,我的 JAX-RS bean 也无法正常工作。根据下面的文章,JBoss 7.1.1 没有完全集成,需要一些额外的解决方法:https://ilya-murzinov.github.io/articles/spring-boot-jboss/
有些文章声称成功,但请注意他们倾向于使用 Wildfly,而不是 JBoss。 (也有可能 JBoss 7.0 没有所有这些问题。)因此,如果您正在关注其中一篇文章,请确保它们使用的是您可以使用的 Spring Boot 和 JBoss 版本。
【讨论】:
以上是关于Springboot 与 RestEasy 集成并部署到 Jboss 服务器的主要内容,如果未能解决你的问题,请参考以下文章
Springboot 使用 SAML 与 IDP 集成,并提供 .pem 文件
Hadoop Jersey 与 Wildfly resteasy 发生冲突
RESTEasy with Undertow,访问 HttpServletRequest