我们很高兴地宣布 Spring Petclinic 示例应用程序已经重构。
源代码现已
在 github 上可用。以下是新应用程序的截图:

以下是新架构的概览
Spring, Spring, Spring
我们使用了以下 Spring 特性
- 使用 jdbc (JdbcTemplate)、JPA 或 Spring Data JPA (repository layer) 的数据访问集成。您可以通过在 web.xml 或某个 JUnit 测试中设置相应的 bean profile 来选择使用哪种实现。
- 使用 @Transactional 的事务 (service layer)
- 使用 @Cacheable 并以 ehcache 作为缓存实现的缓存 (service layer)
- 面向切面编程 (用于监控每个 Repository 方法被调用了多少次)
- Spring MVC: 使用 Bean Validation (JSR-303) 进行表单验证
- Spring MVC: 使用 ContentNegotiatingViewResolver 进行内容协商 (html, xml 或 atom)。
- Spring MVC: 使用 SimpleMappingExceptionResolver 进行异常处理
- Spring MVC: 使用 Spring MVC Test Framework
我们充满活力的社区
我们得到了社区中许多专家(包括几个开源项目的负责人)的贡献。
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 就此主题撰写了 一个精彩的五部分系列博客文章。
它回答了以下问题: - 我应该依赖 session context 吗?(第 2 部分) - 我应该使用哪个 Apache Tomcat 连接器?(第 2 部分) - 我应该使用哪个数据库连接池?(第 3 部分) - JDBC 是否比 JPA 或 Spring Data JPA 更快?( 第 4 部分) - 使用 OpenSessionInViewFilter 有哪些优点?( 第 4 部分)
参考
GitHub 上的 Spring Petclinic Cloud Foundry 上的 Spring Petclinic Petclinic + Thymeleaf Petclinic + Gradle