Cloud Foundry samples学习笔记 2:hello-spring-mysql

treetor 2012-09-17 11:12:16
本样例程序是一个简单的Java Spring应用实例,旨在演示如何开发一个能部署到Cloud Foundry上的、使用了Mysql数据库的Java Spring应用。

程序功能:程序启动时初始化一个Mysql数据库,创建一张表并插入若干记录,当接收到用户请求时即返回该数据源的信息以及表中的所有条目。

使用技术:Spring,Mysql

程序repository地址:https://github.com/SpringSource/cloudfoundry-samples/tree/master/hello-spring-mysql

程序源码位于“hello-spring-mysql / src / main/“目录下,包含三个子目录:java,resources,webapp。java目录下存放控制器及相关引用类文件;resources下存放sql脚本,用于程序初始化时创建数据表和数据条目;webapp下存放Spring配置文件和视图文件等。

我们以webapp/WEB-INF/web.xml文件为入口,开始对此样例程序进行分析。

web.xml文件


其中配置了要载入的应用程序上下文配置 /WEB-INF/spring/root-context.xml,和view、controller配置 /WEB-INF/spring/appServlet/servlet-context.xml。这些配置文件与一般的Spring应用配置文件并无太大差异,相信很多人比我更熟悉。这里,我们重点关注一下root-context.xml文件。

root-context.xml文件

这里对数据源进行了配置,使用本机的Mysql数据库作为数据源,并使用“db-schema.sql“脚本对”test“数据库进行初始化。该脚本位于resources目录下,创建“current_states”表并插入4条记录。
[sql] view plaincopy

create table if not exists current_states (id smallint primary key, state_code char(2), name varchar(50));
insert into current_states(id, state_code, name) values(1, 'MA', 'Massachusetts') ON DUPLICATE KEY UPDATE id=id;
insert into current_states(id, state_code, name) values(2, 'NH', 'New Hampshire') ON DUPLICATE KEY UPDATE id=id;
insert into current_states(id, state_code, name) values(3, 'ME', 'Maine') ON DUPLICATE KEY UPDATE id=id;
insert into current_states(id, state_code, name) values(4, 'VT', 'Vermont') ON DUPLICATE KEY UPDATE id=id;
我们对这种数据源的配置方式并不陌生,但考虑到此应用是要部署到Cloud Foundry上运行的,就不免产生疑惑:数据源配置为开发者本地的Mysql数据库,数据库名字、username和password也都是自己定义的,Cloud Foundry如何能识别呢?这就不得不提Cloud Foundry的一项功能:自动重配置 auto-reconfiguration。


Cloud Foundry的自动重配置


Cloud Foundry支持对Spring应用的自动重配置。该功能允许开发者在自己本地开发环境中开发并测试Spring应用,无需做任何改动而直接将其部署到Cloud Foundry上,由后者自动完成本地配置的迁移。具体来说,当你的Spring应用需要使用某项服务(如这里的Mysql数据库)时,你完全可以将相关的Bean定义为自己本地环境中的对象,当原封不动部署到Cloud Foundry上时,Cloud Foundry会自动检测所调用的服务类型并修改这些Bean的定义(如这里dataSource的url、username、password等属性),使应用程序与自己内部的云服务实例绑定。(点击此处学习更多)

这就是为什么在root-context.xml中定义了一个本地数据源也可以在Cloud Foundry上正常运行。

Controller

看完了Spring配置文件,剩下的controller就很简单了。“java/org/cloudfoundry/samples“目录下的HomeController.java文件中定义了控制类HomeController

该类持有一个ReferenceDataRepository类对象的引用,用于进行数据库相关的操作。当应用程序接收到用户请求后调用home方法进行处理,通过该引用对象获得数据源的url属性,并查询数据库得到所有记录(由之前db-schema.sql脚本所创建),将结果放入home.jsp页面返回。

运行应用

使用VMC将应用程序部署到Cloud Foundry。(注意部署时需要绑定mysql服务)

访问应用部署url,看到如下页面:

可以看到,Database Info下所显示的数据源url并非在配置文件中所定义的 127.0.0.1:3306/test,而是Cloud Foundry环境(我的dev_setup)地址。这也验证了自动重配置的发生。

总结

本样例程序演示了如何开发一个能部署到Cloud Foundry上的、使用了Mysql数据库的Java Spring应用。Cloud Foundry的自动重配置机制允许开发者在本地环境开发Spring应用并使用本地服务,然后不做任何改动地部署。部署之后的应用程序,使用的是Cloud Foundry内部提供的同类型服务。

...全文
414 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
宅男小何 2012-12-29
  • 打赏
  • 举报
回复
入门不错哦。

547

社区成员

发帖
与我相关
我的任务
社区描述
Cloud Foundry是业界第一个开源PaaS云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。
社区管理员
  • Cloud Foundry社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