Derby (JPA) #WIP#
https://github.com/spring-boot-tutorials/spring-data-derby-jpa
In this article we will configure Spring Boot to connect to a Derby database.
Derby Server
Run Derby database without saving to local filesystem:
docker run \
-p 1527:1527 \
-e DBNAME=testdb \
-e DERBY_USER=my_user \
-e DERBY_PASSWORD=my_password \
--name derby_instance \
adito/derby
Run Derby database while saving to local filesystem:
docker run \
-p 1527:1527 \
-e DBNAME=testdb \
-e DERBY_USER=my_user \
-e DERBY_PASSWORD=my_password \
-v $(pwd)/dbs:/dbs \
--name derby_instance \
adito/derby
Create Initial Code Base
Go to https://start.spring.io/
Click
Add Dependencies
, search forDerby
, then addClick
Add Dependencies
, search forLombok
, then addClick
Generate
Dependencies
Dependencies used in pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derbyclient</artifactId>
</dependency>
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
- <!– <scope>runtime</scope>–>
</dependency> <dependency>
<groupId>org.apache.derby</groupId> <artifactId>derbytools</artifactId>
- <!– <scope>runtime</scope>–>
</dependency> <dependency>
<groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional>
</dependency>
Properties
In src/main/resources/application.properties
let’s add the following properties so the Spring Boot application
can connect to the Cassandra database
# Increased timeout to fit slower environments like TravisCI
spring.couchbase.env.timeouts.view=15000
spring.couchbase.env.timeouts.query=15000
spring.couchbase.connection-string=couchbase://127.0.0.1
spring.couchbase.username=admin
spring.couchbase.password=password
spring.data.couchbase.bucket-name=travel-sample
spring.data.couchbase.auto-index=true
Configuration
Let’s create a file src/main/java/com/example/Couchbase/config/CouchbaseConfiguration.java
:
@Configuration
public class CouchbaseConfiguration {
@Autowired
CouchbaseTemplate couchbaseTemplate;
@Autowired
Cluster cluster;
/**
* Add the _class field to all Airline documents
*/
@PostConstruct
private void postConstruct() {
cluster.queryIndexes().createPrimaryIndex(
couchbaseTemplate.getBucketName(),
CreatePrimaryQueryIndexOptions.createPrimaryQueryIndexOptions().ignoreIfExists(true)
);
// Need to post-process travel data to add _class attribute
cluster.query("update `travel-sample` set _class='" + Airline.class.getName() + "' where type = 'airline'");
}
}
Model
Let’s create a new POJO src/main/java/com/example/cassandra/model/Airline.java
@Data
@Document
@SuperBuilder
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class Airline {
@Id
private String id;
private String name;
private String iata;
private String icao;
private String callsign;
private String country;
}
Repository
Next we will create a Spring repository to CRUD against the Couchbase database.
This file will be called src/main/java/com/example/Couchbase/repository/AirlineRepository.java
@Repository
public interface AirlineRepository extends CrudRepository<Airline, String> {
List<Airline> findByIata(String code);
}
Main
Now let’s use this repository.
Go back to CassandraApplication.java
and add the following:
...
@SpringBootApplication
public class CouchbaseApplication implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(CouchbaseApplication.class, args);
}
@Autowired
AirlineRepository airlineRepository;
@Override
public void run(String... args) throws Exception {
airlineRepository.deleteAll();
// 1. save
Airline airline = Instancio.create(Airline.class);
airline.setIata("iata");
airline = airlineRepository.save(airline);
System.out.println("1. " + airline);
// 2. saveAll
int count = 10;
var airlines = Instancio.ofList(Airline.class)
.size(count)
.create();
System.out.println("2. saveAll");
airlineRepository.saveAll(airlines)
.forEach(System.out::println);
// 3. Query Methods
System.out.println("3. query methods");
airlineRepository.findByIata("iata").forEach(System.out::println);
}
}
Run Application
Open terminal at project root and execute the following:
mvn spring-boot:run
There should be no errors and the output will display all the CRUD operations.