警告:我不是Spring Boot的专家。 我发现很多事情对此非常有趣,并且当然可以真正改善您的日常工作。 而且,我对Spring Boot没有任何反对,也没有开发或使用它的人。 但是我认为社区高估了该产品。
一年前,我开始收到很多有关博客文章,推文和有关Spring Boot信息的链接。 在他的网站上,您可以阅读:
通过Spring Boot,可以轻松地创建独立的,生产级的基于Spring的应用程序,您可以“运行”它们。
看来这件事已经彻底改变了Java世界。
例如,Spring Boot中的Spring MVC(以及RESTful)应用程序如下所示:
@Controller
@EnableAutoConfiguration
public class SampleController {@RequestMapping("/")@ResponseBodyString home() {return "Hello World!";}public static void main(String[] args) throws Exception {SpringApplication.run(SampleController.class, args);}
}
如您所见,魔术发生在SpringApplication类内部,该类启动了嵌入式Tomcat或Jetty,并使用Spring东西注册了该控制器。 我知道令人印象深刻的几行内容就是您可以准备使用端点。
但是我不知道自己是否可以在JavaEE世界中使用相同的方法,并且具有相同的底层和轻量级需求。 答案是绝对的。 我刚刚创建了一个非常小的原型/概念验证来证明这是可能的。
另外,请不要误会我的意思,除了自包含的应用程序(例如监视,执行器或工件依赖项解析)以外,Spring Boot还提供了更多其他功能。 但是这些东西仅仅是与其他技术的集成,我的示例是在1小时半的时间内从零开始开发的,因此不要指望可以使用Spring Boot。
首先要选择的是要使用的应用程序服务器,在这种情况下,毫无疑问,此任务的最佳选择是Apache TomEE。 它是经过认证的Web配置文件Java EE服务器,需要1秒钟启动时间,并且可以使用默认的Java内存参数。
因此,我在pom.xml文件中添加了tomee依赖项。
<dependencies><dependency><groupId>org.apache.openejb</groupId><artifactId>tomee-embedded</artifactId><version>1.7.1</version></dependency><dependency><groupId>org.apache.openejb</groupId><artifactId>openejb-cxf-rs</artifactId><version>4.7.1</version></dependency><dependency><groupId>org.apache.openejb</groupId><artifactId>tomee-jaxrs</artifactId><version>1.7.1</version></dependency><dependency><groupId>org.jboss.shrinkwrap</groupId><artifactId>shrinkwrap-depchain</artifactId><version>1.2.2</version><type>pom</type></dependency></dependencies>
在以前的嵌入式版本(1.7.1)中,您只能部署文件中包含的应用程序,不能像在Tomcat中一样以编程方式添加Servlet。 嵌入式tomee API在不久的将来可能会改变,但是现在,我们将使用ShrinkWrap以编程方式创建这些部署文件。
这是我们想要做的:
import javax.ejb.Stateless;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;@Stateless
@Path("/sample")
public class SampleController {@GET@Produces("text/plain")public String sample() {return "Hello World";}public static void main(String args[]) {TomEEApplication.run(HelloWorldServlet.class, SampleController.class);}
}
请注意,我们仅导入JavaEE类,其数量与Spring Boot一号相比减少了。 在短短2秒钟内即可使用该应用程序。 请记住,您可以使用Web配置文件规范以及JAX-RS或JMS提供的任何功能。 因此,例如,您可以使用JPA,Bean验证,EJB,CDI等。
而且TomEEApplication里面有什么? 只有70行的课程会让您惊讶:
public class TomEEApplication {private static void startAndDeploy(Archive> archive) {Container container;try {Configuration configuration = new Configuration();String tomeeDir = Files.createTempDirectory("apache-tomee").toFile().getAbsolutePath();configuration.setDir(tomeeDir);configuration.setHttpPort(8080);container = new Container();container.setup(configuration);final File app = new File(Files.createTempDirectory("app").toFile().getAbsolutePath());app.deleteOnExit();File target = new File(app, "app.war");archive.as(ZipExporter.class).exportTo(target, true);container.start();container.deploy("app", target);container.await();} catch (Exception e) {throw new IllegalArgumentException(e);}registerShutdownHook(container);}private static void registerShutdownHook(final Container container) {Runtime.getRuntime().addShutdownHook(new Thread() {@Overridepublic void run() {try {if(container != null) {container.stop();}} catch (final Exception e) {throw new IllegalArgumentException(e);}}});}public static void run(Class> ... clazzes) {run(ShrinkWrap.create(WebArchive.class).addClasses(clazzes));}public static void run(WebArchive archive) {startAndDeploy(archive);}
}
如您所见,这实际上是一段简单的代码,例如,对应用程序的配置或名称进行了硬编码,但请注意,只需进行几处简单的更改,就可以开始配置服务器,应用程序等。
总而言之,Spring Boot当然很酷,但是通过非常简单的步骤,您就可以在JavaEE世界中拥有相同的功能。 我们(Apache TomEE贡献者)将开始着手这一工作,并扩大这一想法。
因此,不要因为Spring Boot而低估Java EE。
翻译自: https://www.javacodegeeks.com/2014/09/one-jar-to-rule-them-all-apache-tomee-shrinkwrap-javaee-boot.html