I've had a problem with reading .properties file in Spring
Framework. I needed to inject it into the iBatis'
SqlMapConfig.xml:
<!-- iBatis -->
<bean id="sqlMap" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="sqlMapClientProperties" value="file:conf/${profile}/nastaveni.properties" />
<property name="configLocation" value="ibatis-maps/SqlMapConfig2.xml"/>
</bean>
<alias alias="iBatis" name="sqlMap"/>
But iBatis kept complaining that the properties defined in the file were not resolved. Better said, it behaved like the actual value was the property name, thus the code
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${jdbc.driver}"/>
gave me a ClassNotFoundException for the class
jdbc.driver.
What actually happened was clear when I made a test bean with a property of
type java.lang.Properties. Spring takes the file path
„file:conf/${profile}/nastaveni.properties“ as a Properties string
definition and provides iBatis a Properties object with a single
property: file = conf/release/nastaveni.properties.
The solution is to use the SqlMapClientFactoryBean:
<!-- iBatis -->
<bean id="sqlMap" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="sqlMapClientProperties">
<bean class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="location" value="file:conf/${profile}/nastaveni.properties"/>
</bean>
</property>
<property name="configLocation" value="ibatis-maps/SqlMapConfig2.xml"/>
</bean>
Of course, this is a trivial think, but not much well documented.