假如你现在还在为自己的技术担忧,假如你现在想提升自己的工资,假如你想在职场上获得更多的话语权,假如你想顺利的度过35岁这个魔咒,假如你想体验BAT的工作环境,那么现在请我们一起开启提升技术之旅吧,详情请点击http://106.12.206.16:8080/qingruihappy/index.html
一,问题分析
假如在一个项目中要测试一个接口,但是这个项目没有对外开放url地址,话句话就是说浏览器访问不了里面的资源,自己造的数据不能测试接口,那么只能等别人来调用自己的接口,而且自己也不能测试,假如单纯的通过junit来测试的话,那么是无法加载IOC容器里面的东西,话句话就是说加载不了原来在tomcat启动的时候,加载xml的文件,applicationcontext容器里面的东西加载不了,所以用springtest,但是问题又来了,现在数据源是通过jidi来配置在tomcat里面的,怎么能加载到项目以外的东西呢?
二,代码分析
2.1,原来的/src/main/resources/context/init/context-ds.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" 6 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 7 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd 8 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd 9 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> 10 11 12 13 <bean id="dataSource" class="com.bill99.boss.ds.util.DynamicDataSource" > 14 <property name="targetDataSources"> 15 <map key-type="java.lang.String"> 16 <entry key="appmobile" value-ref="mobileDS" ></entry> 17 <entry key="org" value-ref="bossDS" ></entry> 18 </map> 19 </property> 20 <property name="defaultTargetDataSource" ref="defaultDataSource" > 21 </property> 22 </bean> 23 24 <bean id="defaultDataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 25 <property name="jndiName" value="java:comp/env/BILL99/JDBC/SEASHELL" /> 26 </bean> 27 28 <bean id="mobileDS" class="org.springframework.jndi.JndiObjectFactoryBean"> 29 <property name="jndiName" value="java:comp/env/BILL99/JDBC/WX-PORTAL" /> 30 </bean> 31 32 <bean id="bossDS" class="org.springframework.jndi.JndiObjectFactoryBean"> 33 <property name="jndiName" value="java:comp/env/BILL99/JDBC/ORG" /> 34 </bean> 35 36 <bean id="orgjdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 37 <constructor-arg ref="bossDS" /> 38 </bean> 39 40 <bean id="appmobilejdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 41 <constructor-arg ref="mobileDS" /> 42 </bean> 43 44 <bean id="seashelljdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 45 <constructor-arg ref="defaultDataSource" /> 46 </bean> 47 48 <bean id="dataSourceProxy" class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy"> 49 <constructor-arg ref="defaultDataSource"></constructor-arg> 50 </bean> 51 52 <alias name="dataSourceProxy" alias="seashellDS" /> 53 <alias name="dataSourceProxy" alias="authenticationDS" /> 54 <alias name="dataSourceProxy" alias="authorizationDS" /> 55 <alias name="dataSourceProxy" alias="logDS" /> 56 <alias name="dataSourceProxy" alias="accountingDS" /> 57 <alias name="dataSourceProxy" alias="cosDS" /> 58 <alias name="dataSourceProxy" alias="metadataDS" /> 59 <alias name="dataSourceProxy" alias="notificationDS" /> 60 <alias name="dataSourceProxy" alias="productDS" /> 61 <alias name="dataSourceProxy" alias="marketingDS" /> 62 <alias name="dataSourceProxy" alias="memberappDS" /> 63 <alias name="dataSourceProxy" alias="gatewayDS" /> 64 <alias name="dataSourceProxy" alias="pseDS" /> 65 <alias name="dataSourceProxy" alias="fundoutDS" /> 66 <alias name="dataSourceProxy" alias="memberinfoDS"/> 67 68 69 <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 70 <constructor-arg ref="dataSource" /> 71 </bean> 72 73 <bean id="transactionManager" 74 class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 75 <property name="dataSource" ref="bossDS" /> 76 <property name="globalRollbackOnParticipationFailure" value="false" /> 77 </bean> 78 <aop:config> 79 <aop:advisor 80 pointcut="@within(org.springframework.transaction.annotation.Transactional)" 81 advice-ref="txAdvice" order="1"/> 82 </aop:config> 83 84 <tx:advice id="txAdvice"> 85 <tx:attributes> 86 <tx:method name="getToAuthList" propagation="REQUIRES_NEW"/> 87 <tx:method name="*" rollback-for="java.lang.Exception"/> 88 </tx:attributes> 89 </tx:advice> 90 91 </beans>
2.2,tomcat下的xml文件context.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <WatchedResource>WEB-INF/web.xml</WatchedResource> 4 5 <Resource acquireIncrement="2" auth="Container" driverClass="org.gjt.mm.mysql.Driver" factory="com.bill99.seashell.encrypt.C3p0BeanFactory" idleConnectionTestPeriod="3600" jdbcUrl="jdbc:mysql://192.168.126.147:3306/boss?useUnicode=true&characterEncoding=UTF-8" maxIdleTime="3600" maxPoolSize="30" minPoolSize="3" name="BILL99/JDBC/ORG" password="111111" type="com.mchange.v2.c3p0.ComboPooledDataSource" user="root"/> 6 7 <Resource acquireIncrement="2" auth="Container" driverClass="org.gjt.mm.mysql.Driver" factory="com.bill99.seashell.encrypt.C3p0BeanFactory" idleConnectionTestPeriod="3600" jdbcUrl="jdbc:mysql://192.168.126.147:3306/appmobile?useUnicode=true&characterEncoding=UTF-8" maxIdleTime="3600" maxPoolSize="30" minPoolSize="3" name="BILL99/JDBC/WX-PORTAL" password="111111" type="com.mchange.v2.c3p0.ComboPooledDataSource" user="root"/> 8 9 10 <Resource acquireIncrement="2" auth="Container" driverClass="oracle.jdbc.driver.OracleDriver" factory="com.bill99.seashell.encrypt.C3p0BeanFactory" jdbcUrl="jdbc:oracle:thin:@192.168.127.121:1530:billdb" maxPoolSize="5" minPoolSize="3" name="BILL99/JDBC/SEASHELL121" password="seashell" type="com.mchange.v2.c3p0.ComboPooledDataSource" user="seashell"/> 11 12 </Context>
三,解决思路
3.1,jar包
1 <dependency org="junit" name="junit" rev="4.12" conf="zip->default"/> 2 <dependency org="org.hamcrest" name="hamcrest-core" rev="1.3" conf="zip->default"/> 3 <dependency org="org.hamcrest" name="hamcrest-library" rev="1.3" conf="zip->default"/> 4 <dependency org="org.springframework" name="spring-test" rev="3.2.13.RELEASE" conf="zip->default"/> 5 6 <dependency org="org.springframework" name="spring-data-redis" rev="1.6.2.RELEASE" conf="zip->default"/> 7 <dependency org="org.springframework" name="spring-aop" rev="3.2.13.RELEASE" conf="zip->default"/> 8 <dependency org="org.springframework" name="spring-beans" rev="3.2.13.RELEASE" conf="zip->default"/> 9 <dependency org="org.springframework" name="spring-context" rev="3.2.13.RELEASE" conf="zip->default"/> 10 <dependency org="org.springframework" name="spring-context-support" rev="3.2.13.RELEASE" conf="zip->default"/> 11 <dependency org="org.springframework" name="spring-core" rev="3.2.13.RELEASE" conf="zip->default"/> 12 <dependency org="org.springframework" name="spring-expression" rev="3.2.13.RELEASE" conf="zip->default"/> 13 <dependency org="org.springframework" name="spring-tx" rev="3.2.13.RELEASE" conf="zip->default"/> 14 <dependency org="org.springframework" name="spring-aspects" rev="3.2.13.RELEASE" conf="zip->default"/> 15 <dependency org="org.springframework" name="spring-jdbc" rev="3.2.13.RELEASE" conf="zip->default"/> 16 <dependency org="org.springframework" name="spring-jms" rev="3.2.13.RELEASE" conf="zip->default"/> 17 <dependency org="org.springframework" name="spring-orm" rev="3.2.13.RELEASE" conf="zip->default"/> 18 <dependency org="org.springframework" name="spring-web" rev="3.2.13.RELEASE" conf="zip->default"/> 19 <dependency org="org.springframework" name="spring-webmvc" rev="3.2.13.RELEASE" conf="zip->default"/> 20 <dependency org="mysql" name="mysql-connector-java" rev="5.1.12" conf="zip->default"/> 21 <dependency org="org.apache" name="catalina" rev="6.0.39" conf="compile->default"/>
3.2,/src/test/java/MdpTest.java测试类
1 import javax.annotation.Resource; 2 3 import org.junit.Test; 4 import org.junit.runner.RunWith; 5 import org.springframework.test.context.ContextConfiguration; 6 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 7 8 import com.bill99.boss.domain.external.message.builder.impl.SafetyBankUploadImpl; 9 10 @RunWith(SpringJUnit4ClassRunner.class) //使用junit4进行测试 11 @ContextConfiguration( 12 { 13 "classpath:context/init/envPropertyLoader.xml" , 14 "classpath:context/init/context-ds.xml", 15 "classpath*:context/*.xml", 16 "classpath*:context/ibatis/*.xml", 17 "classpath*:context/service/*.xml", 18 "classpath:context/init/thunderClient.xml" 19 20 }) //加载配置文件) //加载配置文件 21 public class MdpTest { 22 @Resource 23 private SafetyBankUploadImpl SafetyBankUploadImpl; 24 @Test 25 public void test() { 26 SafetyBankUploadImpl.buildPictureFile("812110058130012", "1"); 27 System.out.println("666"); 28 } 29 }
classpath中的别乱了顺序,要严格按照原来的加载顺序来写。
3.3,/src/test/resources/context/init/context-ds.xml下的xml文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" 6 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 7 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd 8 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd 9 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> 10 11 12 13 <bean id="dataSource" class="com.bill99.boss.ds.util.DynamicDataSource" > 14 <property name="targetDataSources"> 15 <map key-type="java.lang.String"> 16 <entry key="appmobile" value-ref="mobileDS" ></entry> 17 <entry key="org" value-ref="bossDS" ></entry> 18 </map> 19 </property> 20 <property name="defaultTargetDataSource" ref="defaultDataSource" > 21 </property> 22 </bean> 23 24 <bean id="defaultDataSource" 25 class="org.springframework.jdbc.datasource.DriverManagerDataSource" 26 p:driverClassName="oracle.jdbc.driver.OracleDriver" 27 p:url="jdbc:oracle:thin:@192.168.5.100:1530:billdb" 28 p:username="seashell" p:password="seashell" /> 29 30 <bean id="mobileDS" 31 class="org.springframework.jdbc.datasource.DriverManagerDataSource" 32 p:driverClassName="org.gjt.mm.mysql.Driver" 33 p:url="jdbc:mysql://192.168.126.147:3306/appmobile?useUnicode=true&characterEncoding=UTF-8" 34 p:username="root" p:password="111111" /> 35 36 <bean id="bossDS" 37 class="org.springframework.jdbc.datasource.DriverManagerDataSource" 38 p:driverClassName="org.gjt.mm.mysql.Driver" 39 p:url="jdbc:mysql://192.168.126.147:3306/boss?useUnicode=true&characterEncoding=UTF-8" 40 p:username="root" p:password="111111" /> 41 42 <bean id="orgjdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 43 <constructor-arg ref="bossDS" /> 44 </bean> 45 46 <bean id="appmobilejdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 47 <constructor-arg ref="mobileDS" /> 48 </bean> 49 50 <bean id="seashelljdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 51 <constructor-arg ref="defaultDataSource" /> 52 </bean> 53 54 <bean id="dataSourceProxy" class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy"> 55 <constructor-arg ref="defaultDataSource"></constructor-arg> 56 </bean> 57 58 <alias name="dataSourceProxy" alias="seashellDS" /> 59 <alias name="dataSourceProxy" alias="authenticationDS" /> 60 <alias name="dataSourceProxy" alias="authorizationDS" /> 61 <alias name="dataSourceProxy" alias="logDS" /> 62 <alias name="dataSourceProxy" alias="accountingDS" /> 63 <alias name="dataSourceProxy" alias="cosDS" /> 64 <alias name="dataSourceProxy" alias="metadataDS" /> 65 <alias name="dataSourceProxy" alias="notificationDS" /> 66 <alias name="dataSourceProxy" alias="productDS" /> 67 <alias name="dataSourceProxy" alias="marketingDS" /> 68 <alias name="dataSourceProxy" alias="memberappDS" /> 69 <alias name="dataSourceProxy" alias="gatewayDS" /> 70 <alias name="dataSourceProxy" alias="pseDS" /> 71 <alias name="dataSourceProxy" alias="fundoutDS" /> 72 <alias name="dataSourceProxy" alias="memberinfoDS"/> 73 74 75 <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 76 <constructor-arg ref="dataSource" /> 77 </bean> 78 79 <bean id="transactionManager" 80 class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 81 <property name="dataSource" ref="bossDS" /> 82 <property name="globalRollbackOnParticipationFailure" value="false" /> 83 </bean> 84 <aop:config> 85 <aop:advisor 86 pointcut="@within(org.springframework.transaction.annotation.Transactional)" 87 advice-ref="txAdvice" order="1"/> 88 </aop:config> 89 90 <tx:advice id="txAdvice"> 91 <tx:attributes> 92 <tx:method name="getToAuthList" propagation="REQUIRES_NEW"/> 93 <tx:method name="*" rollback-for="java.lang.Exception"/> 94 </tx:attributes> 95 </tx:advice> 96 97 </beans>
3.4,图示
/src/test/resources/context/init/context-ds.xml下的xml文件级别要高于
/src/main/resources/context/init/context-ds.xml下的jar包,名称一样的话包括包名,test中的会把main下的替换掉的。
3.5,如果还报错的话把/src/main/resources/context/init/context-ds.xml下的context-ds.xml文件也替换掉
3.6,添加数据库驱动jar包
3.7,假如有内存溢出的话,则这样配置一下。
-Xms512m -Xmx512m -XX:MaxNewSize=512m -XX:MaxPermSize=512m