Showing posts with label connection properties. Show all posts
Showing posts with label connection properties. Show all posts

Monday, April 20, 2015

Issue with Key Names During DriverManagerDataSource Spring Bean Initialization

So I found a little something while loading a DriverManagerDataSource in Spring.

The DriverManagerDataSource is a class, the objects of which you usually initialize from within the bean configuration (Application Context) XML  file in Spring for configuring a DataSource. And this is how people usually do it:
<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/mydb" />
<property name="username" value="myuser" />
</bean> 
However, for some reason, I had to do this in code. Now, spring gives you a constructor, which takes a URL and a Properties object as arguments. Signature:
DriverManagerDataSource(String url, Properties conProps)
So I assumed the keys in the conProps object would be the same as the property names in the XML. But turns out I was wrong. The keys that the conProps object must have are actually different. Here's how I did it:
Properties conProps = new Properties();
conProps.put("user", "myuser");
conProps.put("driverClassName", "com.mysql.jdbc.Driver");
DriverManagerDataSource dataSource = new DriverManagerDataSource("
jdbc:mysql://localhost:3306/mydb", conProps);
So the key for the 'username' property is actually 'user' when using the constructor with Properties. Have I found a bug? ;)
Nonetheless, that took a good 15 mins of hair-pulling until I noticed.

Note: I am using Spring 4.1.5.