2013-06-12 3 views
0

Я пытаюсь изучить конфигурацию весны и бобов.добавление источника данных в исключение bean исключений Jdbctemplate

У меня будет несколько классов, связанных с функциями, связанными с DB, поэтому каждому из них понадобится класс JdbcTemplate. из-за этого я хочу создать конфигурацию компонента, которая будет вводить один класс JdbcTemplate для каждого из моих классов, связанных с БД.

Я создал следующую конфигурацию компонента.

<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource"> 
    <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
    <property name="url" value="jdbc:mysql://localhost:3306/foo"/> 
    <property name="username" value="root"></property> 
    <property name="password" value="password"></property> 
     <property name="validationQuery" value="SELECT 1" /> 
    <property name="testOnBorrow" value="true" /> 
    <property name="testWhileIdle" value="true" /> 
    <property name="initialSize" value="5" /> 
</bean> 

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" scope="singleton"> 
<constructor-arg ref="dataSource"></constructor-arg> 
</bean> 

проблема начинается при добавлении параметра к JdbcTemplate constructor-args. jdbctemplate должен получить источник данных в качестве параметра для своего конструктора. но когда я добавить эту собственность, и я пытаюсь выполнить мое приложение это исключение, которое я получаю:

java.lang.IncompatibleClassChangeError: class org.springframework.core.LocalVariableTableParameterNameDiscoverer$ParameterNameDiscoveringVisitor has interface org.springframework.asm.ClassVisitor as super class 
java.lang.ClassLoader.defineClass1(Native Method) 
java.lang.ClassLoader.defineClass(ClassLoader.java:791) 
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
org.apache.catalina.loader.WebappClassLoader.findClassInternal(Unknown Source) 
org.apache.catalina.loader.WebappClassLoader.findClass(Unknown Source) 
org.apache.catalina.loader.WebappClassLoader.loadClass(Unknown Source) 
org.apache.catalina.loader.WebappClassLoader.loadClass(Unknown Source) 
org.springframework.core.LocalVariableTableParameterNameDiscoverer.inspectClass(LocalVariableTableParameterNameDiscoverer.java:112) 
org.springframework.core.LocalVariableTableParameterNameDiscoverer.getParameterNames(LocalVariableTableParameterNameDiscoverer.java:85) 
org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:193) 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1045) 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:949) 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:487) 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) 
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) 
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) 
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464) 
org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) 

что мне не хватает?

спасибо!

+0

Ваш результат не соответствует 'context.xml'. Никакой bean с именем 'dataSource2' не определен –

+0

ooops Я скопировал неправильное исключение !!! fixing it – ufk

+0

Это проблема с classpath http://stackoverflow.com/questions/15758151/class-conflict-when-starting-up-java-project-classmetadatareadingvisitor-has-in –

ответ

1

Пожалуйста, попробуйте код, если вы хотите jdbcTemplate

<!-- DataSource configuration for Apache Commons DBCP. --> 
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" 
      p:driverClassName="${jdbc.driver}" p:url="${jdbc.url}" 
      p:username="${jdbc.username}" p:password="${jdbc.password}"/> 

<!--jdcb template for DB tests--> 
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate"> 
     <constructor-arg type="javax.sql.DataSource" ref="dataSource"/> 
    </bean> 
0

Ошибка в том, что есть JdbcTemplate Tyring ссылаться на DataSource под названием «dataSource2» ... но вы определили один называется «DataSource»

Проверьте все пружинные файлы контекста в приложении для шаблона JDBC что выглядит следующим образом:

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" scope="singleton"> 
<constructor-arg ref="dataSource2"></constructor-arg> 
</bean> 

Возможно, вы случайно объявили два. Если бы не попробовать освежающий проект, чистый и т.д.

+0

Я скопировал неправильное исключение ... исправил его в сообщении – ufk

0

Попробуйте Bean.xml

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> 

    <bean id="customerDAO" class="com.shreyansh.dao.impl.JdbcCustomerDAO"> 
     <property name="dataSource" ref="dataSource" /> 
    </bean> 

</beans> 

весна-Datasource.xml

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> 

    <bean id="dataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 

     <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
     <property name="url" value="jdbc:mysql://localhost:3306/shreyansh" /> 
     <property name="username" value="root" /> 
     <property name="password" value="password" /> 
    </bean> 

</beans> 

весна-Module.xml

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> 

    <import resource="database/Spring-Datasource.xml" /> 
    <import resource="customer/Spring-Customer.xml" /> 

</beans> 
+0

спасибо за ваш ответ, но я не совсем понял его. где jdbctemplate здесь ? – ufk

0

Как видящие ваша ошибка java.lang.IncompatibleClassChangeError .Это брошено когда изменение несовместимого класса произошло в какой-то класс definition.So, похоже, проблемы версии .Would вы сказать, какие версии Java , весной и системой вы используете.

+0

Весна 3.2.3 система Linux Linux gentoo. Tomcat 7.0.39 – ufk

+0

java-версия "1.7.0_09" IcedTea7 2.3.3 – ufk