Resin 作為高效能 Java 應用伺服器,內建 Web 伺服器效能優異,但企業環境常需整合既有 IIS 基礎設施(Windows 整合認證、靜態資源快取、SSL 卸載)。本文詳細說明如何配置多虛擬主機與多資料庫連線池,滿足多租戶應用需求。
isapi_srun.dll 版本必須與 Resin 版本嚴格對應。作者測試 Resin 3.0.23 版本效能可接受,較新版本請參考官方文件確認 ISAPI 橋接器相容性。
<database>
<jndi-name>jdbc/aaa</jndi-name>
<driver type="net.sourceforge.jtds.jdbc.Driver">
<url>jdbc:jtds:sqlserver://localhost/bupt</url>
<user>ddd</user>
<password>ddd</password>
</driver>
<prepared-statement-cache-size>32</prepared-statement-cache-size>
<max-connections>20</max-connections>
<max-idle-time>120s</max-idle-time>
</database>
<database>
<jndi-name>jdbc/ddd</jndi-name>
<driver type="net.sourceforge.jtds.jdbc.Driver">
<url>jdbc:jtds:sqlserver://localhost/mobi</url>
<user>ddd</user>
<password>ddd</password>
</driver>
<prepared-statement-cache-size>32</prepared-statement-cache-size>
<max-connections>20</max-connections>
<max-idle-time>120s</max-idle-time>
</database>
應用層使用:Hibernate / Spring / JNDI 查找 java:comp/env/jdbc/aaa 即可切換資料來源。
/scripts 指向 Resin ISAPI 橋接器(isapi_srun.dll)<host id="www.abc.com" root-directory=".">
<!-- 明確配置根 WebApp 對應專案目錄 -->
<web-app id="/" document-directory="E:\eclipse\workspace\bupt\web"/>
</host>
<host id="www.abcd.com" root-directory=".">
<web-app id="/" document-directory="E:\eclipse\workspace\mobi\web"/>
</host>
核心對應關係:host id 必須與 IIS 網站的「主機標頭」完全一致(含大小寫),Resin 依此路由請求至對應 WebApp。
| 配置項 | 建議值 | 說明 |
|---|---|---|
| max-connections | 50-100 | 依據資料庫最大連線數與預期並發調整 |
| prepared-statement-cache-size | 50-100 | 減少 SQL 解析開銷,避免過大佔用記憶體 |
| max-idle-time | 300s | 平衡連線重用與資料庫端閒置連線清理 |
| connection-wait-timeout | 10s | 避免請求無限期等待連線,快速失敗回傳 503 |
document-directory 路徑是否存在 WEB-INF/web.xmlActiveConnections 持續增長isapi_srun.dll、調整 IIS 應用程式集區回收設定host id 不一致,導致路由至預設主機| 架構 | 優點 | 缺點 |
|---|---|---|
| IIS + Resin (ISAPI) | 整合 Windows 認證、靜態檔案高效服務 | ISAPI 橋接器除錯困難、Windows 綁定 |
| Nginx + Resin (反向代理) | 跨平台、高併發、配置簡單、支援 WebSocket | 需額外配置 Windows 整合認證轉發 |
| Resin 內建 HTTP | 零配置、效能最佳、支援所有 Resin 功能 | 缺乏企業級 Web 伺服器功能(URL 重寫、速率限制等) |
掌握 IIS + Resin 多站點與多資料源配置,能有效支援 SaaS 多租戶架構、部門級應用隔離等企業級部署需求。