tags:

views:

54

answers:

0

Hi,

The grails application I am developing could run against MySQL or SQL Server. I want to add a new property in application.properties file say
database.type=MySQL // or it could be SQLSERVER

How do I get this property in Datasource.groovy so that if it is MySQL I connect to MySQL server or it is SQLSERVER I connect to SQL Server?

Is this the correct way to do it? How can I do it?

EDIT: After reading and searching for options I figured the following way explained. I have created config.properties file in /grails-app/conf/ folder.

driverClassName = com.microsoft.sqlserver.jdbc.SQLServerDriver
dataSource.url = jdbc:sqlserver://localhost:1433;databaseName=testDB
dataSource.username = sa
dataSource.password = sa

Also updated Config.groovy

grails.config.locations = ["classpath:config.properties"]

But I get the below error
Unable to load specified config location classpath:config.properties : class path resource [config.properties] cannot be opened because it does not exist

But if use

grails.config.locations = ["file:E:/workspace/SpringSource2.3.3/GRAILS_PRO/config.properties"]

The application starts up and is able to connect to the database. I don't want to use static file path. What is wrong when using classpath?

Have the same issue for both 'run-app' and 'war' mode i.e. same file does not exist error.

2nd EDIT:

After so much frustration of using classpath and not able to get it to work, I resorted to using environment property. Since server will have CATALINA_HOME defined, I used the below to build the path for external configuration file.

def CATALINA_HOME = "CATALINA_HOME"
def CONFIG_FILE_NAME = "db_config.properties"
if(!grails.config.locations || !(grails.config.locations instanceof List)) {
 grails.config.locations = []
}

if(System.getenv(CATALINA_HOME)) {
   def fullPath = System.getenv(CATALINA_HOME) + File.separator + "webapps" + File.separator + "${appName}" + File.separator + "WEB-INF" + File.separator + "classes" + File.separator + CONFIG_FILE_NAME
   grails.config.locations << "file:" + fullPath
} else {
     println "Missing configuration!"
 } 

The above solution is Tomcat specific. I really would like to see classpath version working!

Thank You. Regards, Jay Chandran.