从存储中选择数据时,抛出异常'Procedure 'ddl.get_schema' is not defined'

时间:2021-06-29 03:33:52

标签: java tarantool

我创建了用户空间:

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 

可能是什么问题?

1 个答案:

答案 0 :(得分:1)

cartridge-java 驱动程序需要空间和索引架构用于验证和其他目的。目前,在建立连接后立即获取必要的元数据。由于连接初始化是惰性的,它实际上发生在对 Tarantool 服务器的第一个请求上。

驱动程序允许连接到独立的 Tarantool 副本集和 Tarantool Cartridge 集群。您似乎正在使用独立的 Tarantool 实例。在这种情况下,所有与服务器的操作都应该直接与驱动程序连接的实例一起执行。因此,无需使用 ProxyTarantoolTupleClient,您可以简单地省略配置中 tarantoolClient 方法的重载。

driver's README 中提供了有关连接到集群和独立实例的更多信息。另请查看我们的 Pet Clinic example Tarantool。