从存储中选择数据时,抛出异常 'Procedure 'ddl.get_schema' is not defined'
when selecting data from the storage, an exception is thrown 'Procedure 'ddl.get_schema' is not defined'
我创建了用户 space:
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
可能是什么问题?
cartridge-java
驱动程序需要空间和索引模式来进行验证和其他目的。目前,必要的元数据是在建立连接后立即获取的。由于连接初始化是惰性的,它实际上发生在对 Tarantool 服务器的第一个请求上。
驱动程序允许连接到独立的 Tarantool 副本集和 Tarantool Cartridge 集群。看来您使用的是独立的 Tarantool 实例。在这种情况下,与服务器的所有操作都应直接与驱动程序连接到的实例一起执行。所以,没有必要使用ProxyTarantoolTupleClient
,你可以简单地在配置中省略tarantoolClient
方法的重载。
有关连接到集群和独立实例的更多信息,请参阅 driver's README. Check out also our Pet Clinic example for Tarantool。
我创建了用户 space:
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
可能是什么问题?
cartridge-java
驱动程序需要空间和索引模式来进行验证和其他目的。目前,必要的元数据是在建立连接后立即获取的。由于连接初始化是惰性的,它实际上发生在对 Tarantool 服务器的第一个请求上。
驱动程序允许连接到独立的 Tarantool 副本集和 Tarantool Cartridge 集群。看来您使用的是独立的 Tarantool 实例。在这种情况下,与服务器的所有操作都应直接与驱动程序连接到的实例一起执行。所以,没有必要使用ProxyTarantoolTupleClient
,你可以简单地在配置中省略tarantoolClient
方法的重载。
有关连接到集群和独立实例的更多信息,请参阅 driver's README. Check out also our Pet Clinic example for Tarantool。