时间:2022-08-11 16:15:01 | 来源:网站运营
时间:2022-08-11 16:15:01 来源:网站运营
JdbcTemplate
、JmsTemplate
以及BeanFactory
生命周期、了解Servlet
监听器,你以为掌握了这些就可以开始开发了吗?实际上问题远没有结束,如果你要用Spring MVC编写一个简单的hello world
,你还需要了解DispatcherServlet
和一堆Model-View-Controller
相关的类型。jar
包。这意味着Spring Boot将所有的依赖和应用程序代码都包装到一个自包含的jar
中,而这些jar包运行在一个平面的类加载器中。简单的类加载体系使得开发人员更容易理解应用程序的启动、依赖关系和日志输出,但更重要的是,它有助于减少应用从构建到生产环境的步骤数量。这意味着开发人员不必将打包好的应用放置到应用服务器中,而是直接运行这个standalone的应用,如果你需要servlet
,那么完全可以将其打包在应用内,使其为你服务。java -jar <name.jar>
就可以启动你的应用了!Spring Boot、Dropwizard和WildFly Swarm都遵循将所有内容打包成可执行的jar
模式。但是传统的应用服务器包含的管理能力,怎么在这种模式下实现呢?actuator
的模块,它可以实现应用的指标统计。例如:我们可以收集日志、查看指标、生成执行线程dump、显示环境变量、了解gc以及显示BeanFactory中配置的bean。可以通过HTTP
或者JMX
暴露这些信息或者进行日志输出。借助Spring Boot,我们可以利用Spring框架的功能、减少配置并快速开发应用并上线。Spring Boot CLI 的安装方式,可以参考 这里一旦你安装了Spring Boot CLI,你可以这样检查一下。
Homebrew下:brew tap pivotal/tap
brew install springboot
spring init --build maven --groupId com.murdock.examples --version 1.0 --java-version 1.8 --dependencies web --name hola-springboot hola-springboot
在microservices-camp下运行。运行该命令后,将会在当前目录下创建一个
hola-springboot
目录,同时该目录下包含了一个完整的Spring Boot程序,简单的介绍一下这个命令中包含的内容。jpa
、security
和cassandra
hola-springboot
目录中, 执行命令:mvn spring-boot:run
,如果程序启动,没有报错,你就能看到如下的日志:http://localhost:8080
,你会看到如下内容后续实践内容与原文有不同,在操作性上要比原文具备更好的实践性。
api/holaV1
HTTP/REST端点,访问它将返回 Hola Spring Boot @ X,而其中的 X 是运行应用的本机IP。hola-springboot
导入到IDE中,在com.murdock.examples.holaspringboot
包下面建立一个类,名称为HolaRestControllerV1
。hola()
返回了我们需要的内容,一个简单的字符串。HolaRestControllerV1
的POJO
,你可以写一些单元测试去做验证,而让它暴露HTTP端点,则需要增加一些内容。@RequestMapping("/api")
代表着HolaRestControllerV1
接受来自/api
路径的请求,当添加@RequestMapping(method = RequestMethod.GET, value = "/holaV1", produces = "text/plain")
时,表示告知Spring在/holaV1(其实是/api/holaV1)暴露HTTP GET端点,该端点接受的类型是text/plain
。Spring Boot将会使用内置的Tomcat
运行,当然你也可以切换到Jetty
或者Undertow
。hola-springboot
目录下,执行mvn clean package spring-boot:run
,然后使用浏览器访问http://localhost:8080/api/holaV1
,如果一切正常,我们可以看到如下内容。helloapp.*
属性绑定到HolaRestController
,可以在类型上声明@ConfigurationProperties(prefix="helloapp")
,Spring Boot会自动尝试将比如helloapp.foo
或者helloapp.bar
等这些属性值绑定到类型实例的foo
、bar
等字段上。application.properties
,我们就可以在这个文件中定义新属性,比如:helloapp.saying
。HolaRestControllerV2
。hola-springboot
目录下,继续使用mvn clean package spring-boot:run
来编译工程,运行这个应用,然后使用浏览器访问http://localhost:8080/api/holaV2
,你会看到如下内容。actuator
来完成这个工作。actuator
,启用的过程非常简单。在hola-springboot/pom.xml
中依赖:hola-springboot/src/main/resources/application.properties
中增加一个配置(安全原因):hola-springboot
下运行:mvn clean package spring-boot:run
重新编译工程,启动项目。http://localhost:8080/api/holaV1
以及http://localhost:8080/api/holaV2
,然后访问一下:http://localhost:8080/metrics
,可以看到如下内容。hola-springboot
下,运行mvn clean package
,然后可以通过java -jar
来运行。Dropwizard
和WildFly Swarm
都使用类似的方式进行。在第五章中,将会讨论服务的柔性、适应性交互和调用接下来将扩展
hola-springboot
项目,完成服务的调用,但在此之前,我们先要搭建一个后台服务,完成类似下图的交互。后台服务的构建,将采用forge + WildFly的方式进行,比原文中写一个Servlet部署到Jetty显得更好通过以下方式,可以在
关于forge的安装,在mac下:brew install jboss-forge
microservices-camp
下创建一个具备持久化能力的REST服务,它可以自由的部署到WildFly
中。forge
构建完成之后,可以将其导入到IDE中,如果观察BookEndpoint
这个类型,你会发现涉及到CRUD
以及分页查询等逻辑已经完全具备了。hola-backend.war
的应用,下面我们将其部署到WildFly
中。WildFly
的使用可以通过下载到本地运行,但是由于涉及到两个进程的交互,本文采用Docker
的方式进行部署,读者可以自行准备环境。笔者准备了登录到WildFly
镜像,可以简单的运行起来
执行:sudo docker run --name wildfly -it -p 9990:9990 -p 8080:8080 weipeng2k/wildfly-admin
,可以启动一个WildFly
,HTTP端口在8080,应用管理端口在9990
管理员账号笔者已经构建在镜像中:admin/Admin#hello1234
WildFly
后台,通过管理界面,部署hola-backend.war
。WildFly
。下面使用chrome插件Postman
构建Book
数据,然后测试是否可用。hola-backend
工作正常,当然可以通过WildFly
的管理界面查询运行时信息,这点和Spring Boot的actuator很像,但是产品化的体验做的更好些。hola-springboot
项目中新建BookRestController
,使用RestTemplate
来完成后端服务的交互。BookRestController
将后端的host与port放在了配置中,而前缀是books
,那么也就需要在application.properties
中增加这些配置。http://localhost:8080/api/books/1
,它将访问hola-springboot
,而hola-springboot
将会调用hola-backend
,最终由hola-springboot
输出结果。WAR
和EAR
不同的部署方式,以及如何使用外部资源来完成配置,并通过actuator暴露了Metrics,使用RestTemplate
调用了另一个服务。如果你想了解跟多内容,可以参考下面的链接。关键词:微服,使用,发指