gpt4 book ai didi

java - Spring 启动 : How to use multiple schemas and dynamically choose which one to use for every request at runtime

转载 作者:行者123 更新时间:2023-11-30 08:36:40 25 4
gpt4 key购买 nike

前提:我选择这样做是因为我最终可能会有几千个模式,每个模式(除其他外)有一个包含几百万个条目的表。替代方案是(除其他外)在一个模式中拥有一个包含数十亿个条目的表。

详细说明这个问题的最好方法是提供一个简单的例子。请考虑以下事项:

用户.java

@Entity(name = "user")
public class User {
@Id
@GeneratedValue
@Column(name = "id")
private Long id;

@Column(name = "username")
private String username;

// getters and setters...
}

用户道.java

@Repository
public interface UserDao extends CrudRepository<User, Long> {}

用户服务.java

public interface UserService {
User getUser(Long id);
}

用户服务Bean.java

@Transactional
@Service
public class UserServiceBean implements UserService {
@Autowired
private UserDao dao;

@Override
public User getUser(Long id) {
return dao.findOne(id);
}
}

用户 Controller .java

@RestController
public class UserController {

@Autowired
private UserService userService;

@RequestMapping(
value = "/api/users/{id}",
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<User> getUser(
@PathVariable("id") Long id) {

User user = userService.getUser(id);
return new ResponseEntity<User>(user, HttpStatus.OK);
}
}

我想扩展到以下功能:在 URL 中提供另一个 ID,以便从不同的表返回用户数据。

用户 Controller .java

...
@RequestMapping(
value = "/api/users/{id}",
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<User> getUser(
@PathVariable("id") Long id,
@RequestParam(value = "tlbid") Long tblId) {

User user = userService.getUser(id, tblId);
return new ResponseEntity<User>(user, HttpStatus.OK);
}

现在 UserService 将该 ID 解码为对 spring 有用的东西,以便从不同的表中获取数据。

用户服务Bean.java

    ...
public User getUser(Long id, Long tblId) {
Object o = doMagic(tblId);
// What should 'o' be and how could I use this?
}

所有表都具有相同的结构和名称,但条目不同。这些表必须位于不同的数据库中,或者位于同一数据库中但位于不同的架构中。

我想知道:

a) 我怎样才能拥有一个数据库连接并为每个请求指定不同的模式。

b) 如何在必要时创建新的数据库连接(我会为进一步的请求维护它们),并指定每次应该在哪个连接上发出请求。

c) 我的前提是错误的,表中有数十亿个条目,高并发性不会显着降低查询速度。

最佳答案

听起来您在描述 Multi-Tenancy 解决方案。参见 the Hibernate documentation有关如何对数据进行分区的详细说明和一些选项。

注意:我们目前正在尝试实现基于模式的 Multi-Tenancy 方法:)

关于java - Spring 启动 : How to use multiple schemas and dynamically choose which one to use for every request at runtime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37602272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com