我们高兴地宣布,Spring Petclinic 示例应用程序已重构。
源代码现在可在
github 上获取。以下是新应用程序的屏幕截图:
以下是新架构的概述
Spring,Spring,Spring
我们使用了以下 Spring 功能
- 使用 jdbc (JdbcTemplate)、JPA 或 Spring Data JPA(存储库层)的数据访问集成。您可以通过在 web.xml 或其中一个 JUnit 测试中设置相应的 bean 配置文件来选择要使用的实现。
- 使用 @Transactional(服务层)的事务
- 使用 @Cacheable 和 ehcache 作为缓存实现的缓存(服务层)
- Spring MVC:使用 Bean Validation (JSR-303) 的表单验证
- Spring MVC:使用 ContentNegotiatingViewResolver 的内容协商(html、xml 或 atom)
- Spring MVC:使用 SimpleMappingExceptionResolver 的异常处理
- Spring MVC:Spring MVC 测试框架的使用
我们充满活力的社区
我们从社区中的专家那里获得了大量贡献(包括多个开源项目的负责人)。
Thymeleaf
如果您还没有听说过它,Thymeleaf 可以被视为 JSP 的替代品。它将自己定义为一个 XML/XHTML/HTML5 模板引擎。
它基于一些带有少量命名空间魔术的纯 HTML 文件。
Thymeleaf 项目的 Daniel 和 Soraya 创建了一个使用 Thymeleaf 代替 JSP 的 Spring-Petclinic 分支。他们在这篇博客文章中记录了迁移步骤:http://www.thymeleaf.org/petclinic.html
Spring Petclinic 的 Thymeleaf 分支可在此处获取:https://github.com/thymeleaf/thymeleafexamples-petclinic
要了解有关 Thymeleaf 的更多信息:http://www.thymeleaf.org
在 Twitter 上关注 Thymeleaf:https://twitter.com/thymeleaf
Dandelion
Dandelion 提供了一套您可以与 JSP 或 Thymeleaf 一起使用的标签库。
我们在 Spring-Petclinic 中使用它来处理 DataTables。它基于 jQuery DataTables 和 Bootstrap 生成表格。
您可以执行以下操作
<datatables:table data="${ownerList}" id="dataTable" theme="bootstrap2" export="pdf">
<datatables:column title="Name" property="name" sortable="true" />
<datatables:column title="Address" property="address" sortable="true" />
</datatables:table>
然后输出的 html 表格如下所示
Dandelion 用于 Spring Petclinic 的主分支中。
Dandelion 项目的 Thibault Duchateau 撰写了 一篇很好的博客文章,描述了 Spring Petclinic 应用程序的迁移
要了解有关 Dandelion 的更多信息:
http://dandelion.github.com/在 Twitter 上关注他们:https://twitter.com/dandelion_proj
Maven 还是 Gradle?
默认情况下,Spring Petclinic 使用 Maven,因为它是 Java 应用程序最常见的选择。虽然与大多数实际应用程序相比,Spring Petclinic 相当小,但它的 Maven pom.xml 文件已经相当冗长。
来自 Thoughtworks 中国的李艳辉 (Li Yanhui) 已经很好地将 Spring Petclinic 迁移到了 Gradle。这是一种并排比较 Maven 和 Gradle 的好方法。build.gradle 配置文件确实更容易理解。它目前包含 143 行(而 Maven POM 包含 543 行)。
您可以在此处浏览基于 Gradle 的 Spring Petclinic 版本:
https://github.com/whimet/spring-petclinic 感谢他们,我们能够识别 Spring Petclinic 中一些包含代码重复和缺乏自动化测试的地方。
性能测试:让我们扩展!
是否可以采用现在的 Spring Petclinic 并将其扩展到单台服务器实例上每秒 1000 个请求?来自 Ippon Technologies 的 Julien Dubois 撰写了 关于该主题的五个精彩博客文章系列。
它回答了以下问题:- 我应该依赖会话上下文吗?(第 2 部分) - 我应该使用哪个 Apache Tomcat 连接器?(第 2 部分) - 我应该使用哪个数据库连接池?(第 3 部分) - JDBC 是否比 JPA 或 Spring Data JPA 更快?(第 4 部分) - 使用 OpenSessionInViewFilter 的优点是什么?(第 4 部分)
参考文献
GitHub 上的 Spring Petclinic Cloud Foundry 上的 Spring Petclinic Petclinic + Thymeleaf Petclinic + Gradle