Dynamic Data Source from Environment properties
<p>I have a report that uses an XML DataSource. In development, I want to connect to my development DB for the data. However, in QA/UAT/PROD environments I want to grab the JDBC Url / user / password from environment variables. (Most examples I see replaces the Datasource.xml file based on a param; however, I choose to use environment variables because I don't want the JDBC properties of Production to be part of the source code / war file.)</p>
<p> </p>
<p>I refactored the XML Datasource as such:</p>
<p style="font-size:11px;font-family:Monaco;color:rgb(147,33,146);"><span style="color:#009193;"><?</span><span style="color:#4e9192;">xml</span><span style="color:#000000;"> </span>version<span style="color:#000000;">=</span><span style="color:#3933ff;">"1.0"</span><span style="color:#000000;"> </span>encoding<span style="color:#000000;">=</span><span style="color:#3933ff;">"UTF-8"</span><span style="color:#000000;"> </span>standalone<span style="color:#000000;">=</span><span style="color:#3933ff;">"no"</span><span style="color:#009193;">?></span></p>
<p style="font-size:11px;font-family:Monaco;color:rgb(78,145,146);"><span style="color:#009193;"><</span>DataTools.ServerProfiles<span style="color:#000000;"> </span><span style="color:#932192;">version</span><span style="color:#000000;">=</span><span style="color:#3933ff;">"1.0"</span><span style="color:#009193;">></span></p>
<p style="font-size:11px;font-family:Monaco;color:rgb(57,51,255);"><span style="color:#000000;"> </span><span style="color:#009193;"><</span><span style="color:#4e9192;">profile</span><span style="color:#000000;"> </span><span style="color:#932192;">autoconnect</span><span style="color:#000000;">=</span>"No"<span style="color:#000000;"> </span><span style="color:#932192;">desc</span><span style="color:#000000;">=</span>""<span style="color:#000000;"> </span><span style="color:#932192;">id</span><span style="color:#000000;">=</span>"a32670c1-562d-11e4-956c-d9f7873a0515"<span style="color:#000000;"> </span><span style="color:#932192;">name</span><span style="color:#000000;">=</span>"SW"<span style="color:#000000;"> </span><span style="color:#932192;">providerID</span><span style="color:#000000;">=</span>"org.eclipse.birt.report.data.oda.jdbc"<span style="color:#009193;">></span></p>
<p style="font-size:11px;font-family:Monaco;color:rgb(78,145,146);"><span style="color:#000000;"> </span><span style="color:#009193;"><</span>baseproperties<span style="color:#009193;">></span></p>
<p style="font-size:11px;font-family:Monaco;color:rgb(57,51,255);"><span style="color:#000000;"> </span><span style="color:#009193;"><</span><span style="color:#4e9192;">property</span><span style="color:#000000;"> </span><span style="color:#932192;">name</span><span style="color:#000000;">=</span>"odaURL"<span style="color:#000000;"> </span><span style="color:#932192;">value</span><span style="color:#000000;">=</span>"${dataSource.url}"<span style="color:#000000;"> </span><span style="color:#009193;">/></span></p>
<p style="font-size:11px;font-family:Monaco;color:rgb(57,51,255);"><span style="color:#000000;"> </span><span style="color:#009193;"><</span><span style="color:#4e9192;">property</span><span style="color:#000000;"> </span><span style="color:#932192;">name</span><span style="color:#000000;">=</span>"odaDriverClass"<span style="color:#000000;"> </span><span style="color:#932192;">value</span><span style="color:#000000;">=</span>"com.microsoft.sqlserver.jdbc.SQLServerDriver"<span style="color:#000000;"> </span><span style="color:#009193;">/></span></p>
<p style="font-size:11px;font-family:Monaco;color:rgb(57,51,255);"><span style="color:#000000;"> </span><span style="color:#009193;"><</span><span style="color:#4e9192;">property</span><span style="color:#000000;"> </span><span style="color:#932192;">name</span><span style="color:#000000;">=</span>"odaPassword"<span style="color:#000000;"> </span><span style="color:#932192;">value</span><span style="color:#000000;">=</span>"${dataSource.password"<span style="color:#000000;"> </span><span style="color:#009193;">/></span></p>
<p style="font-size:11px;font-family:Monaco;color:rgb(57,51,255);"><span style="color:#000000;"> </span><span style="color:#009193;"><</span><span style="color:#4e9192;">property</span><span style="color:#000000;"> </span><span style="color:#932192;">name</span><span style="color:#000000;">=</span>"odaUser"<span style="color:#000000;"> </span><span style="color:#932192;">value</span><span style="color:#000000;">=</span>"${dataSource.username}"<span style="color:#000000;"> </span><span style="color:#009193;">/></span></p>
<p style="font-size:11px;font-family:Monaco;color:rgb(57,51,255);"><span style="color:#000000;"> </span><span style="color:#009193;"><</span><span style="color:#4e9192;">property</span><span style="color:#000000;"> </span><span style="color:#932192;">name</span><span style="color:#000000;">=</span>"contentBidiFormatStr"<span style="color:#000000;"> </span><span style="color:#932192;">value</span><span style="color:#000000;">=</span>"ILYNN"<span style="color:#000000;"> </span><span style="color:#009193;">/></span></p>
<p style="font-size:11px;font-family:Monaco;color:rgb(57,51,255);"><span style="color:#000000;"> </span><span style="color:#009193;"><</span><span style="color:#4e9192;">property</span><span style="color:#000000;"> </span><span style="color:#932192;">name</span><span style="color:#000000;">=</span>"metadataBidiFormatStr"<span style="color:#000000;"> </span><span style="color:#932192;">value</span><span style="color:#000000;">=</span>"ILYNN"<span style="color:#000000;"> </span><span style="color:#009193;">/></span></p>
<p style="font-size:11px;font-family:Monaco;color:rgb(78,145,146);"><span style="color:#000000;"> </span><span style="color:#009193;"></</span>baseproperties<span style="color:#009193;">></span></p>
<p style="font-size:11px;font-family:Monaco;color:rgb(78,145,146);"><span style="color:#000000;"> </span><span style="color:#009193;"></</span>profile<span style="color:#009193;">></span></p>
<p style="font-size:11px;font-family:Monaco;color:rgb(78,145,146);"><span style="color:#009193;"></</span>DataTools.ServerProfiles<span style="color:#009193;">></span></p>
<p style="font-size:11px;font-family:Monaco;color:rgb(78,145,146);"> </p>
<p style="font-size:11px;font-family:Monaco;">I'm trying to use Spring to replace these property place holder values, but was not successful.</p>
<p style="font-size:11px;font-family:Monaco;">Here is my relevant Spring appContext.xml:</p>
<p style="font-size:11px;font-family:Monaco;color:rgb(57,51,255);"><span style="color:#000000;"> </span><span style="color:#009193;"><</span><span style="color:#4e9192;">bean</span><span style="color:#000000;"> </span><span style="color:#932192;">id</span><span style="color:#000000;">=</span>"propertyPlaceholder"</p>
<p style="font-size:11px;font-family:Monaco;color:rgb(57,51,255);"><span style="color:#000000;"> </span><span style="color:#932192;">class</span><span style="color:#000000;">=</span>"org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"<span style="color:#009193;">></span></p>
<p style="font-size:11px;font-family:Monaco;color:rgb(57,51,255);"><span style="color:#000000;"> </span><span style="color:#009193;"><</span><span style="color:#4e9192;">property</span><span style="color:#000000;"> </span><span style="color:#932192;">name</span><span style="color:#000000;">=</span>"systemPropertiesModeName"<span style="color:#000000;"> </span><span style="color:#932192;">value</span><span style="color:#000000;">=</span>"SYSTEM_PROPERTIES_MODE_OVERRIDE"<span style="color:#009193;">/></span></p>
<p style="font-size:11px;font-family:Monaco;"> <span style="color:#009193;"><</span><span style="color:#4e9192;">property</span> <span style="color:#932192;">name</span>=<span style="color:#3933ff;">"locations"</span><span style="color:#009193;">></span></p>
<p style="font-size:11px;font-family:Monaco;"> <span style="color:#009193;"><</span><span style="color:#4e9192;">list</span><span style="color:#009193;">></span></p>
<p style="font-size:11px;font-family:Monaco;"> <span style="color:#009193;"><</span><span style="color:#4e9192;">value</span><span style="color:#009193;">></span>classpath://MyApp.properties<span style="color:#009193;"></</span><span style="color:#4e9192;">value</span><span style="color:#009193;">></span></p>
<p style="font-size:11px;font-family:Monaco;"> <span style="color:#009193;"></</span><span style="color:#4e9192;">list</span><span style="color:#009193;">></span></p>
<p style="font-size:11px;font-family:Monaco;"> <span style="color:#009193;"></</span><span style="color:#4e9192;">property</span><span style="color:#009193;">></span></p>
<p style="font-size:11px;font-family:Monaco;"> </p>
<p style="font-size:11px;font-family:Monaco;"> <span style="color:#009193;"></</span><span style="color:#4e9192;">bean</span><span style="color:#009193;">></span></p>
<p style="font-size:11px;font-family:Monaco;"> </p>
<p style="font-size:11px;font-family:Monaco;">MyApp.properties contain the development DB properties. Is anyone using the same pattern and got this to work?</p>
<p style="font-size:11px;font-family:Monaco;">My guess is Spring's PropertyPlaceholderConfigurer only works with Spring beans, or could it be extended to BIRT's Datasource XML file?</p>
<p style="font-size:11px;font-family:Monaco;"> </p>
<p style="font-size:11px;font-family:Monaco;">I imagine a lot of people will find this solution useful.</p>
<p style="font-size:11px;font-family:Monaco;"> </p>
<p style="font-size:11px;font-family:Monaco;">Thank You.</p>
<p style="font-size:11px;font-family:Monaco;"> </p>
<p style="font-size:11px;font-family:Monaco;"> </p>
<p style="font-size:11px;font-family:Monaco;"> </p>
<p style="font-size:11px;font-family:Monaco;"> </p>
<p style="font-size:11px;font-family:Monaco;"> </p>