Eclipse中结合maven,mybatis编写jar包组件

前言:笔者今天初步尝试在eclipse中开发jar包文件,编译后作为组件提供别人调用,我把自己提供的jar包,称为provider,使用jar的工程称为receive。provider属于maven管理的一个jar工程,并且在provider中通过mybatis数据orm持久层和后台数据库进行了数据的交互操作。下面就结合自己开发中遇到的四个问题来一步步讲如何制作maven+mybatis的jar包组件。首先简单展现下自己的provider工程目录图。


关于如何建立maven工程,如何使用mybatis,怎么配置,请参考之前的文档,主要贴出来blue-spring-all.xml的代码

blue-spring-all.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:aop="http://www.springframework.org/schema/aop"  
    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.1.xsd  
                        http://www.springframework.org/schema/context   
                        http://www.springframework.org/schema/context/spring-context-3.1.xsd  
                        http://www.springframework.org/schema/aop   
                        http://www.springframework.org/schema/aop/spring-aop-3.1.xsd  
                        http://www.springframework.org/schema/tx   
                        http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">
	<!-- spring 对xx包进行扫描   注解@controller翻译成控制器-->
	<context:component-scan base-package="com.asiainfo.psm.*.*.service,com.asiainfo.psm.*.*.modal">
	</context:component-scan>
	
	<bean id="psmDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
		destroy-method="close">
		<property name="driverClass" value="oracle.jdbc.driver.OracleDriver"></property>
		<property name="jdbcUrl" value="jdbc:oracle:thin:@192.168.74.15:1522:jttest"></property>
		<property name="user" value="psm"></property>
		<property name="password" value="psm"></property>
		<property name="numHelperThreads" value="3"></property>
		<property name="acquireIncrement" value="10"></property>
		<property name="maxIdleTime" value="300"></property>
		<property name="initialPoolSize" value="1"></property>
		<property name="maxPoolSize" value="10"></property>
		<property name="minPoolSize" value="5"></property>
		<property name="maxStatements" value="0"></property>
		<property name="maxStatementsPerConnection" value="100"></property>
	</bean>

	<!-- 配置事务管理器,注意这里的dataSource和SqlSessionFactoryBean的dataSource   基于tx的事务-->
	<bean id="psmTransactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="psmDataSource" />
	</bean>

	<!-- 声明使用注解式事务 -->
	<tx:annotation-driven transaction-manager="psmTransactionManager" />
	
	<!-- 定义切点 -->
	<aop:config>
		<aop:advisor advice-ref="txAdvice"
			pointcut="execution(* com.psm.bmo.*.*(..))" />
	</aop:config>
	
	<!--  定义增强 -->
	<tx:advice id="txAdvice" transaction-manager="psmTransactionManager">
		<tx:attributes>
			<!-- <tx:method name="save*" propagation="REQUIRED" read-only="false" />
			<tx:method name="update*" propagation="REQUIRED" read-only="false"/>
			<tx:method name="delete*" propagation="REQUIRED" read-only="false"/>
			<tx:method name="query*" propagation="SUPPORTS" read-only="true"/> -->
			<!-- 支持当前事务,若无则以无事务方式执行 -->
			<tx:method name="*" propagation="SUPPORTS" read-only="true" />
		</tx:attributes>
	</tx:advice>
	
	<!-- 全局异常页面,该页面显示异常的详细信息,在controller中捕获后由detailedHandlerExceptionResolver统一处理-->
	<bean id="detailedHandlerExceptionResolver" class="com.asiainfo.psm.common.exception.DetailedHandlerExceptionResolver" >
	</bean>
	
	<!-- enable autowire -->
	<context:annotation-config />

	<!-- enable transaction demarcation with annotations -->
	<tx:annotation-driven />

	<!-- mybatis sqlSessionFactory -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="psmDataSource"/>
		<property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/>
		<property name="mapperLocations" value="classpath:sqlMap/sqlMap_*.xml" />
	</bean>
	
	<!-- Mapper自动处理 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.asiainfo.psm.*.*.mapper" />
    </bean>
    
    <!-- sessionTemplate -->
	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" scope="prototype">
		<constructor-arg index="0" name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>
	
	<!-- 操作鉴权控制BMO层   sww-->
	<bean id="iOperateManagerBMO" class="com.asiainfo.psm.authentication.operate.bmo.OperateManagerBMOImpl">
	</bean>
	
</beans>
这里是provider运行所有需要实例化的Bean,我们在这里定义好,之后在receiver中只要<import resource="blue-spring-all.xml"/>,这样子就把这些Bean加载到了receiver的spring 容器中了,类似于provider所在上级的war工程中org.springframework.web.servlet.DispatcherServlet---spring容器或者contextLoaderListener---web容器的作用。


一:provider工程打jar包:

打包方法一,也是最基本的:
Export--->Jar File --->

网上教程很多,这也是最基本打包方式,个人感觉不太好用,有时候编译的class文件会莫名其妙少了一些。

打包方法二:基于maven工程的




这个使用起来更好些,但是要求provider是基于maven工程建立的。


二:provider工程依赖的jar包怎么提供给receiver

笔者开始有尝试过使用maven插件  maven-assembly-plugin  -maven打包插件,可以对provider依赖的jar进行统一打包,也有很多文章介绍插件用法,其实我觉得没必要,委屈笔者在这里饶了好大圈子,多亏公司技术大牛提示使用maven的deploy直接把自己的provider发不到私服上,私服会自动把provider依赖的jar 以pom的写入dependency。如何使用deploy请参考文章:http://blog.csdn.net/jun55xiu/article/details/39671907



发布到私服上以后,效果展示:



三:receiver中使用provider

首先receiver的pom.xml中引入


然后有两个地方要注意

3.1.provider 中Bean命名要注意特殊

provider中数据源Bean的名字要注意区分,否则如果都是dataSource,provider加载数据源会使用receiver的数据源去了。

3.2.receiver中要引入provider的配置文件

相当于receiver的spring容器去管理provider的bean实例。


ea基本上就这些注意了。这样子你就可以提供服务编译成class给别人使用了,可以和redis交互可以和数据库交互。以上当作备忘录。
其中关于如何自动引入provider的xml到receiver,大神们有什么好的方法么,减少import引入。















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值