首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Jetty 配置 JNDI 數據源(C3P0)整合 Spring

     編輯:Java 綜合教學

Jetty 配置 JNDI 數據源(C3P0)整合 Spring

為了統一生產環境與本地開發的數據源訪問方式,將數據源配置為 JNDI 形式。本文記錄 Jetty Maven Plugin 整合 C3P0 JNDI 數據源的完整步驟。

1. 創建 jetty.xml

項目根目錄或 src/main/resources 下新建 jetty.xml:

<Configure id="Server" class="org.eclipse.jetty.server.Server">
    <New id="scmsDs" class="org.eclipse.jetty.plus.jndi.Resource">
        <Arg></Arg>  <!-- 空作用域,綁定到 java:comp/env -->
        <Arg>java:scmsDS</Arg>  <!-- JNDI 名稱 -->
        <Arg>
            <New class="com.mchange.v2.c3p0.ComboPooledDataSource">
                <Set name="driverClass">${jdbc.driverClassName}</Set>
                <Set name="jdbcUrl">${jdbc.url}</Set>
                <Set name="user">${jdbc.username}</Set>
                <Set name="password">${jdbc.password}</Set>
            </New>
        </Arg>
    </New>
</Configure>
  • 支持多個 <New> 定義多個數據源
  • 屬性值可用 ${...} 占位符,配合 Maven 資源過濾或系統屬性注入

2. Maven Jetty Plugin 依賴與配置

<plugin>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>8.1.2.v20120308</version>
    <dependencies>
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1.2</version>
        </dependency>
        <dependency>
            <groupId>com.oracle.jdbc</groupId>
            <artifactId>ojdbc5</artifactId>
            <version>11.2.0.3</version>
        </dependency>
    </dependencies>
    <configuration>
        <jettyXml>${project.build.outputDirectory}/jetty.xml</jettyXml>
    </configuration>
</plugin>

關鍵點:Plugin 依賴中必須聲明 C3P0 及 JDBC 驅動,否則 Jetty ClassLoader 找不到類。

3. Spring 整合 JNDI 數據源

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:scmsDS" />
    <property name="resourceRef" value="true" />  <!-- 自動補全 java:comp/env/ -->
</bean>

後續 DAO/Service 正常注入 dataSource,無感知切換。

驗證步驟

  1. mvn jetty:run 啟動
  2. 訪問應用,檢查日誌無 NameNotFoundException
  3. 執行數據庫操作測試

常見問題

現象原因解決
javax.naming.NameNotFoundExceptionJNDI 名稱不匹配 / jetty.xml 未加載檢查 jettyXml 路徑、JNDI 名稱一致性、web.xml resource-ref
ClassNotFoundException: ComboPooledDataSourcePlugin 依賴缺少 c3p0在 plugin/dependencies 添加 c3p0 坐標
Oracle 驅動找不到ojdbc 不在中央倉庫手動 install 到本地倉庫或使用私服

生產環境建議

  • 生產環境由容器管理數據源,開發環境用 Jetty JNDI 模擬,實現配置統一
  • 敏感信息(密碼)勿寫死,使用環境變量或配置中心注入
  • 考慮遷移至 HikariCP(性能更優),Jetty 同樣支持
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved