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"]
Dies funktioniert für Run-App, wird aber nicht für den Krieg arbeiten. –
Ja, Ihre Frage ist auf Run-App. – dsharew
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. –