Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Invalid bean definition with name 'dataSource' defined in class path resource [spring/database/DataSource.xml]

Im trying to create an application that access a sql server database using Spring, Maven and Hibernate. When i try to run the application im getting the following error:

Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'dataSource' defined in class path resource [spring/database/DataSource.xml]: Could not resolve placeholder 'jdbc.driverClassName'

Here are my classes

DataSoucre.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 
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
    <value>/properties/database.properties</value>
</property>
</bean>

<bean id="dataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>

</beans>

Hibernate.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

<!-- Hibernate session factory -->
<bean id="sessionFactory" 
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource">
  <ref bean="dataSource"/>
</property>

<property name="hibernateProperties">
   <props>
     <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
     <prop key="hibernate.show_sql">true</prop>
   </props>
</property>

<property name="annotatedClasses">
<list>
    <value>com.fexco.helloworld.web.model.Customer</value>
</list>
</property>

</bean>
</beans>

And database.properties

database.driverClassName=net.sourceforge.jtds.jdbc.Driver
database.url=jdbc:jtds:sqlserver://localhost:1433;databaseName=Customer
database.username=*****
database.password=*****

(I have blocked the username and passwords just for here), i also have a BeanLocation.xml as well but shouldnt really need to post that up.

Does anyone know how to solve this, its driving me crazy! Thanks

like image 839
newSpringer Avatar asked Apr 12 '12 11:04

newSpringer


2 Answers

Instead of ${jdbc.driverClassName} in your XML, use ${database.driverClassName}, ie the name of the property used in your database.properties file.

like image 134
ndeverge Avatar answered Mar 04 '23 03:03

ndeverge


First you need to ensure that the root location of the config files is accessible under classpath and then, add the relative path of your property file eg. classpath:properties/database.properties

In my case, an additinal issue was an additonal '"' present by mistake that was leading to this error. Hope this helps.

like image 29
sz14 Avatar answered Mar 04 '23 05:03

sz14