我想對來自特定oracle.jdbc.pool.OracleDataSource連接池的每個新連接執行ALTER SESSION命令。有沒有辦法做到這一點?oracle.jdbc.pool.OracleDataSource爲每個新連接運行一個命令
1
A
回答
0
您可以在每個新連接上執行自定義代碼(或者,在最壞的情況下,每個連接池中的「get」)。另一方面,如果可行,您可以在特定模式上創建登錄觸發器。
1
如果您正在部署到應用程序服務器,請檢查配置選項,在很多情況下,您可以在其中配置一些「初始SQL」。
如果您不能這樣做,請在應用程序級別將oracle.jdbc.pool.OracleDataSource
換成自定義數據源,然後在應用程序的其餘部分使用該自定義數據源。像這樣的:
public class InitialSqlDataSource implements DataSource {
private DataSource delegate;
private String initialSql;
public InitialSqlDataSource(DataSource delegate, String initialSql) {
this.delegate = delegate;
this.initialSql = initialSql;
}
public void setDelegate(DataSource delegate) {
this.delegate = delegate;
}
public void setInitialSql(String initialSql) {
this.initialSql = initialSql;
}
@Override
public Connection getConnection() {
Connection connection = delegate.getConnection();
if (connection != null && isNew(connection)) {
issueInitialSql(connection);
}
return connection;
}
protected boolean isNew(Connection connection) {
// Logic to find out if connection is a new one
// or a previously pooled connection. In the worst
// case you can approximate this logic by always returning
// true. This will issue the initial SQL on every retrieval
// of a connection from this DataSource. This will
// add some overhead, but will work in many cases.
return true;
}
protected void issueInitialSql(Connection connection) {
// A typical JDBC statement execution, adapted to
// your particular needs
...
}
// Delegate every other method to this.delegate
...
}
相關問題
- 1. 爲tmux中的每個新窗口運行一個命令
- 2. 運行一個命令作爲cron會,但從命令行
- 3. 打開byobu窗口,每個窗口運行一個命令?
- 4. AutoIt:完成前一個命令後運行下一個命令
- 5. 運行終端腳本執行一個命令,當該命令運行時,打開一個新標籤並運行另一個命令
- 6. 運行命令,提取一個字段,運行一個結果命令
- 7. Bash /打開一個命令運行的命令作爲參數
- 8. 運行兩個命令行命令
- 9. IfFileExists命令運行3個命令行
- 10. 是否爲每個UDP連接打開一個新套接字?
- 11. 將Laravel Artisan命令作爲一個新進程運行
- 12. 連接多個命令
- 13. 將多個行連接成一個單元格的SQL命令?
- 14. 如何在另一個命令運行的某個時間後運行命令?
- 15. 用戶連接時運行命令?
- 16. 在一個新的shell中運行多個命令(阻塞)
- 17. 用連接更新每個sql server行
- 18. 如何打開一個telnet連接並在C#中運行一些命令?
- 19. 如何爲每個k值運行STRUCTURE命令n次?
- 20. 通過jq爲每個JSON項目運行bash命令
- 21. 如何在PowerShell中爲每個git子模塊運行命令?
- 22. vim:運行基於一個命令的多個命令:全局命令
- 23. 每秒運行命令
- 24. cron每週運行一次命令
- 25. 爲npm測試運行多個命令
- 26. crontab的運行命令每次運行
- 27. 運行了一定時間,退出一個命令,接下來
- 28. 從網頁運行一個命令
- 29. 如何一起運行兩個命令?
- 30. Notepad ++多個運行命令
所以問題是我怎麼做每個新的連接自定義代碼?對每個「獲取」做任何事情都會產生太多的影響。出於多種原因,執行登錄觸發器不是一個選項。 – 2013-03-18 22:17:26
@MK。哪一個更改會話如此昂貴以至於每次交易都無法承擔額外的一次通話費用? – gpeche 2013-05-10 22:33:41
@gpeche我不記得了,但通常我不想找到我們艱難的方式哪些是昂貴的,寧願做正確的事情沒有花費幾個小時後分析性能。 – 2013-05-11 15:54:39