如何解决我必须在基于 Spring MVC 的 Web 应用程序中添加 Springboot 动态数据源实现
我在 Springboot 中为我的客户端编写了一个小型多租户应用程序,它根据租户的请求动态切换数据库连接。我用过spring框架的AbstractRoutingDataSource API。
Class1:代码示例
public class CustomRoutingDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if(attr!=null) {
String tenantId = attr.getRequest().getParameter("tenantId");
return tenantId;
}else{
return "tenantId1";
}
}
}
第 2 类:示例代码
public class DataSourceMap {
public static Map<Object,Object> getDataSourceHashMap() {
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/db1);
dataSource.setUsername("root");
dataSource.setPassword("root");
DriverManagerDataSource dataSource1 = new DriverManagerDataSource();
dataSource1.setDriverClassName("com.mysql.jdbc.Driver");
dataSource1.setUrl("jdbc:mysql://localhost:3306/db2");
dataSource1.setUsername("root");
dataSource1.setPassword("root");
}
}
Tomcat/Server.xml
<GlobalNamingResources>
<Resource name="jdbc/my_datasource"
global="jdbc/my_datasource"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
auth="Container"
type="javax.sql.DataSource"
username="root"
password="root"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@//localhost:3306/myDB"
</Resource>
</GlobalNamingResources>
上面这段代码工作正常。
问题:我客户的应用程序是一个简单的基于 Spring MVC 的 Web 应用程序。他们使用基于 JNDI 的数据源查找来进行数据库连接。他们在提供数据源的地方使用 tomcat/server.xml entry of </GlobalNamingResources>
(参见上面的 tomcat 条目)。那么,如何在现有的基于Spring MVC的应用程序中使用上面的spring-boot Multitenancy代码呢?我必须保持旧的应用程序完好无损。我希望应用程序使用 DataSourceMap Class
返回的数据源连接对象,而不是它从 tomcat/server.xml
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。