surrealdb / surrealdb.java

SurrealDB SDK for Java
https://surrealdb.com
Apache License 2.0
67 stars 21 forks source link

Is there any way to user it by Spring Boot? #4

Closed TokgoRonin closed 1 year ago

TokgoRonin commented 2 years ago

i want use it like a spring boot starter, just write some configuration. Now every operation on the database has to re-establish the connection, set namespace and databse, it's too redundant. I want to use it just like datasorce, as a bean for spring.

coder966 commented 1 year ago

A Spring Boot Starter is coming soon.

Meanwhile you can define a bean for the driver object and inject it in your service layer.

1- Add SurrealDB server details to your application.properties or application.yml

# The names can be anything, but change them in SurrealDbConfig
surrealdb.host=localhost
surrealdb.port=8000
surrealdb.use-tls=false
surrealdb.username=root
surrealdb.password=root
surrealdb.namespace=test
surrealdb.database=test

2- Configure a bean for SurrealDB driver

@Slf4j
@Configuration
public class SurrealDbConfig {

    @Bean
    public SyncSurrealDriver newSyncSurrealDriverBean(
            @Value("${surrealdb.host}") String host,
            @Value("${surrealdb.port}") int port,
            @Value("${surrealdb.use-tls}") boolean useTls,
            @Value("${surrealdb.username}") String username,
            @Value("${surrealdb.password}") String password,
            @Value("${surrealdb.namespace}") String namespace,
            @Value("${surrealdb.database}") String database
    ){
        log.info("Trying to connect to SurrealDB server ...");

        // setup connection
        SurrealConnection connection = new SurrealWebSocketConnection(host, port, useTls);
        connection.connect(10);

        // setup driver
        SyncSurrealDriver driver = new SyncSurrealDriver(connection);
        driver.signIn(username, password);
        driver.use(namespace, database);

        log.info("Connected Successfully");

        return driver;
    }

}

2- Inject the driver and use it

package com.example.demo.person;

import com.surrealdb.driver.SyncSurrealDriver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class PersonService {

    @Autowired
    private SyncSurrealDriver surreal;

    public List<Person> getAll() {
        return surreal.select("person", Person.class);
    }

    public Person createNew(NewPersonDto dto) {
        Person newPerson = new Person();
        newPerson.setName(dto.getName());
        newPerson.setAge(dto.getAge());

        return surreal.create("person", newPerson);
    }
}

For a complete example, see the example repo I just created.

Note: Please get the latest JAR from here https://github.com/coder966/surrealdb.java-wip/releases/tag/v0.1.0 until this PR gets merged.

TokgoRonin commented 1 year ago

A Spring Boot Starter is coming soon.

Meanwhile you can define a bean for the driver object and inject it in your service layer.

1- Add SurrealDB server details to your application.properties or application.yml

# The names can be anything, but change them in SurrealDbConfig
surrealdb.host=localhost
surrealdb.port=8000
surrealdb.use-tls=false
surrealdb.username=root
surrealdb.password=root
surrealdb.namespace=test
surrealdb.database=test

2- Configure a bean for SurrealDB driver

@Slf4j
@Configuration
public class SurrealDbConfig {

    @Bean
    public SyncSurrealDriver newSyncSurrealDriverBean(
            @Value("${surrealdb.host}") String host,
            @Value("${surrealdb.port}") int port,
            @Value("${surrealdb.use-tls}") boolean useTls,
            @Value("${surrealdb.username}") String username,
            @Value("${surrealdb.password}") String password,
            @Value("${surrealdb.namespace}") String namespace,
            @Value("${surrealdb.database}") String database
    ){
        log.info("Trying to connect to SurrealDB server ...");

        // setup connection
        SurrealConnection connection = new SurrealWebSocketConnection(host, port, useTls);
        connection.connect(10);

        // setup driver
        SyncSurrealDriver driver = new SyncSurrealDriver(connection);
        driver.signIn(username, password);
        driver.use(namespace, database);

        log.info("Connected Successfully");

        return driver;
    }

}

2- Inject the driver and use it

package com.example.demo.person;

import com.surrealdb.driver.SyncSurrealDriver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class PersonService {

    @Autowired
    private SyncSurrealDriver surreal;

    public List<Person> getAll() {
        return surreal.select("person", Person.class);
    }

    public Person createNew(NewPersonDto dto) {
        Person newPerson = new Person();
        newPerson.setName(dto.getName());
        newPerson.setAge(dto.getAge());

        return surreal.create("person", newPerson);
    }
}

For a complete example, see the example repo I just created.

Note: Please get the latest JAR from here https://github.com/coder966/surrealdb.java-wip/releases/tag/v0.1.0 until this PR gets merged.

thanks!