Чтобы создать новый Maven проект с нуля и добавить в него зависимость от tarantool-spring-data-32, выполните следующие шаги:
Используйте Maven Archetype Plugin для создания нового проекта. В этом примере мы создадим простой Java проект:
mvn archetype:generate -DgroupId=com.example -DartifactId=my-tarantool-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false-DgroupId=com.example: Укажите идентификатор группы для вашего проекта.-DartifactId=my-tarantool-app: Укажите идентификатор артефакта (имя проекта).-DarchetypeArtifactId=maven-archetype-quickstart: Используйте архетипmaven-archetype-quickstartдля создания простого Java проекта.-DinteractiveMode=false: Отключает интерактивный режим, чтобы не запрашивать подтверждение для каждого параметра.
После выполнения команды Maven создаст новый проект в директории my-tarantool-app. Перейдите в эту директорию:
cd my-tarantool-appОткройте файл pom.xml в текстовом редакторе и добавьте зависимость от tarantool-spring-data-32 в секцию <dependencies>:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-tarantool-app</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>io.tarantool</groupId>
<artifactId>tarantool-spring-data-32</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>Чтобы собрать проект и загрузить все зависимости, выполните команду:
mvn packageЭта команда скомпилирует проект и создаст JAR файл в директории target.
Теперь у вас есть новый Maven проект с зависимостью от tarantool-spring-data-32. Вы можете начать разработку, добавляя код в директорию src/main/java.
Если вы хотите запустить проект как исполняемый JAR файл, выполните следующую команду:
java -cp target/my-tarantool-app-1.0-SNAPSHOT.jar com.example.App-cp target/my-tarantool-app-1.0-SNAPSHOT.jar: Указывает путь к JAR файлу.com.example.App: Указывает полный путь к классу с методомmain.
Если вы хотите запустить проект через Maven (например, для удобства управления зависимостями), выполните:
mvn exec:java -Dexec.mainClass="com.example.App"-Dexec.mainClass="com.example.App": Указывает Maven, какой класс использовать в качестве точки входа.
Если все успешно, то вы увидете "Hello world" в ответе.
Перед тем как начать работать с кодом, необходимо запустить Tarantool DB с заранее подготовленным примером.
Откройте второй терминал и выполните следующие команды:
cd ~/lessons/tarantooldb_2x/examples/go_crud/tt
make start
Это запустит стенд Tarantool DB, который будет использоваться в ходе практики.
-
Добавьте код в класс
AppОткройте файл
App.javaв директорииsrc/main/java/com/exampleи замените его содержимое на следующий код:package com.example; import io.tarantool.client.crud.TarantoolCrudClient; import io.tarantool.client.crud.TarantoolCrudSpace; import io.tarantool.client.factory.TarantoolFactory; import java.util.Arrays; public class App { public static void main(String[] args) throws Exception { // Создание клиента для подключения к Tarantool TarantoolCrudClient client = TarantoolFactory.crud() .withUser("admin") .withPort(3501) .withPassword("secret-cluster-cookie") .build(); // Получение доступа к пространству данных "test" TarantoolCrudSpace space = client.space("test"); // Выполнение операции замены данных в пространстве System.out.println( space.replace( Arrays.asList(1, null, 1, "artyom") ).join() ); // Закрытие клиента client.close(); } }
replace: Эта операция заменяет объект в пространстве данных Tarantool, Она используется, чтобы можно было перезапускать проект несколько раз и получать одинаковый результат.
-
Соберите проект
Выполните команду Maven для сборки проекта и загрузки всех зависимостей:
mvn package
-
Запустите проект
-
Через Maven:
mvn exec:java -Dexec.mainClass="com.example.App"
-
Ответ должен быть каким то таким Tuple(formatId = null, data = [1, 12477, 1, artyom], format = [])"
Чтобы добавить новый код сразу после предыдущего System.out.println, откройте файл App.java и добавьте новый блок кода:
// Выполнение операции замены объекта в пространстве
System.out.println(
space.replaceObject(
Map.of(
"id", 2,
"too", 2,
"foo", "dima"
)
).join()
);replaceObject: Эта операция заменяет объект в пространстве данных Tarantool, используя карту (Map) для передачи значений полей. В данном случае используетсяMap.ofдля создания неизменяемой карты с полямиid,tooиfoo.join(): Методjoin()используется для ожидания завершения асинхронной операции и получения результата.- Не забудьте добавить import нужных классов
Чтобы добавить новый код после второго System.out.println, откройте файл App.java и добавьте новый блок кода:
// Создание условия для выборки и выполнение операции выборки
Condition condition = Condition.create("==", "id", 2);
System.out.println(
space.select(condition).join()
);Condition.create("==", "id", 2): Создает условие для выборки записей из пространства, где полеidравно 2.space.select(condition): Выполняет операцию выборки записей, соответствующих указанному условию.join(): Методjoin()используется для ожидания завершения асинхронной операции и получения результата.- Не забудьте добавить import нужных классов
После добавления кода, выполните сборку и запуск проекта, чтобы убедиться, что все работает корректно.
Чтобы добавить новый код после третьего System.out.println, откройте файл App.java и добавьте новый блок кода:
// Выполнение Lua-кода с использованием eval
String evalString = "local res, err = crud.select(...)";
evalString = evalString + "; return crud.unflatten_rows(res.rows, res.metadata)";
System.out.println(
client.eval(
evalString,
// аргументы, передающиеся в lua код в ...
Arrays.asList(
"test",
Arrays.asList(
Arrays.asList("==", "id", 1)
)
),
//
// первый List обозначает multireturn lua ответа
// пример "return 1,2,3" , тогда этот первый список будет состоять из этих 3 элементов
new TypeReference<List<List<Map<?,?>>>>(){}
).join()
);evalString: Содержит Lua-код, который будет выполнен на сервере Tarantool. Код выполняет выборку с использованиемcrud.selectи затем "разворачивает" строки с помощьюcrud.unflatten_rows.client.eval(...): Выполняет Lua-код на сервере Tarantool. Аргументы передаются в виде списка, который соответствует параметрам, ожидаемым Lua-функцией.TypeReference: Используется для указания типа данных, ожидаемых в ответе от Lua-кода. В данном случае ожидается список списков карт.
После добавления кода, выполните сборку и запуск проекта, чтобы убедиться, что все работает корректно.
Вот как будет выглядеть обновленный класс App:
package com.example;
import io.tarantool.client.crud.TarantoolCrudClient;
import io.tarantool.client.crud.TarantoolCrudSpace;
import io.tarantool.client.factory.TarantoolFactory;
import io.tarantool.client.crud.conditions.Condition;
import com.fasterxml.jackson.core.type.TypeReference;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
public class App {
public static void main(String[] args) throws Exception {
// Создание клиента для подключения к Tarantool
TarantoolCrudClient client = TarantoolFactory.crud()
.withUser("admin")
.withPort(3501)
.withPassword("secret-cluster-cookie")
.build();
// Получение доступа к пространству данных "test"
TarantoolCrudSpace space = client.space("test");
// Выполнение операции замены данных в пространстве
System.out.println(
space.replace(
Arrays.asList(1, null, 1, "artyom")
).join()
);
// Выполнение операции замены объекта в пространстве
System.out.println(
space.replaceObject(
Map.of(
"id", 2,
"too", 2,
"foo", "dima"
)
).join()
);
// Создание условия для выборки и выполнение операции выборки
Condition condition = Condition.create("==", "id", 2);
System.out.println(
space.select(condition).join()
);
// Выполнение Lua-кода с использованием eval
String evalString = "local res, err = crud.select(...)";
evalString = evalString + "; return crud.unflatten_rows(res.rows, res.metadata)";
System.out.println(
client.eval(
evalString,
// аргументы, передающиеся в lua код в ...
Arrays.asList(
"test",
Arrays.asList(
Arrays.asList("==", "id", 1)
)
),
//
// первый List обозначает multireturn lua ответа
// пример "return 1,2,3" , тогда этот первый список будет состоять из этих 3 элементов
new TypeReference<List<List<Map<?,?>>>>(){}
).join()
);
// Закрытие клиента
client.close();
}
}Для самостоятельной работы предполагается добавить ещё 2 записи объектов:
- Добавить объект POJO как List
- Добавить объект POJO как Map В качестве референса можно использовать примеры записи POJO в спейс person из лонгрида.