database.properties
subject.driverClassName=oracle.jdbc.driver.OracleDriver
subject.url=jdbc:oracle:thin:@127.0.0.1:instancename
subject.username=username
subject.password=password
context.xml
<bean id="subjectDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="url" value="${subject.url}" />
<property name="username" value="${subject.username}" />
<property name="password" value="${subject.password}" />
<property name="driverClassName" value="${subject.driverClassName}" />
</bean>
<!-- jdbcTemplate -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="subjectDataSource" />
</bean>
Controller.java
@Controller
public class GeneralRequestController {
@Autowired
private JdbcTemplate jdbc;
/**
* 通用响应请求的方法
* @return
*/
@RequestMapping("generalRequest")
@ResponseBody
public List<Map<String, String>> generalRequest(HttpServletRequest request) {
String tableName = request.getParameter("tableName");
String sql = "select * from " + tableName;
List<Map<String, String>> resultList = jdbc.query(sql, new RowMapper<Map<String,String>>() {
public Map<String,String> mapRow(ResultSet rs, int rowNum) throws SQLException {
Map<String,String> resultMap = new HashMap<String,String>();
ResultSetMetaData meta = rs.getMetaData();
int count = meta.getColumnCount();
String columnName = "";
String value = "";
for(int i=0;i<count;i++) {
columnName = meta.getColumnName(i+1);
value = rs.getString(columnName);
resultMap.put(columnName, value);
}
return resultMap;
}
});
return resultList;
}
}
context.xml
<bean id="multipleDataSource" class="MultipleDataSource">
<property name="defaultTargetDataSource" ref="subjectDataSource"></property>
<property name="targetDataSources">
<map>
<entry key="default" value-ref="dataSource" />
<entry key="subject" value-ref="subjectDataSource" />
</map>
</property>
</bean>
<!-- JdbcTemplate -->
<bean id="subject" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="multipleDataSource" />
</bean>
MutipleDataSourcce.java
public class MultipleDataSource extends AbstractRoutingDataSource {
/**
* 默认数据源
*/
public static final String DEFAULT = "default";
/**
* 主题库
*/
public static final String SUBJECT = "subject";
private static final ThreadLocal<String> dataSourceKey = new ThreadLocal<String>();
public static void setDataSourceKey(String dataSource) {
dataSourceKey.set(dataSource);
}
@Override
protected Object determineCurrentLookupKey() {
return dataSourceKey.get();
}
public static void clear(){
dataSourceKey.remove();
}
}
切换数据源
MultipleDataSource.setDataSourceKey(MultipleDataSource.DEFAULT);
网友评论