我在我的項目使用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" />
正在加載數據源對象每次是一個好的做法呢?
請建議是否有更好的方法可用。
正常情況下,使用Spring時,您會將DataSource注入到DAO類中。在你的情況下,你會注入其中兩個,然後在構建'JdbcTemplate'時選擇使用哪一個。 – Andreas