這個問題無可否認類似於this question,但提供的答案不足以滿足我的示例。當關閉R時,從PostgreSQL斷開連接閃亮的應用
我正在創建一個連接到數據庫的Shiny應用程序。用戶可以提供一些輸入,並且一些「預置」查詢將會運行。現在,我想確保從應用程序退出時關閉與數據庫的連接。我可以使用一個按鈕和stopApp
函數,但是這假設用戶會很好,並且總是單擊所述按鈕。用戶有時可能會關閉窗口而使數據庫連接處於打開狀態,所以我想找到一種在用戶關閉應用程序窗口時明確關閉連接的方法。
我想一種解決方案是實例化一個新的連接,並在每個查詢結束時關閉,但似乎效率低下。
下面是一些工作代碼來演示問題。如果我從Rstudio運行這個應用程序,然後關閉窗口,我仍然有一個現有的連接按照dbListConnections(PostgreSQL())
。追加dbDisconnect(con)
到檔案的末尾並沒有幫助。
library(shiny)
library(RPostgreSQL)
server <- shinyServer(function(input, output){
# Read in the dataset
connectDB <- eventReactive(input$connectDB, {
if(input$drv != "postgresql"){
stop("Only 'postgresql' implemented currently")
}else{
drv <- dbDriver("PostgreSQL")
port = 5432
}
con <- dbConnect(drv, user = input$user, password = input$passwd,
port = port, host = input$server, dbname=input$db_name)
con
})
output$test <- renderText({
con <- connectDB()
"connection success"
})
})
ui <- shinyUI(
fluidPage(
titlePanel("Test Connection"),
sidebarLayout(
sidebarPanel(
textInput("drv", "Database Driver", value="postgresql"),
textInput("user", "User ID"),
textInput("server", "Server", value="server"),
textInput("db_name", "Database Name", value="dbName"),
passwordInput("passwd", "Password"),
actionButton("connectDB", "Connect to DB")
),
mainPanel(
textOutput("test")
)
)
)
)
shinyApp(ui=ui, server=server)
也許使用'session $ onSessionEnded'? – hrbrmstr