我创建了用户空间:
s = box.schema.space.create('users')
s:format({
> {name = 'id', type = 'unsigned'},
> {name = 'user_name', type = 'string'},
> {name = 'age', type = 'unsigned'}
> })
我有实体用户:
@Tuple(spaceName = "users")
public class User {
@Id
private Long id;
@Field(name = "user_name")
private String name;
private Long age;
}
数据库连接设置:
@Configuration
@EnableTarantoolRepositories(basePackageClasses = UserRepository.class)
public class TarantoolConfiguration extends AbstractTarantoolDataConfiguration {
@Value("${tarantool.host}")
protected String host;
@Value("${tarantool.port}")
protected int port;
@Value("${tarantool.username}")
protected String username;
@Value("${tarantool.password}")
protected String password;
@Override
protected TarantoolServerAddress tarantoolServerAddress() {
return new TarantoolServerAddress(host, port);
}
@Override
public TarantoolCredentials tarantoolCredentials() {
return new SimpleTarantoolCredentials(username, password);
}
@Override
public TarantoolClient tarantoolClient(TarantoolClientConfig tarantoolClientConfig,
TarantoolClusterAddressProvider tarantoolClusterAddressProvider) {
return new ProxyTarantoolTupleClient(super.tarantoolClient(tarantoolClientConfig, tarantoolClusterAddressProvider));
}
}
还有一个端点只显示用户列表:
@GetMapping("/users")
public List<User> getUsers() {
return (List<User>) userRepository.findAll();
}
访问地址http://localhost:8080/users时抛出异常:
ERROR 2203 --- [nio-8080-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is io.tarantool.driver.exceptions.TarantoolClientException: Failed to refresh spaces and indexes metadata] with root cause
io.tarantool.driver.exceptions.TarantoolServerException: TarantoolServerException: code=32801, message=Procedure 'ddl.get_schema' is not defined
at
可能是什么问题?
答案 0 :(得分:1)
cartridge-java
驱动程序需要空间和索引架构用于验证和其他目的。目前,在建立连接后立即获取必要的元数据。由于连接初始化是惰性的,它实际上发生在对 Tarantool 服务器的第一个请求上。
驱动程序允许连接到独立的 Tarantool 副本集和 Tarantool Cartridge 集群。您似乎正在使用独立的 Tarantool 实例。在这种情况下,所有与服务器的操作都应该直接与驱动程序连接的实例一起执行。因此,无需使用 ProxyTarantoolTupleClient
,您可以简单地省略配置中 tarantoolClient
方法的重载。
driver's README 中提供了有关连接到集群和独立实例的更多信息。另请查看我们的 Pet Clinic example Tarantool。