Spring Boot 1 数据库多数据库用户
Posted
技术标签:
【中文标题】Spring Boot 1 数据库多数据库用户【英文标题】:Spring Boot 1 database multiple database users 【发布时间】:2019-10-28 11:48:53 【问题描述】:我目前正在构建一个访问数据库的 RESTful API(使用 Spring Boot)。此应用程序最终将托管在服务器上。
我想做的事:
-
为数据库配置多个用户,并分配他们
对不同表格的不同权限
根据调用的端点,使用特定用户在该函数中执行查询
我该如何配置上面的应用程序?
目前我找到的答案涉及到配置多个数据源,但是对于上面的应用,只有一个数据源,但是有多个用户。
我已阅读以下链接,但仍在努力理解它
https://kimrudolph.de/blog/spring-datasource-routing
我是否使用相同的 URL(在本例中为 jdbcURL)配置多个数据源,并为每个角色配置多组用户名和密码?
谢谢!
【问题讨论】:
关于您的问题:是的,我会这样做。 【参考方案1】:你已经找到了完成这项任务的最佳方法,我的意思是AbstractRoutingDataSource
。如果您有固定数量的用户,这是您可以使用以下方法的最简单方法:
public final class RoutingDataSource extends AbstractRoutingDataSource
@Override
protected Object determineCurrentLookupKey()
return UserContextHolder.getUserName() + "DataSource";
及配置:
@Bean
@Qualifier("user1DataSource")
public DataSource userOneDataSource()
return DataSourceBuilder.create()
.username("user1")
.password("pass")
...
.build();
@Bean
@Qualifier("user2DataSource")
public DataSource userOneDataSource()
return DataSourceBuilder.create()
.username("user2")
...
.build();
@Bean
@Primary
public RoutingDataSource dataSource(Map<String, DataSource> datasources)
return new RoutingDataSource().dataSource(datasources);
如果您需要在运行时添加用户和数据源,您可以使用如下方式:
public final class RoutingDataSource extends AbstractRoutingDataSource
private final ConcurrentHashMap<String, DataSource> dynamicDataSources = new ConcurrentHashMap<>();
@Override
protected Object determineCurrentLookupKey()
return UserContextHolder.getUserName() + "_datasource";
@Override
protected DataSource determineTargetDataSource()
String currentLookupKey = this.determineCurrentLookupKey().toString();
String userName = UserContextHolder.getUserName();
String password = UserContextHolder.getPassword();
return this.dynamicDataSources.computeIfAbsent(currentLookupKey, (key) -> DataSourceBuilder.create()
.driverClassName("your.driver.class")
.url("jdbc:same:url/here")
.username(userName)
.password(password)
.build());
【讨论】:
以上是关于Spring Boot 1 数据库多数据库用户的主要内容,如果未能解决你的问题,请参考以下文章