一、微服务容器化开发必由之路
几年前做过基于springmvc+spring+mybatis的开发工作,当时的感觉就是配置文件很多,开发大部分精力都用于改配置文件去了。没有把主要精力放在业务上,现在流行基于容器技术的微服务开发,springboot成了微服务开发的主要抓手。
Spring Boot是Spring的常规配置解决方案,用于创建可以“运行”的独立的,生产级的基于Spring的应用程序。[22]它预先配置了Spring对Spring平台和第三方库的最佳配置和使用的“见解视图”,因此您可以尽量少开始。大多数Spring Boot应用程序只需要很少的Spring配置。特征:
- 创建独立的Spring应用程序
- 直接嵌入Tomcat或Jetty(无需部署WAR文件)
- 提供自以为是的“入门” 项目对象模型(POM)以简化您的Maven配置
- 尽可能自动配置Spring
- 提供生产就绪功能,例如指标,运行状况检查和外部化配置
- 绝对没有代码生成,也不需要XML配置
二、开发工具设置
1、开发环境设置
a、安装java1.8以上开发环境,springboot需要jdk1.8以上环境支撑;
b、安装最新版maven,并设置好本地maven仓库;
2、集成开发工具下载
强烈建议下载安装最新版的idea,我之前用的是2017年2月版idea出现了很多莫名其妙的问题,最后卸载重新安装了最新版的一切正常。
选择下载安装Ultimate版本,2018年3月目前是最新版,大概有500多M。下面是下载链接地址
https://www.jetbrains.com/idea/download/download-thanks.html?platform=windows
3、IDEA的激活
这方面可以直接参考这位兄弟的文章,讲解的非常详细
https://blog.csdn.net/tiantang_1986/article/details/81346558
三、通过IDEA创建一个springboot应用
1、打开IDEA程序创建一个应用
2、选择打包模式为war包,因为后面需要创建的文件包括jsp文件,jsp文件必须通过war包才能发布
3、选择依赖组件,aop与web
4、进入项目后在main目录下创建webapp/WEB-INF/jsp目录,其它的目录结构与文件都是IDEA自动生成的
5、 在项目的maven依赖文件pom.xml文件中加入对JSP和JSTL的支持
<!--jsp页面使用jstl标签-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!--用于编译jsp-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
依赖范围就是用来控制依赖和三种classpath(编译classpath,测试classpath、运行classpath)的关系,Maven有如下几种依赖范围:
- compile:编译依赖范围。如果没有指定,就会默认使用该依赖范围。使用此依赖范围的Maven依赖,对于编译、测试、运行三种classpath都有效。典型的例子是spring-code,在编译、测试和运行的时候都需要使用该依赖。
- test: 测试依赖范围。使用次依赖范围的Maven依赖,只对于测试classpath有效,在编译主代码或者运行项目的使用时将无法使用此依赖。典型的例子是Jnuit,它只有在编译测试代码及运行测试的时候才需要。
- provided:已提供依赖范围。使用此依赖范围的Maven依赖,对于编译和测试classpath有效,但在运行时候无效。典型的例子是servlet-api,编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容器以及提供,就不需要Maven重复地引入一遍。
6、修改项目的启动端口与spring-mvc关于返回文件的路径及文件类型
application.properties
server.port=8090
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
7、在com.springboot.webjsp.main包下面创建一个新类,用于spring-mvc的控制器
package com.springboot.webjsp.main;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class IndexController {
@RequestMapping("/index")
public String index(){
return "index";
}
}
注释:这段代码的主要用途是截获用户的url请求并将其转换到本地的jsp文件资源进行解析处理,比如用户传入的url是/index,会自动将这个url解析为/WEB-INF/jsp/index.jsp文件。
8、在/webapp/WEB-INF/jsp/目录下创建一个index.jsp文件,用于接应用户的/index访问请求
<%--
Created by IntelliJ IDEA.
User: adminwl
Date: 2018/12/4
Time: 15:15
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>spring boot jsp test</title>
</head>
<body>
<h1>这是一个spring boot的jsp测试页面</h1>
</body>
</html>
四、通过maven命令行编译运行项目测试
1、通过命令行进入项目保存的本地磁盘目录
cd G:\projectsource\webjsp
2、执行mvn编译打包命令
mvn clean package
3、查看编译打包结果
4、通过mvn直接打包执行
mvn clean spring-boot:run
通过上面的run命令可以在打包完成后直接运行war包
通过浏览器直接输入http://localhost:8090/index可以直接访问该项目
五、通过IDEA图形化界面编译运行测试项目
1、打开项目主执行程序选择debug模式运行
2、观察控制窗口的输出信息
3、最后在通过浏览器直接输入http://localhost:8090/index可以直接访问该项目,效果与通过maven打包后的访问测试效果一样。
至此,已经完成了通过idea开发工具在本地环境中的springboot开发任务,如何把这个成果发布到互联网上呢?,下面跟我一起完成把成果发布到互联网的免费云服务中吧。。。。。
六、注册一个pivotal云平台账号
1、在这个地址下创建一个自己的账号
https://account.run.pivotal.io/z/uaa/sign-up
2、其中的电子邮件地址最好使用国外的
3、创建成功后需要进入邮箱激活你刚刚创建的账号
4、登陆成功后显示成功界面
5、 在本地计算机上下载安装一个cf可执行程序,cf应用程序支持mac 、linux与windows 32/64
我的计算机是win10-64位,所以我下载了一个windows64的安装文件
https://cli.run.pivotal.io/stable?release=windows64&source=github
6、安装后在本地计算机上执行下面的命令完成项目发布工作
首先执行cf help查看cf软件安装是否成功
7、进入本地项目目录
cd G:\projectsource\webjsp
执行登陆命令
cf login -a https://api.run.pivotal.io
email输入你申请账号时登记的即可,后面的密码输入你账号的密码。
8、手工编辑生成manifest.yml文件
在项目当前目录上手动编辑生成文件manifest.yml文件,文件内容如下
applications:
- name: myTestSpringbootJsp
path: target/webjsp-0.0.1-SNAPSHOT.war
memory: 768M
instances: 1
random-route: true
9、向云端上传项目文件
cf push
五、验证云端发布项目
1、paas云平台管理后台查看项目状态
浏览器中直接输入:https://mytestspringbootjsp-agile-numbat.cfapps.io/
2、pivotal的云服务非常给力,很方便的实现对云业务应用的弹性伸缩扩展
3、通过cf的命令行检查项目运行状态
查看项目运行状态,包括运行状态,cpu占用,内存资源占用及硬盘资源占用情况。
cf app app_name
通过cf logs app_name --recent 查看项目当前运行日志情况
使用cf scale app_name -i num 命令将项目的对外服务实例数降为1,或者可以根据实际资源占用情况升为n,紧跟着使用cf app 命令查看实例数的改变情况,根据实际观测cf的水平伸缩时间大概在5秒以内完成,非常迅速。
s
总结:
学习springboot开发是走向基于容器的微服务开发之路,其中PCF的public cloud是一个非常出色的原生支持自家springboot的很好的免费的云平台,我们可以非常方便的将自己开发的容器微服务发布上去。