2015-10-26 36 views
0

我在我的項目使用Spring RESTful Web服務,在這裏我有兩個類別的用戶如何根據Java Web應用程序中的用戶請求在兩個數據庫之間切換?

1)二級(學生學習6間至10級)

2)間(學生學習班11日之間12)。

在每個URI,我們指定該用戶類型,例如參見下文: (http://localhost:8080/TestProject/login/次級 /身份驗證)

對於上述要求,我需要從「次要」 d.b表獲取數據。

同樣對於其他用戶類型請求,需要與其他d.b(Inter)進行通信。

在 'DAO' 類:

NamedParameterJdbcTemplate jdbcTemplate = new NamedParameterJdbcTemplate(
      getDataSource()); 
    jdbcTemplate.getJdbcOperations().execute(
       "SET SCHEMA " + **UriUtils.getSchema()**); 

在上述UriUtils.getSchema(),方法返回 '數據庫' 的名稱。

private DataSource getDataSource() { 
    String db = UriUtils.getDataBaseName(); 
    DataSource dataSource = null; 
    try { 
     InitialContext initialContext = new InitialContext(); 
     Context environmentContext = (Context) initialContext 
       .lookup("java:comp/env"); 
     dataSource = (DataSource) environmentContext.lookup(db); 
    } catch (NamingException e) { 
     logger.error(e.getMessage()); 
     logger.info(db + " resource is not available in server.xml file"); 
     e.printStackTrace(); 
    } 
    return dataSource; 
} 

在Tomcat服務器中,我配置了連接池。

server.xml中

<Resource auth="Container" driverClassName="org.postgresql.Driver" 
     logAbandoned="true" maxActive="20" maxIdle="10" maxWait="-1" 
     name="secondary" password="admin" removeAbandoned="true" 
     removeAbandonedTimeout="90" type="javax.sql.DataSource" 
     url="jdbc:postgresql://localhost:5432/postgres?currentSchema=secondary" 
     username="postgres" /> 
    <Resource auth="Container" driverClassName="org.postgresql.Driver" 
     logAbandoned="true" maxActive="20" maxIdle="10" maxWait="-1" 
     name="inter" password="admin" removeAbandoned="true" 
     removeAbandonedTimeout="90" type="javax.sql.DataSource" 
     url="jdbc:postgresql://localhost:5432/postgres?currentSchema=inter" 
     username="postgres" /> 

的context.xml

<ResourceLink name="secondary" global="secondary" 
    type="org.postgresql.Driver" /> 
<ResourceLink name="inter" global="inter" 
    type="org.postgresql.Driver" /> 

正在加載數據源對象每次是一個好的做法呢?

請建議是否有更好的方法可用。

+1

正常情況下,使用Spring時,您會將DataSource注入到DAO類中。在你的情況下,你會注入其中兩個,然後在構建'JdbcTemplate'時選擇使用哪一個。 – Andreas

回答

1

每次加載數據源對象是一種好的做法嗎?

否,IMV。

定義兩個datasources (secondaryDS, interDS)如春豆默認獨居,並注入相應datasourceJDBCTemplate類按您的要求。

0

您每次都不加載數據庫。查找操作不加載數據庫。對每個請求執行查找都可以。我的樣本中也沒有看到兩個數據庫。你有一個postgresql數據庫的兩個數據源。您可以使用一個數據源並對每個客戶機請求架構切換執行SET SCHEMA

相關問題