Externalizing Grails Datasource configuration

前端 未结 4 1975
傲寒
傲寒 2020-11-27 14:37

Grails 1.x allows using external configuration files by setting the grails.config.locations directive. Is there a similar approach available for externalizi

相关标签:
4条回答
  • 2020-11-27 15:00

    The answer above does not really externalize configuration. He is close, but the configuration is still residing in the application. I would use a JVM environment var on startup of the application/server to point to a location outside the application where the external configuration resides. Read out the environment var in the config.groovy file and use it get the external configuration file. Something like this:

    def extConfig = System.properties.getProperty('ENVVAR');
    grails.config.locations = [ "file:${extConfig}/${appName}-config.groovy"]
    
    0 讨论(0)
  • 2020-11-27 15:01

    You can use a properties file specified in the grails.config.locations as a way to externalize the datasource configuration. Below is how I typically set up a Grails project:

    In my DataSource.groovy I specify this for the production environment:

      ....
      ....
      production {
        dataSource {
            dbCreate = "update"
            driverClassName = "com.myorg.jdbcDriverNotExists"
            url = ""
            username = ""
            password = ""
        }
      }
      ....
      ....
    

    I specify an external properties file in my Config.groovy:

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

    In the properties file (stored in grails-app/conf/) I specify the actual datasource info:

    dataSource.driverClassName=oracle.jdbc.OracleDriver
    dataSource.url=jdbc:oracle:thin:@host:port:sid
    dataSource.username=sa
    dataSource.password=secret
    

    I also use the properties file as a way to override other values that are in Config.groovy. When the app is deployed, if I have to modify the datasource info I just edit the /WEB-INF/classes/app-config.properties file and restart.

    0 讨论(0)
  • 2020-11-27 15:17

    Just put the configuration file location as following in Config.groovy file

    grails.config.locations = [
                "file:/yourDirectory/${appName}/${Environment.current.name}-datasource.properties",
                "file:/yourDirectory/${appName}/${Environment.current.name}-config.groovy",
                "classpath:${appName}-${Environment.current.name}-datasource.properties",
                "classpath:${appName}-${Environment.current.name}-config.groovy"
        ]
    

    And put all the details about datasource and other config values in your appropriate file. Hence you can externalize the configuration and need not restart to change values.

    0 讨论(0)
  • 2020-11-27 15:25

    For me this doesn't work. To get an environment variable.

    Better use :

    System.getenv().get("ENVVAR").toString()
    
    0 讨论(0)
提交回复
热议问题