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

Play Framework 多資料源配置與 Oracle 資料庫整合實戰

     編輯:程式設計綜合問答

需求場景

在 Play Framework 專案中需配置多個 Oracle 資料源,並能在 Ebean ORM 中靈活指定使用哪個資料源進行查詢,避免使用 Model.Finder 硬編碼資料源導致的效能問題。

application.conf 多資料源配置

# 預設資料源
db.default.driver=oracle.jdbc.driver.OracleDriver
db.default.url="jdbc:oracle:thin:@//host1:1521/service1"
db.default.user="user1"
db.default.password="pass1"
ebean.default="models.default.*"

# 第二資料源:test
db.test.driver=oracle.jdbc.driver.OracleDriver
db.test.url="jdbc:oracle:thin:@//host2:1521/service2"
db.test.user="user2"
db.test.password="pass2"
ebean.test="models.test.*"

關鍵配置說明

  • db.<name>.*:定義名為 <name> 的資料源屬性
  • ebean.<name>:指定該資料源對應的實體模型包路徑
  • 模型類需放置在對應包下,Ebean 會自動關聯

實體模型定義

// app/models/test/VLine.java
package models.test;

import javax.persistence.*;
import play.db.ebean.*;

@Entity
@Table(name = "v_line")
public class VLine extends Model {
    @Id
    public Long gno;
    
    public String name;
    // 其他欄位...
    
    // 靜態查詢介面,自動綁定 test 資料源
    public static final Finder<Long, VLine> find = new Finder<>(VLine.class);
}

動態指定資料源查詢

若需在運行時動態切換資料源(如 RawSql 查詢):

import play.db.ebean.*;
import com.avaje.ebean.*;

public class VLineRepository {
    
    // 獲取指定資料源的 EbeanServer
    private EbeanServer getTestServer() {
        return Ebean.getServer("test");
    }
    
    public List<VLine> findByCustomSql(String sql) {
        EbeanServer server = getTestServer();
        RawSql rawSql = RawSqlBuilder.parse(sql)
            .columnMapping("gno", "gno")
            .create();
        
        Query<VLine> query = server.find(VLine.class);
        query.setRawSql(rawSql);
        return query.findList();
    }
}

避免 Model.Finder 硬編碼的優勢

方式靈活度效能維護性
Model.Finder("test", ...)低(硬編碼)可能較慢差
Ebean.getServer("test")高(動態獲取)連線池複用好

常見問題排查

  • 驅動類找不到:確認 ojdbc*.jar 已放入 classpath
  • 實體未掃描到:檢查 ebean.test 包路徑與實體類 package 一致
  • 事務邊界:跨資料源操作需手動管理事務,或使用 JTA

總結

Play Framework 多資料源配置核心在於 application.conf 中定義 db.<name> 與 ebean.<name> 成對配置,運行時透過 Ebean.getServer(<name>) 靈活獲取對應資料源實例,實現查詢邏輯與資料源解耦。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved