Openshift:使用Java 8在Wildfly 8.2.0上构建Spring Boot应用程序

OpenShift DIY墨盒是在OpenShift上测试不受支持的语言的好方法。 但是它不具有可伸缩性(您可以在此处为可伸缩DIY墨盒投票),这使得它很难与生产级Spring Boot应用程序一起使用。 但是,如果我们将Spring Boot应用程序部署到WildFly Application Server,该怎么办? Spring Boot可以与诸如Tomcat之类的嵌入式servlet容器一起运行,也可以与速度更快的Undertow一起运行,但是它也可以部署到独立的应用服务器上。 这意味着它也可以部署到OpenShift支持的WildFly应用服务器。 让我们来看看从头开始创建Spring Boot应用程序并将其部署到OpenShift上的WildFly 8.2多么容易。

注意 :在浏览OpenShift 文档时,您可能会认为WildFly 8.1和Java 7均受支持(截至撰写本文时)。 幸运的是,这不再是真的:WildFly 8.2和Java 8可以正常工作,并且实际上是默认设置! 这是我第一次对文档过时感到高兴。

更新 :如果您正在寻找快速入门 ,而没有逐步介绍,请查看: 快速入门:OpenShift上的Spring Boot和WildfFly 8.2

先决条件

在开始构建应用程序之前,您需要安装一个OpenShift免费帐户和客户端工具( rhc )。

创建WildFly应用程序

要使用客户端工具创建WildFly应用程序,请键入以下命令:

rhc create-app boot jboss-wildfly-8 --scaling

jboss-wildfly-8盒带描述为WildFly Application Server 8.2.0.Final。 使用缩放选项,因为以后将无法设置它( 在此处投票)

创建应用程序后,您应该看到为您创建的管理用户的用户名和密码。 请存储这些凭据,以便能够登录WildFly管理控制台。

模板应用程序源代码

OpenShift创建一个模板项目。 该项目是标准的Maven项目。 您可以浏览pom.xml并看到该项目默认使用Java 8。 此外,还有创建了两个非标准文件夹: deployments ,用来把生成的存档进去, .openshift与OpenShift特定文件。 请注意.opensift/config 。 这是WildFly配置存储的地方。

Spring Boot依赖项

作为依赖项管理,将使用Spring IO Platform。 使用Spring IO Platform的主要优势在于,它通过提供Spring项目的版本以及经过测试并已知可以协同工作的依赖项,简化了依赖项管理。 通过添加以下内容来修改pom.xml

<dependencyManagement><dependencies><dependency><groupId>io.spring.platform</groupId><artifactId>platform-bom</artifactId><version>1.1.1.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>

现在,可以添加Spring Boot依赖项。 请注意,由于该应用程序将部署到WildFly,因此我们需要显式删除对Tomcat的依赖。

<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>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

配置应用程序

初始化Spring Boot应用程序

具有所有依赖性,我们可以添加应用程序代码。 在demo包中创建Application.javaApplication类的工作是启动Spring Boot应用程序,因此它必须从SpringBootServletInitializer扩展并使用@SpringBootApplication进行注释。

package demo;import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.web.SpringBootServletInitializer;@SpringBootApplication
public class Application extends SpringBootServletInitializer {}

@ Entity,@ Repository,@ Controller

Spring Data JPA是较大的Spring Data系列的一部分,可轻松实现基于JPA的存储库。 对于那些不熟悉该项目的人,请访问: http : //projects.spring.io/spring-data-jpa/ 。

此示例项目的域模型只是具有一些基本字段的Person

@Entity
@Table(name = "people")
public class Person {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)protected Integer id;@Column(name = "first_name")@NotEmptyprotected String firstName;@Column(name = "last_name")@NotEmptyprotected String lastName;@Column(name = "address")@NotEmptyprivate String address;@Column(name = "city")@NotEmptyprivate String city;@Column(name = "telephone")@NotEmpty@Digits(fraction = 0, integer = 10)private String telephone;}

Person需要@Repository ,所以我们可以createa使用Spring的数据仓库基础之一。 通过简单的接口定义,Spring Data存储库减少了许多样板代码:

@Repository
public interface PeopleRepository extends PagingAndSortingRepository<Person, Integer> {List<Person> findByLastName(@Param("lastName") String lastName);
}

使用域模型后,可以方便地使用一些测试数据。 最简单的方法是为data.sql文件提供要在应用程序启动时执行的SQL脚本。

创建src/main/resources/data.sql其中包含people表的初始数据(请参见下文)。 Spring Boot将选择该文件并针对配置的数据源运行。 由于使用的数据源正在连接到H2数据库,因此必须使用正确的SQL语法:

INSERT INTO people VALUES (1, 'George', 'Franklin', '110 W. Liberty St.', 'Madison', '6085551023');

有了Spring Data JPA存储库后,我们可以创建一个简单的控制器来通过REST公开数据:

@RestController
@RequestMapping("people")
public class PeopleController {private final PeopleRepository peopleRepository;@Injectpublic PeopleController(PeopleRepository peopleRepository) {this.peopleRepository = peopleRepository;}@RequestMappingpublic Iterable<Person> findAll(@RequestParam Optional<String> lastName) {if (lastName.isPresent()) {return peopleRepository.findByLastName(lastName.get());}return peopleRepository.findAll();}
}

findAll方法接受可选的lastName参数,该参数绑定到Java的8 java.util.Optional

首页

OpenShift在项目设置过程中生成的项目包含带有一些静态文件的webapp文件夹。 可以删除这些文件,并可以修改index.html

<!DOCTYPE html>
<html>
<head lang="en"><meta charset="UTF-8"><title>OpenShift</title>
</head>
<body>
<form role="form" action="people"><fieldset><legend>People search</legend><label for="lastName">Last name:</label><input id="lastName" type="text" name="lastName" value="McFarland"/><input type="submit" value="Search"/></fieldset>
</form>
<p>... or: <a href="people">Find all ...</a>
</p>
</body>
</html>

它只是一个静态页面,但是我注意到,如果没有默认映射( / )或返回的代码不同于200 ,则应用程序将无法启动。 通常,将始终存在默认映射。

组态

创建src/main/resources/application.properties并输入以下值:

  • management.context-path=/manage :执行器默认管理上下文路径为/ 。 更改为/manage ,因为OpenShift公开了/health端点本身,该端点涵盖了Actuator的/health端点。
  • spring.datasource.jndi-name=java:jboss/datasources/ExampleDS :由于应用程序使用Spring Data JPA,因此我们希望通过JNDI绑定到服务器的数据源。 请查看.openshift/config/standalone.xml以获取其他数据源。 如果您希望配置MySql或PostgreSQL与您的应用程序一起使用,则这一点很重要。 在此处阅读有关在Spring Boot中连接到JNDI数据源的更多信息: http : //docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-connecting-to-a-jndi-datasource
  • spring.jpa.hibernate.ddl-auto=create-drop :基于提供的实体创建数据库的结构。

部署到OpenShift

准备将应用程序推送到存储库。 提交本地更改,然后将其推送到远程:

git push

初始部署(构建和应用程序启动)将花费一些时间(最多几分钟)。 后续部署要快一些。 现在,您可以浏览到: http : //appname-yournamespace.rhcloud.com/ ,您应该看到以下形式:

单击具有默认值的搜索将获得ID = 3的记录:

[{"id": 3,"firstName": "2693 Commerce St.","lastName": "McFarland","address": "Eduardo","city": "Rodriquez","telephone": "6085558763"}
]

导航到http://appname-yournamespace.rhcloud.com/people将返回数据库中的所有记录。

走向Java 7

如果要在项目中使用Java 7,而不是默认的Java 8, .openshift/markers/java8重命名为.openshift/markers/java7并相应地更改pom.xml

<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.7</maven.compiler.source><maven.compiler.target>1.7</maven.compiler.target><maven.compiler.fork>true</maven.compiler.fork>
</properties>

请注意, maven.compiler.executable已删除。 不要忘记更改@Controller的代码并使它与Java 7兼容。

摘要

在此博客文章中,您学习了如何配置基本的Spring Boot应用程序以及如何使用WildfFly 8.2和Java 8在OpenShift上运行它。OpenShift使用Web代理HAProxy扩展应用程序。 OpenShift负责自动添加或删除应用程序副本以根据需要处理请求。

资源资源

  • https://github.com/kolorobot/openshift-wildfly-spring-boot-此博客文章的源代码。

翻译自: https://www.javacodegeeks.com/2015/02/openshift-build-spring-boot-application-on-wildfly-8-2-0-with-java-8.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360648.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql索引ppt2020_mysql数据库索引

cmd 命令行1、mysql -u root -p ------进入数据库2、use mysql -------使用数据库3、show index from table_name; ------查看某张表的索引4、删除索引其中任一条drop index index_name on table_name ;alter table table_name drop index index_name ;alter tab…

response.sendRedirect使用注意事项 .

response.sendRedirect使用注意事项 . 问题&#xff1a;最近在调试xwiki的时候遇到java.lang.IllegalStateException异常&#xff0c;解决方案&#xff1a;在response.sendRedirect("")方法后加return&#xff1b;语句即可&#xff1a;原因是在程序中两次调用respons…

以编程方式确定Java类的JDK编译版本

当需要确定使用哪个JDK版本来编译特定的Java .class文件时&#xff0c; 通常使用的方法是使用javap并在javap输出中查找列出的“主要版本”。 我在博客文章Autoboxing&#xff0c;Unboxing和NoSuchMethodError中引用了这种方法&#xff0c;但是在继续以编程方式实现此方法之前&…

mysql传输数据到中间表_mysql通过中间表实现数据的“部分复制” -电脑资料

一、基本思路1.在主库上&#xff0c;为不同的从库建立各自的中间表2.主库与从库之间只对“中间表”进行复制操作3.从库上&#xff0c;“中间表”通过触发器&#xff0c;实现与“实体表”的数据同步二、主库结构与配置主库结构&#xff1a;主库配置&#xff1a;三、从库结构与配…

NO1:在Windows端安装SecureCRT来连接Linux

正常情况下都不会直接在Linux服务端进行操作&#xff0c;实际使用服务器和工作电脑不会在同一个地方&#xff0c;也不允许在服务器操作。 我这里用SecureCRT 7.0来连接服务器。提供个下载&#xff0c;带注册机工具&#xff1a;http://pan.baidu.com/share/link?shareid1430164…

如何使用Spring Security和Basic身份验证保护Jersey REST服务

在我之前的博客文章“ 检查REST API是否有效的快速方法–从清单文件中获取GET详细信息”中 &#xff0c;我展示了如何开发REST资源以轻松检查开发的REST API是否可用。 在本文中&#xff0c;我将介绍如何使用Spring Security和基本身份验证来保护此资源的安全性– “在HTTP事务…

python提取数据段_python提取数据段 python数据分析

如何在python中用slice分段取数据&#xff1f;执行以下操作&#xff1a;&gt&gt arange(6)&gt&gt a[0&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5]&gt&gt a[0:3]&#xff0c;a[5][[2&#xff0c;3&#xff0c;4&#xff0c;4&a…

计算几何相关资料+题目推荐(不定期补充)

旋转卡壳&#xff1a;http://blog.csdn.net/accry/article/details/6070626 计算几何题目推荐&#xff1a;http://blog.csdn.net/accry/article/details/6070656 先是计算几何入门题推荐 &#xff1a; 计算几何题的特点与做题要领&#xff1a;1.大部分不会很难&#xff0c;少部…

一个JAXB Nuance:字符串与枚举(受限制的XSD字符串)

尽管用于XML绑定的Java体系结构 &#xff08; JAXB &#xff09;在名义情况下&#xff08;尤其是自Java SE 6以来&#xff09; 相当容易使用&#xff0c;但它也存在许多细微差别。 一些常见的细微差别是由于无法将 XML模式定义 &#xff08;XSD&#xff09;类型与Java 类型精确…

weblogic概览下的上下文根配置_weblogic创建域

WebLogic 域配置策略在本文的 第一部分 (第 8 期,卷 3 , WLDJ )中,我曾向您详细介绍了可用于创建和配置域,以及经 过评估的指南和模板选项的不同策略。 ...startWebLogic.cmd 2.startWebLogic-8001.cmd 输入域的管理名和密码即可运行 新建一个停止脚本:stopWebLogic-8001.cmd 内…

