你能拥有这样的代码吗?
def methodname ()
{
proc = "sql to call a stored proc"
def conn = Sql.newInstance(DB_CONN, DB_USERNAME, DB_PASSWORD, "org.postgresql.Driver")
def result1 = conn.rows(proc)
def result2 = MyClass.Find("from MyClass where foo='bar'")
return [result1, result2]
}
如果是这样,他们使用不同的连接?有没有办法让对存储过程的调用使用与MyClass调用相同的连接?
答案 0 :(得分:3)
他们将使用不同的连接。 Sql将获取一个新的,GORM调用将使用DataSource管理的连接池中的一个。但是你可以使用sessionFactory.currentSession.connection()让Sql使用与GORM调用相同的连接:
class MyControllerOrMyService {
def sessionFactory
def methodname() {
proc = "sql to call a stored proc"
def conn = new Sql(sessionFactory.currentSession.connection())
def result1 = conn.rows(proc)
def result2 = MyClass.Find("from MyClass where foo='bar'")
return [result1, result2]
}
}
答案 1 :(得分:2)
他们将是不同的联系。这是Grails的标准问题,因为您只能有一个DataSource.groovy,因此只有一个链接到GORM。有很多方法可以解决这个问题,但这主要取决于你当时的需求。
如果你想连接到一个完全不同的DataSource,你可以在Config.groovy中设置这样的东西(不完美但足够有效)。
environments {
production {
grails.serverURL = "http://localhost:8080/${appName}"
grails.databaseDriverClassName = "oracle.jdbc.driver.OracleDriver"
grails.databaseURL = "jdbc:oracle:thin:@<servername>:1521:<sid>"
grails.databaseUsername = "<username>"
grails.databasePassword = "<password>"
}
development {
grails.serverURL = "http://localhost:8080/${appName}"
grails.databaseDriverClassName = "oracle.jdbc.driver.OracleDriver"
grails.databaseURL = "jdbc:oracle:thin:@<servername>:1521:<sid>"
grails.databaseUsername = "<username>"
grails.databasePassword = "<password>"
}
test {
grails.serverURL = "http://localhost:8080/${appName}"
grails.databaseDriverClassName = "oracle.jdbc.driver.OracleDriver"
grails.databaseURL = "jdbc:oracle:thin:@<servername>:1521:<sid>"
grails.databaseUsername = "<username>"
grails.databasePassword = "<password>"
}
}
然后在您的服务中,只需将其称为:
import org.codehaus.groovy.grails.commons.*
class SomeService {
boolean transactional = true
def config = ConfigurationHolder.config
// set up the Sql object
def sql = groovy.sql.Sql.newInstance(
config.grails.databaseURL,
config.grails.databaseUsername,
config.grails.databasePassword,
config.grails.databaseDriverClassName)
答案 2 :(得分:0)