提问人:hido 提问时间:11/6/2023 更新时间:11/6/2023 访问量:23
Spring Boot 在每次查询之前设置 postgresql 连接变量
Spring boot set postgresql connection variable before each query
问:
我正在使用 Spring boot、Spring data、Postgresql 和 hikariCP 来管理我的应用程序实体和查询。
我正在使用Spring boot存储库查询数据库,并且存储库中的查询/命名函数并不总是带有注释。@Transactional
在我的数据库中,我有一个具有行级安全性的表。行级安全性使用如下所示的会话变量:Employee
create policy employee_rls on Employee for select to public using (manager_id = CAST(current_setting('user_id') as integer));
我怎样才能做到,在每次从我的应用程序连接到数据库之前,我都会在连接上设置一个会话变量,并在连接关闭后清除它?连接变量应来自调用的@autowired服务,即使没有事务查询,也应该发生连接变量。UserService
答:
0赞
Lee Greiner
11/6/2023
#1
您想研究创建一个自定义 .请参阅此内容,了解使用 实现多租户 的解决方案。基本上,您可以使用要初始化连接的用户 ID 在本地设置一个线程,当从数据源获取连接时,自定义数据源将执行 SET。如果未设置线程本地,并且获取了自定义数据源的连接,则将通过 RESET 清除用户 ID。DataSource
ThreadLocal
您说用户 ID 的值是从 获取的。您可以将此服务注入到自定义数据源中。你没有提到如何使用它。UserService
评论