ActiveMQ 持久化讯息数据库信息

www.MyException.Cn 发布于&#xff1a;2012-11-10 10:48:50 浏览&#xff1a;0次ActiveMQ 持久化消息数据库信息最近有网友问我&#xff0c;ActiveMQ持久化的中表结构是什么&#xff0c;表需要人工创建吗&#xff1f;我告诉他们不需要&#xff0c;ActiveMQ会帮助我们生成的…

休眠锁定模式– OPTIMISTIC_FORCE_INCREMENT锁定模式如何工作

介绍 在我以前的文章中 &#xff0c;我解释了OPTIMISTIC锁定模式是如何工作的&#xff0c;以及它如何帮助我们同步外部实体状态更改。 在本文中&#xff0c;我们将介绍OPTIMISTIC_FORCE_INCREMENT锁定模式的使用模式。 使用LockModeType.OPTIMISTIC &#xff0c;将在当前正在运…

java mysql nullpointerexception_无法从Java连接到MySQL:MySQL驱动程序连接逻辑中的NullPointerException...

我正在尝试连接到我在Java程序中使用MySQL创建的数据库,但它总是失败.为了举例,这是我的代码&#xff1a;import java.sql.*;public class Squirrel {public static void main(String[] args) {String user;String password;Connection connection;Statement statement;try {Cl…

Android应用中Back键的监听及处理

MainActivity如下: package cn.testnbackpressed; import android.os.Bundle; import android.view.KeyEvent; import android.app.Activity; /*** Demo描述:* 处理Back键按下事件* * 注意事项:* 以下两种方法勿一起使用*/ public class MainActivity extends Activity {Overri…

设置本地Nexus存储库并从Maven部署WAR文件

Maven Central充当中央存储库管理器&#xff0c;其中二进制工件由不同的团队/公司/个人上载并与世界其他地方共享。 就像github和其他对源代码控制非常有效的源代码存储库一样&#xff0c;这些存储库管理器还充当您自己生成的二进制工件的部署目标。 设置本地存储库管理器具有…

mac solr mysql 配置文件_Solr配置文件浅析

接上一篇Linux下安装solr7.4&#xff0c;来谈谈solr的配置文件schema.xml和db-data-config.xml首先看schema.xml&#xff1a;idfield标签用来定义solr core中的字段。这里列出的三个字段如果没有特殊原因尽量保留。字段id被声明为uniqueKey,是让id来唯一标明一个solrdocument。…

JSP自定义标签_用简单标签控制标签体执行10次

什么也不说,直接上代码: import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.JspFragment; import javax.servlet.jsp.tagext.SimpleTagSupport;//控制标签执行10次 public class SimpleTagDemo2 extends SimpleTagSupport …

JSF:在正确的阶段进行验证(了解生命周期)

嗨&#xff0c;大家好&#xff01; 尽管标题强调验证一词&#xff0c;但本文实际上是关于JSF生命周期的。 那是因为我相信&#xff0c;真正了解生命周期的最简单方法之一就是通过做出我们一直在做的事情&#xff1a;验证用户输入。 总的来说&#xff0c;理解所谓的JSF生命周期…

mysql 更改root密码字段不存在_初次登陆MySQL修改密码是出现Unknown column 'password' in 'field list'的解决方法...

新安装的MySQL5.7&#xff0c;登录时提示密码错误&#xff0c;安装的时候并没有更改密码&#xff0c;后来通过免密码登录的方式更改密码&#xff0c;输入update mysql.user set passwordpassword(root) where userroot时提示ERROR 1054 (42S22): Unknown column password in f…

OpenShift v3:使用WildFly和MySQL的Java EE 7入门

OpenShift是Red Hat的开源PaaS平台。 OpenShift v3 &#xff08;将于今年发布&#xff09;将提供使用Docker和Kubernetes运行微服务的整体体验。 以经典的Red Hat方式&#xff0c;所有工作都在OpenShift Origin的开源中完成。 这也将推动OpenShift Online和OpenShift Enterpris…