基于上一篇博客http://wuxiangqian.iteye.com/blog/1987841, 接口完成后,项目进度也跟上了,那就得把架构完善完善。让spring来管理restlet及mybatis。结果折腾好几天,终于功夫不负有心人,大功告成!
第一步:配置web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>RestService</display-name> <servlet> <servlet-name>RestletServlet</servlet-name> <servlet-class>org.restlet.ext.spring.SpringServerServlet</servlet-class> <init-param> <param-name>org.restlet.component</param-name> <param-value>component</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>RestletServlet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> <!-- spring的监听以及配置文件加载信息 --> <context-param> <param-name>contextConfigLocation</param-name> <!-- 上面配置的spring配置文件的路径,区分大小写 --> <param-value>WEB-INF/ApplicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app>
第二步:在WEB-INF文件夹下新建ApplicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <!-- <aop:aspectj-autoproxy/> --> <!-- <aop:aspectj-autoproxy proxy-target-class="true"/>--> <bean id="component" class="org.restlet.ext.spring.SpringComponent"> <property name="defaultTarget" ref="restRoute" /> </bean> <bean id="restRoute" class="org.restlet.ext.spring.SpringRouter"> <property name="attachments" > <map> <entry key="/ws/user/login"> <bean class="org.restlet.ext.spring.SpringFinder"> <lookup-method name="create" bean="userLoginResource" /> </bean> </entry> </map> </property> </bean> <!-- 用户登录资源文件 --> <bean id="userLoginResource" class="com.opro.ims.i.restservice.resource.UserLoginResource" scope="prototype"> </bean> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" /> <property name="jdbcUrl" value="jdbc:sqlserver://192.168.1.22:1433; DatabaseName=DBNAME" /> <property name="user" value="" /> <property name="password" value="" /> <!-- 初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 --> <property name="initialPoolSize" value="1"/> <!-- 连接池中保留的最小连接数。 --> <property name="minPoolSize" value="1"/> <!-- 连接池中保留的最大连接数。Default: 15 --> <property name="maxPoolSize" value="300"/> <!-- 最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 --> <property name="maxIdleTime" value="60"/> <!-- 当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 --> <property name="acquireIncrement" value="5"/> <!-- 每60秒检查所有连接池中的空闲连接。Default: 0 --> <property name="idleConnectionTestPeriod" value="60"/> </bean> <!--把mybatis SqlSessionFactory的创建交由spring管理--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /><!--数据源--> <!-- <property name="mapperLocations" value="classpath:com//*Mapper.xml" />--> <property name="configLocation" value="classpath:com/mybatis/config/Configuration.xml" /><!--mybatis配置文件路径--> </bean> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory" /> </bean> <bean id="baseDao" class="com.opro.ims.i.restservice.core.impl.BaseDaoImpl"> <property name="sqlSession" ref="sqlSession" /> </bean> <!-- scan for mappers and let them be autowired --> <!-- <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">--> <!-- <property name="basePackage" value="com.opro.ims.i.restservice.bean" />-根据自己的项目路径配置--> <!-- </bean>--> <!--把mybatis的事务交由spring去管理--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /><!--注意:此处的数据源要与sqlSessionFactory中的dataSource相同--> </bean> <!-- 注入 ApplicationContext 暂时未使用 --> <!-- <bean id="springfactory" class="com.opro.ims.i.restservice.utils.SpringFactoryUtil"></bean>--> <!-- 自动扫描注解注入 --> <!-- <context:annotation-config />--> <context:component-scan base-package="com.opro.ims.i.restservice"> </context:component-scan> <!--启用spring @Transactional注解 不加上proxy-target-class = ture 不能依赖注入--> <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/> </beans>
第三步:修改Mybatis配置文件,关于连接数据库这块都交给spring管理了,所以得去掉数据库连接的代码
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <!-- 注意:每个标签必须按顺序写,不然蛋疼的DTD会提示错误:The content of element type "configuration" must match "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,plugins?,environments?,mappers?)". --> <configuration> <!-- 设置缓存和延迟加载等等重要的运行时的行为方式 --> <settings> <!-- 设置超时时间,它决定驱动等待一个数据库响应的时间 --> <setting name="defaultStatementTimeout" value="25000"/> <!-- 这个配置使全局的映射器启用或禁用缓存 --> <setting name="cacheEnabled" value="true"/> <!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载 --> <!-- <setting name="lazyLoadingEnabled" value="true"/> --> <!-- 当启用时,有延迟加载属性的对象在被调用时将会完全加载任意属性。否则,每种属性将会按需要加载 --> <setting name="aggressiveLazyLoading" value="true"/> <!-- 允许或不允许多种结果集从一个单独的语句中返回(需要适合的驱动) --> <setting name="multipleResultSetsEnabled" value="true"/> <!-- 使用列标签代替列名。不同的驱动在这方便表现不同。参考驱动文档或充分测试两种方法来决定所使用的驱动 --> <setting name="useColumnLabel" value="true"/> <!-- 允许JDBC支持生成的键。需要适合的驱动。如果设置为true则这个设置强制生成的键被使用,尽管一些驱动拒绝兼容但仍然有效(比如Derby) --> <setting name="useGeneratedKeys" value="false"/> <!-- 指定MyBatis如何自动映射列到字段/属性。PARTIAL只会自动映射简单,没有嵌套的结果。FULL会自动映射任意复杂的结果(嵌套的或其他情况) --> <setting name="autoMappingBehavior" value="PARTIAL"/> <!-- 配置默认的执行器。SIMPLE执行器没有什么特别之处。REUSE执行器重用预处理语句。BATCH执行器重用语句和批量更新 --> <setting name="defaultExecutorType" value="SIMPLE"/> </settings> <!-- 别名 --> <typeAliases> <!-- 用户bean-用户登录时映射使用 --> <typeAlias alias="UserBean" type="com.restservice.bean.UserBean"/> <!-- ORM映射文件 --> <mappers> <!-- 用户测试XML --> <mapper resource="com/restservice/bean/UserBean.xml" /> </mappers> </configuration>
第四步:使用spring依赖注入,在resource,service,dao层中加上对应的注解,例如:
//resource //@Path("ws/user/login") @Controller @Scope("prototype") public class UserLoginResource extends BestResource { @Resource private UserLoginService userLoginService; }
把//@Path("ws/user/login")注释了,由spring管理了,这个就没用了
第五步:可以把ApplicationContext.xml拷贝到Src下写个测试类是否成功
package test.ws.client; import java.sql.SQLException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.ibatis.type.TypeException; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.opro.ims.i.restservice.service.UserLoginService; public class SpringTest { //加载ApplicationContext.xml文件 private ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); // 测试SessionFactory @Test public void testSessionFactory() { UserLoginService sessionFactory = (UserLoginService) ac.getBean("userLoginService"); System.out.println("-------> " + sessionFactory); } // 测试事务管理 @Test public void testTransaction() { UserLoginService testService = (UserLoginService) ac.getBean("userLoginService"); try { System.out.println(testService.findUser("xqwu")); } catch (TypeException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
第六步:如果测试成功了,那就启动服务吧,希望一次性成功!
相关推荐
- **集成Spring**:Spring可以作为Restlet应用的容器,管理Restlet组件的生命周期。同时,Spring的AOP功能可以用于事务管理和安全控制。Spring MVC可以处理HTTP请求,与Restlet协同工作,提供更丰富的Web服务。 - *...
在本文中,我们将深入探讨如何在Spring 3框架中集成Restlet 2,利用注解方式进行配置。Restlet是一个轻量级的Java RESTful Web服务开发库,而Spring则是一个广泛使用的全面的企业级应用框架。结合两者,我们可以创建...
Restlet与Spring集成是将Restlet框架与Spring框架结合,以增强RESTful服务的开发能力。Restlet是一个轻量级的Java框架,专门用于构建REST(Representational State Transfer)架构风格的应用程序。它遵循JAX-RS...
为了开始使用这些插件,你可以从浏览器的扩展商店下载并安装Restlet Client.crx(适用于Chrome)和httprequester-1.0.4-fx.xpi(适用于Firefox)。安装完成后,插件会出现在浏览器的工具栏上,点击即可开始创建和...
Spring3.1.2+Mybatis3.1.1+Restlet2.0.1框架HelloWorld实例(Maven) maven package生成后打包war部署到tomacat测试: http://localhost:8080/oa/rest/hello 数据库为postgresql 9.2,单元测试中有mybatis的数据库...
org.restlet.ext.spring.jar
"reslet2.0+spring3.0+hibernate3.3框架集成" 这个标题表明这是一个关于Java开发中的技术整合项目。Reslet 2.0是一个轻量级的REST(Representational State Transfer)应用框架,用于构建Web服务和应用程序。Spring ...
《Reslet1:Reslet+Spring,构建简易Web...但只要掌握了基本的Reslet+Spring集成方式,就可以在此基础上进行扩展和优化。希望这篇文章能帮助你理解和实践Reslet与Spring的结合,为你的Web开发之旅增添新的工具和技能。
标题"restlet-jee-2.0.6.zip_Restlet 2..0_Restlet framework2.0_org.rest"表明这是一个针对Java企业版(Java EE)的Restlet框架2.0.6版本的压缩包,其中包含了与org.restlet相关的组件。 描述中的"restlet框架所需...
这个花了一点时时间做出来的简单的集成RSH框架,喜欢restlet的朋友可以研究研究,大家一起讨论一下,最简单的一个流程,已经完成了,个人感觉比ssh框架开发简单,中间都没有对象new,都通过spring注入方式获取对象,...
标题 "camel-restlet-spring-web-app" 暗示了一个基于Apache Camel、Restlet和Spring Web的应用程序示例,该示例使用Jetty作为嵌入式服务器。这个项目结合了这些技术来创建一个RESTful API服务。让我们深入探讨每个...
4. **高级主题**:涵盖如安全、性能优化、与其他技术(如JPA、Spring)集成等高级话题,有助于开发者解决实际问题。 5. **案例研究**:文档可能包含了一些示例应用,展示如何在不同场景下使用Restlet,包括创建复杂...
com.noelios.restlet.ext.spring_2.5.jar
标题"基于Spring的Restlet实例"意味着我们将探讨如何在Spring环境中集成和使用Restlet库来开发REST服务。这通常涉及以下几个关键知识点: 1. **RESTful服务基础**:REST是一种软件架构风格,强调通过HTTP协议暴露...
使用注解配置实现Spring动态数据源切换,实现原理 1、自定义动态数据源类DynamicDataSource: 实现spring类AbstractRoutingDataSource的方法determineCurrentLookupKey ...测试环境eclipse+spring+restlet+mysql
最后,"RESTLET开发实例(三)基于spring的REST服务.doc"会介绍如何将Restlet与Spring框架集成。Spring是Java企业级应用开发的主流框架,提供了丰富的功能和优秀的依赖注入机制。结合Spring,Restlet服务可以利用...
cas-server-integration-restlet-3.5.2.jar cglib-nodep-2.1_3.jar ...restlet.ext.spring-1.1.1.jar
### RESTLET开发(三):基于Spring的REST服务 #### 一、基于Spring配置的Rest简单服务 在本文档中,我们将深入探讨如何利用RESTlet框架与Spring框架结合,构建高效的RESTful服务。Spring框架因其强大的功能和灵活...
介绍restlet如何整合spring框架进行开发。Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的,广泛的应用于应用项目中。 具体教程可以查看http://www.lifeba.org/arch/restlet_spring_3.html。
在REST服务中,Spring可以帮助管理bean的生命周期,提供事务控制,以及与其他Spring组件(如数据库访问、安全等)集成。整合Restlet和Spring,开发者可以利用Spring的优势来增强Restlet服务的复杂性和可维护性。这...