java - Autowiring More than One DataSource in Spring -
i have autowired 1 datasource dao class (spring 3.0), i.e.:
@component public class mydao { private namedparameterjdbctemplate template; @autowired @qualifier("datasource") public void setdatasource(datasource ds) { template = new namedparameterjdbctemplate(ds); } } however, number of dao method require use datasource. augmented following class:
@component public class mydao { private namedparameterjdbctemplate template; @autowired @qualifier("datasource") public void setdatasource(datasource ds) { template = new namedparameterjdbctemplate(ds); } private datasource datasource2; @autowired @qualifier("datasource2") public void setdatasource2(datasource datasource2) { this.datasource2= datasource2; } } my spring bean config file:
<bean id="datasource" class="org.springframework.jndi.jndiobjectfactorybean"> <property name="jndiname" value="java:comp/env/jdbc/read" /> </bean> <bean id="datasource2" class="org.springframework.jndi.jndiobjectfactorybean"> <property name="jndiname" value="java:comp/env/jdbc/update" /> </bean> having datasource autowired dao, can connect database. however, introducing second datasource result in following exception during bean creation/injection:
severe: caught exception while allowing testexecutionlistener [org.springframework.test.context.support.dependencyinjectiontestexecutionlistener@78fa39d7] prepare test instance [pkg.namespace.myserviceimpltest@73eb904d] java.lang.illegalstateexception: failed load applicationcontext @ org.springframework.test.context.testcontext.getapplicationcontext(testcontext.java:308) @ org.springframework.test.context.support.dependencyinjectiontestexecutionlistener.injectdependencies(dependencyinjectiontestexecutionlistener.java:109) @ org.springframework.test.context.support.dependencyinjectiontestexecutionlistener.preparetestinstance(dependencyinjectiontestexecutionlistener.java:75) @ org.springframework.test.context.testcontextmanager.preparetestinstance(testcontextmanager.java:321) @ org.springframework.test.context.junit4.springjunit4classrunner.createtest(springjunit4classrunner.java:211) @ org.springframework.test.context.junit4.springjunit4classrunner$1.runreflectivecall(springjunit4classrunner.java:287) @ org.junit.internal.runners.model.reflectivecallable.run(reflectivecallable.java:15) @ org.springframework.test.context.junit4.springjunit4classrunner.methodblock(springjunit4classrunner.java:289) @ org.springframework.test.context.junit4.springjunit4classrunner.runchild(springjunit4classrunner.java:231) @ org.junit.runners.blockjunit4classrunner.runchild(blockjunit4classrunner.java:50) @ org.junit.runners.parentrunner$3.run(parentrunner.java:193) @ org.junit.runners.parentrunner$1.schedule(parentrunner.java:52) @ org.junit.runners.parentrunner.runchildren(parentrunner.java:191) @ org.junit.runners.parentrunner.access$000(parentrunner.java:42) @ org.junit.runners.parentrunner$2.evaluate(parentrunner.java:184) @ org.springframework.test.context.junit4.statements.runbeforetestclasscallbacks.evaluate(runbeforetestclasscallbacks.java:61) @ org.springframework.test.context.junit4.statements.runaftertestclasscallbacks.evaluate(runaftertestclasscallbacks.java:70) @ org.junit.runners.parentrunner.run(parentrunner.java:236) @ org.springframework.test.context.junit4.springjunit4classrunner.run(springjunit4classrunner.java:174) @ org.eclipse.jdt.internal.junit4.runner.junit4testreference.run(junit4testreference.java:49) @ org.eclipse.jdt.internal.junit.runner.testexecution.run(testexecution.java:38) @ org.eclipse.jdt.internal.junit.runner.remotetestrunner.runtests(remotetestrunner.java:467) @ org.eclipse.jdt.internal.junit.runner.remotetestrunner.runtests(remotetestrunner.java:683) @ org.eclipse.jdt.internal.junit.runner.remotetestrunner.run(remotetestrunner.java:390) @ org.eclipse.jdt.internal.junit.runner.remotetestrunner.main(remotetestrunner.java:197) caused by: org.springframework.beans.factory.beancreationexception: error creating bean name 'mydao': injection of autowired dependencies failed; nested exception org.springframework.beans.factory.beancreationexception: not autowire method: public void pkg.namespace.mydao.setdatasource2(javax.sql.datasource); nested exception org.springframework.beans.factory.nosuchbeandefinitionexception: no matching bean of type [javax.sql.datasource] found dependency: expected @ least 1 bean qualifies autowire candidate dependency. dependency annotations: {} @ org.springframework.beans.factory.annotation.autowiredannotationbeanpostprocessor.postprocesspropertyvalues (autowiredannotationbeanpostprocessor.java:287) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.populatebean(abstractautowirecapablebeanfactory.java:1073) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.docreatebean(abstractautowirecapablebeanfactory.java:516) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.createbean(abstractautowirecapablebeanfactory.java:455) @ org.springframework.beans.factory.support.abstractbeanfactory$1.getobject(abstractbeanfactory.java:293) @ org.springframework.beans.factory.support.defaultsingletonbeanregistry.getsingleton(defaultsingletonbeanregistry.java:222) @ org.springframework.beans.factory.support.abstractbeanfactory.dogetbean(abstractbeanfactory.java:290) @ org.springframework.beans.factory.support.abstractbeanfactory.getbean(abstractbeanfactory.java:192) @ org.springframework.beans.factory.support.defaultlistablebeanfactory.preinstantiatesingletons(defaultlistablebeanfactory.java:585) @ org.springframework.context.support.abstractapplicationcontext.finishbeanfactoryinitialization(abstractapplicationcontext.java:895) @ org.springframework.context.support.abstractapplicationcontext.refresh(abstractapplicationcontext.java:425) @ org.springframework.test.context.support.abstractgenericcontextloader.loadcontext(abstractgenericcontextloader.java:84) @ org.springframework.test.context.support.abstractgenericcontextloader.loadcontext(abstractgenericcontextloader.java:1) @ org.springframework.test.context.testcontext.loadapplicationcontext(testcontext.java:280) @ org.springframework.test.context.testcontext.getapplicationcontext(testcontext.java:304) ... 24 more caused by: org.springframework.beans.factory.beancreationexception: not autowire method: public void pkg.namespace.mydao.setdatasource2 (javax.sql.datasource); nested exception org.springframework.beans.factory.nosuchbeandefinitionexception: no matching bean of type [javax.sql.datasource] found dependency: expected @ least 1 bean qualifies autowire candidate dependency. dependency annotations: {} @ org.springframework.beans.factory.annotation.autowiredannotationbeanpostprocessor$autowiredmethodelement.inject (autowiredannotationbeanpostprocessor.java:593) @ org.springframework.beans.factory.annotation.injectionmetadata.inject(injectionmetadata.java:84) @ org.springframework.beans.factory.annotation.autowiredannotationbeanpostprocessor.postprocesspropertyvalues (autowiredannotationbeanpostprocessor.java:284) ... 38 more caused by: org.springframework.beans.factory.nosuchbeandefinitionexception: no matching bean of type [javax.sql.datasource] found dependency: expected @ least 1 bean qualifies autowire candidate dependency. dependency annotations: {} @ org.springframework.beans.factory.support.defaultlistablebeanfactory.raisenosuchbeandefinitionexception(defaultlistablebeanfactory.java:924) @ org.springframework.beans.factory.support.defaultlistablebeanfactory.doresolvedependency(defaultlistablebeanfactory.java:793) @ org.springframework.beans.factory.support.defaultlistablebeanfactory.resolvedependency(defaultlistablebeanfactory.java:707) @ org.springframework.beans.factory.annotation.autowiredannotationbeanpostprocessor$autowiredmethodelement.inject (autowiredannotationbeanpostprocessor.java:551) ... 40 more update
as eis stated, had not updated config file test cases.
there seems nothing wrong code posted.
however, stack trace seems indicate tests still failing (in manner inconsistent code posted), guess test configuration wasn't date.
Comments
Post a Comment