2016-04-27 6 views
0
geben

Ich mag andere Datenbank auf während der Anwendung Start übergebenen Argumente basieren verbinden, ich plane Argument wieMit Datenbank verbinden, abhängig von Argumenten

grails run-app -Ddbsource.name=db_one 

So in diesem Fall zu passieren, sollte die Datasource.groovy so aussehen

dataSource { 
    pooled = true 
    driverClassName = "com.microsoft.sqlserver.jdbc.SQLServerDriver" 
    dialect = "org.hibernate.dialect.SQLServerDialect" 
    dbCreate = "update" 
    username = "username" 
    password = "password" 
    url = "jdbc:sqlserver://DEV-SVR;databaseName=db_one" 
} 

Es sollte auch für WAR arbeiten, ich Argumente habe vor, die gleiche Art und Weise passieren wie diese

grails war -Ddbsource.name=db_one 

Gibt es das überhaupt, um das zu erreichen?

Antwort

0

Versuchen Sie es so.

Befehl:

grails run-app -Ddbname=db_one 

Code:

dataSource { 
    pooled = true 
    driverClassName = "com.microsoft.sqlserver.jdbc.SQLServerDriver" 
    dialect = "org.hibernate.dialect.SQLServerDialect" 
    dbCreate = "update" 
    username = "username" 
    password = "password" 
    url = "jdbc:sqlserver://DEV-SVR;databaseName=${System.getenv('dbname')}" 
} 
+0

Dies funktioniert für Run-App, wird aber nicht für den Krieg arbeiten. –

+0

Ja, Ihre Frage ist auf Run-App. – dsharew

+0

Es tut mir leid, ich hätte genauer sein sollen. Ich brauche es für Run-App sowie Krieg für alle Umgebungen zu arbeiten. –

0

finde ich, dass die beste Lösung Konfiguration Externalisierung. Sie können dies leicht tun, indem Sie Ihre DataSource.groovy und Config.groovy Dateien richtig einrichten. Diese

ist, was unser (relevanter Teil) DataSource.groovy wie für alle unsere Anwendungen sieht (die in der Regel für die Produktion von JBoss bereitgestellt werden):

// environment specific settings 
environments { 
    development { 
     dataSource { 
      dbCreate = "update" // one of 'create', 'create-drop','update' 
      pooled = true 
      dialect= "org.hibernate.dialect.MySQL5InnoDBDialect" 
      driverClassName = "com.mysql.jdbc.Driver" 
      properties { 
       jmxEnabled = true 
       initialSize = 5 
       maxActive = 50 
       minIdle = 5 
       maxIdle = 25 
       maxWait = 10000 
       maxAge = 10 * 60000 
       timeBetweenEvictionRunsMillis = 5000 
       minEvictableIdleTimeMillis = 60000 
       validationQuery = "SELECT 1" 
       validationQueryTimeout = 3 
       validationInterval = 15000 
       testOnBorrow = true 
       testWhileIdle = true 
       testOnReturn = false 
       jdbcInterceptors = "ConnectionState;StatementCache(max=200)" 
       defaultTransactionIsolation = java.sql.Connection.TRANSACTION_READ_COMMITTED 
      } 
//   loggingSql = true 
     } 
    } 
    test { 
     test { 
      dataSource { 
       dbCreate = "update" 
       url = "jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE" 
      } 
     } 
    } 
    production { 
     dataSource { 
      dbCreate = "update" // one of 'create', 'create-drop','update' 
      dialect= "org.hibernate.dialect.MySQL5InnoDBDialect" 
      pooled = false 
      jndiName = "java:/${appName}DS" 
     } 
    } 
} 

Mit dieser Konfiguration ich die Datenquelle festgelegt a seine JNDI-Ressource bei der Produktion, die auf dem App-Server konfiguriert wird, und wir richten auch Verbindungspooling und allgemeine Einstellungen (Treiber, Dialekt) für die Entwicklungsumgebung ein.

Jetzt, mit Config.groovy können Sie leicht die App laden den Rest der Konfiguration für die Verbindung in der Entwicklung von einer externen Datei, die großartig ist, da auf diese Weise jeder Entwickler ihre eigene Datenbankkonfiguration einstellen kann und kein Benutzer/Die Passwortkombination wird immer an das Quellcodeverwaltungssystem gesendet.

In der Tat, Config.groovy kommt in der Regel mit so etwas wie diesem an der Spitze (kommentiert):

grails.config.locations = [ "file:${userHome}/.grails/${appName}-config.properties", 
         "file:${userHome}/.grails/${appName}-config.groovy"] 

Also, wenn Ihr app name 'myapp' ist, Ihr Benutzer ist 'max', Ihr Benutzer home ist '/ Users/max', es wird versucht, '/Users/max/.grails/myapp-config.properties' oder '/Users/max/.grails/myapp-config.groovy' zu laden.

Dort können Sie den Rest der benötigten Parameter einstellen (oder sie außer Kraft setzen). Beispiel Eigenschaftsdatei:

dataSource.username=USERNAME 
dataSource.password=PASSWORD 
dataSource.url=jdbc:mysql://192.168.1.1/DATABASE?autoReconnect=true&useUnicode=true&characterEncoding=utf8" 

Wie gut, natürlich, von anderen Konfigurationseigenschaften Sie können aus verschiedenen Gründen aus der App müssen durch (nicht nur die Datenbankkonfiguration).

Ich denke, dass Sie diese Konfiguration leicht ändern können, indem Sie die angegebenen Positionen ändern, indem Sie Umgebungsvariablen verwenden, die auf die Art und Weise übergeben werden, wie Sie es versuchen. Auf diese Weise müssen Sie nur eine einzige Umgebungsvariable festlegen. Vielleicht wie:

grails.config.locations = [ "file:${userHome}/.grails/${appName}-${System.getenv('dbname)}-config.properties", 
         "file:${userHome}/.grails/${appName}-${System.getenv('dbname)}-config.groovy"] 
Verwandte Themen