我们很高兴地宣布,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 测试框架
我们充满活力的社区
我们收到了社区专家(包括多个开源项目的负责人)的大量贡献。
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 China 的 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 就这个主题撰写了 一系列共五篇精彩的博客文章。
它回答了诸如以下问题: - 我应该依赖会话上下文吗?(第二部分) - 我应该使用哪个 Apache Tomcat 连接器?(第二部分) - 我应该使用哪个数据库连接池?(第三部分) - JDBC 比 JPA 或 Spring Data JPA 更快吗?( 第四部分) - 使用 OpenSessionInViewFilter 有什么好处?( 第四部分)
参考资料
Spring Petclinic 在 GitHub Spring Petclinic 在 Cloud Foundry Petclinic + Thymeleaf Petclinic + Gradle