Scooter 越跑越快 - Scooter 1.2 更高效,更易用!

以下是一些新特性的介绍,更多详情可点击这里.

性能优化更强大

1.2版本简化了许多程序,并且增添了线程缓存和二级缓存.

线程缓存默认情况下就已开启。 线程缓存使得同一线程中多次数据库请求只须要联结一次数据库。

启动线程缓存很容易,只要在environment.properties文件中设定如下参数即可:

useRequestCache=true

二级缓存默认情况下是关闭的。 启动二级缓存后,不同请求可以共享缓存数据。

启动二级缓存也很容易,只要在environment.properties文件中设定如下参数即可:

useSecondLevelCache=true
default.cache.provider.name=blog_development

plugin.cache.provider.blog_development=\
    plugin_class=plugin.ehcache.EhCacheCacheProvider,\
    configFile=ehcache.xml

Scooter提供了包括EhCache在的多种二级缓存plugin。你可以设定缓存清除。 缓存还可以设置在方法上。点击这里获取更多详系介绍。

下表是1.2和1.1版本的性能对比。所有数据都是每执行10000次SQL select的毫秒数。

                         AR     AR (trans)  JDBC
------------------------------------------------
1.1                     11730     7237      2179
1.2 no cache             7543     2586      2311
1.2 thread cache          196      142
1.2 2nd level cache        92       90

AR代表使用ActiveRecord测试。AR (trans)代表ActiveRecord测试中加入事务。JDBC代表使用JDBC测试。

显然,1。2版本即便没使用缓存都要比1。1版本快的多。加入事务来组合同一进程中多次数据库请求对提高性能有帮助。然而,从根本上提高性能,还是要靠缓存。二级缓存大大地提高了Scooter的性能。

更容易对任何数据库表生成脚手架

在1。1版本下,当你要生成数据库表生成脚手架程序时,你必须使用和数据库表同样的名字或其单数型式来命名model类。在1。2版本下,你可以使用任何名字来命名model类。 你只须要使用-Dtable=YourTableName系统属性即可。

比如说,如果你的数据库表名是messages, 你可以生成post model的脚手架程序:

>java -Dtable=messages -jar tools/generate.jar blog scaffold post

更好的程序强化支持

在1。1版本下,Scooter内嵌的编译器经常会和IDE(例如Eclipse)的编译器相抵触。有时候会使得Scooter的程序强化失效。现在在1。2版本下,你可以使用Ant task app_enhancer 在开发环境DEVELOPMENT里来做到程序强化。

>ant -DappPath=webapps/blog app_enhancer

更容易分页

1。2版本加入了几个overloaded jdbcPaginator方法。利用新的jdbcPaginator方法,你可以轻松地控制分页。 例如你可以自己设定limit参数:

public String index() {
    Paginator page = jdbcPaginator(Post.class, "limit=50");
    setViewData("post_page", page);
    return renderView("paged_list");
}

当然,如果这还不够的话,你也可以直接用Paginator 类:

public String index() {
    int npage = Util.getSafeIntValue(p("npage"));
    if (npage == 0) {
        npage = 1;
    }
    Paginator page = Post.limit(50).page(npage).getPaginator();
    setViewData("post_page", page);
    return renderView("paged_list");
}