1 摘要
四年前,从spring mvc框架转移到play framework框架完全是为了更快,更好的去创业,那时候由于spring mvc配置的臃肿,以及不堪忍受tomcat研发时的加载,一度想去转向php开发,但很难舍弃对java的热爱,无意中发现了play framework,让我眼前一亮,随即花了一两天时间对它进行深入的研究,发现它就是我理想中想要的java框架,即满足我的灵活配置,同时可以抛弃tomcat以及又可以部署发布在多平台与tomcat里。一直这样坚持下来用了四年,也一直在用1.2.x版本,也觉得这个版本最稳定,2.0之上的版本完全已经不是java风格了。
2 框架搭建
我喜欢把MVC体系架构分成三个系统来设计,M我会用数据系统来代替,V我会用业务系统来代替,而C我喜欢我接口系统来替代,虽然这样开发会加大工作量,其实对于熟练的人来说,这工作量可以忽略不计,但是这有一个很大的好处在于未来平台的扩展以及业务的清晰与了解,开发的纯粹与质量。
3 数据系统配置
首先搭建一个play框架项目,结合mybatis与spring,手动加载spring1.0.3在本地的moduels里。
在dependencies.yml文件里配置
- play - org.mybatis -> mybatis 3.1.1 - org.mybatis -> mybatis-spring 1.1.1 - com.jolbox -> bonecp 0.7.1.RELEASE - play -> spring 1.0.3
在application.conf文件末尾加载spring配置
# The spring module module.spring=${play.path}/modules/spring-1.0.3 play.spring.component-scan=true play.spring.component-scan.base-packages=models play.spring.add-play-properties=false
数据库连接设置
public class BoneCPDataSourceFactoryBean implements FactoryBean<BoneCPDataSource>, InitializingBean{ private BoneCPDataSource boneCPDataSource; public final static int DEFAULT_POOL_MAX_SIZE = 30; public final static int DEFAULT_POOL_MIN_SIZE = 10; @Override public BoneCPDataSource getObject() throws Exception { return boneCPDataSource; } @Override public Class<?> getObjectType() { return BoneCPDataSource.class; } @Override public boolean isSingleton() { return true; } @Override public void afterPropertiesSet() throws Exception { boneCPDataSource = new BoneCPDataSource(); boneCPDataSource.setJdbcUrl(Play.configuration.getProperty("db.url")); boneCPDataSource.setUsername(Play.configuration.getProperty("db.user")); boneCPDataSource.setPassword(Play.configuration.getProperty("db.pass")); boneCPDataSource.setDriverClass(Play.configuration.getProperty("db.driver")); boneCPDataSource.setMaxConnectionsPerPartition(getIntValue("db.pool.maxSize", DEFAULT_POOL_MAX_SIZE)); boneCPDataSource.setMinConnectionsPerPartition(getIntValue("db.pool.minSize", DEFAULT_POOL_MIN_SIZE)); } public int getIntValue(String config, int defalutValue){ String value = Play.configuration.getProperty(config ); if(!StringUtils.isEmpty(value)){ try{ defalutValue = Integer.parseInt(value); }catch (Exception e) { } } return defalutValue; } }
内部数据系统与业务系统之间通信采用rmi,所以在application.conf配置
#rmi服务的端口号设置。 bsd.rmi.server.host=localhost bsd.rmi.server.port=1100
创建rmi服务类
public class BsdRmiServiceExporter extends RmiServiceExporter { @Override public void afterPropertiesSet() throws RemoteException { System.setProperty("java.rmi.server.hostname ", Play.configuration.getProperty("bsd.rmi.server.host")); super.afterPropertiesSet(); } }
创建application-context.xml文件配置rmi与mybatis
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <value>classpath:application.conf</value> </property> </bean> <bean id="dataSource" class="common.jdbc.datasource.BoneCPDataSourceFactoryBean" /> <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" /> <!-- Transaction manager for a single JDBC DataSource --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- SqlSessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:mybatis/configuration.xml"></property> <property name="mapperLocations" value="classpath:models/model/mapper/*.xml" /> </bean> <bean id="bsdRmiServiceExporter" class="common.rmi.BsdRmiServiceExporter"> <property name="serviceName" value="bsdRmiService" /> <property name="service" ref="bsdRmiService" /> <property name="serviceInterface" value="models.rmi.BsdRmiService" /> <property name="registryPort" value="${bsd.rmi.server.port}" /> </bean>
4 业务系统配置
创建业务工厂类
public class RmiService { public static BsdRmiService getBsdRmiService() { return (BsdRmiService)play.modules.spring.Spring.getBean("bsdRmiService"); } }
在application.conf里配置rmi接收端口
rmi.base.url=rmi://localhost:1100
配置rmi文件application-context.xm
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <value>classpath:application.conf</value> </property> </bean> <bean id="bsdRmiService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean"> <property name="serviceUrl" value="${.rmi.base.url}/bsdRmiService" /> <property name="serviceInterface" value="models.rmi.BsdRmiService" /> <property name="lookupStubOnStartup" value="false" /> <property name="refreshStubOnConnectFailure" value="true" /> </bean>
5 接口系统配置
play framework是一个非常好做接口的框架,特别是restful以及http等,仅仅只需要renderJSON 就可以发布一个http接口出去。
发布GET或者POST接口,只需要在routes文件里配置即可,这里不再详细描述
后面我会抽时间写一些工作阶段遇到的问题及解决办法,写这些也是记录这么多年的工作经验,让笔记留住它。
相关推荐
而"playframework-2.7.9"可能是一个解压后的目录,其中包含了框架的全部源代码、库文件、示例项目、构建脚本等。 Play Framework的核心特性包括: 1. **异步编程模型**:Play Framework利用Akka Actor系统实现非...
Play Framework是一个强大的、基于Java和Scala的开源Web应用程序框架,它采用模型-视图-控制器(MVC)架构模式,以简洁的API和直观的开发体验受到开发者喜爱。本篇文章将详述如何在Windows环境下安装配置Play环境...
假设我们创建一个简单的博客应用,我们可以定义一个`routes`文件,如下: ``` GET /posts controllers.Posts.index() GET /posts/:id controllers.Posts.show(id: Long) POST /posts controllers.Posts.create() PUT...
首先,Play Framework是一个基于Scala和Java的开源Web应用框架,它遵循模型-视图-控制器(MVC)架构模式,支持异步I/O,使得Web应用的性能得到提升。Play的优势在于其轻量级、模块化的设计,以及内置的开发工具,如实...
Play是一个功能全面、高效、易于构建可伸缩Web应用程序的框架。它采用Scala和Java编程语言开发,致力于提供简洁的代码和直观的开发体验。在Play框架中,开发者可以利用其非阻塞I/O和对RESTful架构的完美支持,创建...
- **知识点概述**:Play Framework 支持与其他Java Web框架(如Spring、Guice)的无缝集成。 - **应用场景**:当现有项目已经使用了Spring或Guice时,可以通过Play Framework 轻松地将这些组件整合进来。 - **实现...
play20-spring-demo, 在播放 2.0应用程序中使用 spring 在播放 2.0应用程序中使用 spring的这是一个简单的应用程序演示如何将播放 2.0应用程序组件与 Spring Framework 应用程序集成。请注意,同样的技术可以应用到...
Spring的默认play-java模板眼镜 介绍让Play Framework <2.4与Spring Framework一起使用相对容易: : 。 在Play Framework 2.4中,他们添加了“ ” : Play开箱即用,提供基于JSR 330...笔记可以在上找到另一个Play
Spring Security是一个功能强大的、可高度定制的认证和访问控制框架,它是针对Java企业应用的安全需求提供的解决方案,尤其适用于Spring应用程序。本入门经典教程旨在为读者提供Spring Security的入门知识,帮助读者...
Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,广泛应用于 Java 应用程序,包括基于 Spring Framework 的 Web 应用。在 Play Framework 2.3.x 的环境中,Spring Security 提供了对安全控制的...
"一个不错的Java Web框架"可能指的是Spring、Struts、Hibernate、Play Framework等众多优秀框架之一,这里我们将以Spring Framework为例,因为它在Java Web开发领域具有广泛的应用和影响力。 Spring Framework是一...
描述中的"stackable-controller.zip, Play2.x的可堆叠控制器可压缩动作组合框架"提到了一个与Play Framework相关的概念。Play Framework是一个开源的Web应用框架,使用Scala和Java编写,基于Akka actor模型并遵循MVC...
此外,它还提供了一个易于使用的API,帮助开发者更加专注于业务逻辑的编写。 #### 5. Wabacus 3.2 **下载链接**: [http://code.google.com/p/wabacus/](http://code.google.com/p/wabacus/) Wabacus是一款专注于...
3. **Play Framework**:这是一个全栈式的、基于Akka的轻量级框架,强调开发者的生产力和应用的实时性。Play采用一种更加现代的、反应式的设计,支持异步I/O和热部署,适合开发高性能的Web应用。 在实际开发中,...
设置 Play 项目的要点 使用以下命令创建新的播放项目: $ play new project_name 有关详细信息,请访问此链接: : ... Checkout Perform CRUD Operations using Play-Framework with Spring Deped
标题 "play_2.10-1.0.0-RC4.zip" 暗示了我们正在讨论的是Play框架的一个版本,这是基于Java和Scala的开源Web应用框架,特别适用于构建高度交互式的、实时的Web应用。Play框架强调开发过程中代码与测试的并行执行,...
- PlayFramework的配置及运行:讲解如何配置和运行Play Framework。 - 理解Play框架:对Play Framework的原理和设计理念进行解释。 - Play2.6异步:可能讲述的是在Play Framework 2.6版本中,异步处理的实现和...
- Play Framework是另一个流行的Web框架,文档可能探讨了两个框架在开发模式、性能、社区支持等方面的异同。 3. **Spring框架基础** - "sping .docx"可能涵盖了Spring框架的基本概念,包括IoC容器、bean的生命...
Spring是企业级Java应用的事实标准,它是一个全面的开发框架,支持依赖注入(DI)、面向切面编程(AOP)、事务管理、数据访问、Web应用以及更多的功能。Spring Boot使得创建独立的、生产级别的基于Spring的应用变得...
Java框架教程是一个全面的学习资源,旨在帮助开发者深入理解并熟练掌握Java编程中广泛使用的框架。本教程涵盖了多个关键知识点,包括但不限于Spring、Hibernate、MyBatis等主流框架,旨在提高开发效率,降低软件复杂...