Include guide and example of Spring Boot auto-configuration for Apache Geode & Pivotal GemFire.
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
/*
|
||||
* Copyright 2019 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
* or implied. See the License for the specific language governing
|
||||
* permissions and limitations under the License.
|
||||
*/
|
||||
package example.app.crm;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import org.apache.geode.cache.client.ClientRegionShortcut;
|
||||
import org.springframework.boot.ApplicationRunner;
|
||||
import org.springframework.boot.WebApplicationType;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.boot.builder.SpringApplicationBuilder;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.data.gemfire.config.annotation.EnableEntityDefinedRegions;
|
||||
|
||||
import example.app.crm.model.Customer;
|
||||
import example.app.crm.repo.CustomerRepository;
|
||||
|
||||
/**
|
||||
* Spring Boot application implementing a Customer Service.
|
||||
*
|
||||
* @author John Blum
|
||||
* @see org.springframework.boot.ApplicationRunner
|
||||
* @see org.springframework.boot.autoconfigure.SpringBootApplication
|
||||
* @see org.springframework.boot.builder.SpringApplicationBuilder
|
||||
* @see org.springframework.data.gemfire.config.annotation.EnableEntityDefinedRegions
|
||||
* @since 1.0.0
|
||||
*/
|
||||
// tag::class[]
|
||||
@SpringBootApplication
|
||||
@EnableEntityDefinedRegions(basePackageClasses = Customer.class, clientRegionShortcut = ClientRegionShortcut.LOCAL)
|
||||
public class CustomerServiceApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
new SpringApplicationBuilder(CustomerServiceApplication.class)
|
||||
.web(WebApplicationType.NONE)
|
||||
.build()
|
||||
.run(args);
|
||||
}
|
||||
|
||||
@Bean
|
||||
ApplicationRunner runner(CustomerRepository customerRepository) {
|
||||
|
||||
return args -> {
|
||||
|
||||
assertThat(customerRepository.count()).isEqualTo(0);
|
||||
|
||||
Customer jonDoe = Customer.newCustomer(1L, "Jon Doe");
|
||||
|
||||
System.err.printf("Saving Customer [%s]%n", jonDoe);
|
||||
|
||||
jonDoe = customerRepository.save(jonDoe);
|
||||
|
||||
assertThat(jonDoe).isNotNull();
|
||||
assertThat(jonDoe.getId()).isEqualTo(1L);
|
||||
assertThat(jonDoe.getName()).isEqualTo("Jon Doe");
|
||||
assertThat(customerRepository.count()).isEqualTo(1);
|
||||
|
||||
System.err.println("Querying for Customer [SELECT * FROM /Customers WHERE name LIKE '%Doe']");
|
||||
|
||||
Customer queriedJonDoe = customerRepository.findByNameLike("%Doe");
|
||||
|
||||
assertThat(queriedJonDoe).isEqualTo(jonDoe);
|
||||
|
||||
System.err.printf("Customer was [%s]%n", queriedJonDoe);
|
||||
};
|
||||
}
|
||||
}
|
||||
// end::class[]
|
||||
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
* Copyright 2019 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
* or implied. See the License for the specific language governing
|
||||
* permissions and limitations under the License.
|
||||
*/
|
||||
package example.app.crm.model;
|
||||
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
import lombok.NonNull;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.ToString;
|
||||
|
||||
import org.springframework.data.annotation.Id;
|
||||
import org.springframework.data.gemfire.mapping.annotation.Region;
|
||||
|
||||
/**
|
||||
* An Abstract Data Type (ADT) modeling a {@literal Customer}.
|
||||
*
|
||||
* @author John Blum
|
||||
* @see org.springframework.data.annotation.Id
|
||||
* @see org.springframework.data.gemfire.mapping.annotation.Region
|
||||
* @since 1.0.0
|
||||
*/
|
||||
// tag::class[]
|
||||
@Region("Customers")
|
||||
@EqualsAndHashCode
|
||||
@ToString(of = "name")
|
||||
@RequiredArgsConstructor(staticName = "newCustomer")
|
||||
public class Customer {
|
||||
|
||||
@Id @NonNull @Getter
|
||||
private Long id;
|
||||
|
||||
@NonNull @Getter
|
||||
private String name;
|
||||
|
||||
}
|
||||
// end::class[]
|
||||
@@ -0,0 +1,38 @@
|
||||
/*
|
||||
* Copyright 2019 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
* or implied. See the License for the specific language governing
|
||||
* permissions and limitations under the License.
|
||||
*/
|
||||
package example.app.crm.repo;
|
||||
|
||||
import org.springframework.data.repository.CrudRepository;
|
||||
|
||||
import example.app.crm.model.Customer;
|
||||
|
||||
/**
|
||||
* Data Access Object (DAO) used to perform basic CRUD and simple query operations on {@link Customer} objects
|
||||
* store in Apache Geode
|
||||
*
|
||||
* @author John Blum
|
||||
* @see java.lang.Long
|
||||
* @see org.springframework.data.repository.CrudRepository
|
||||
* @see example.app.crm.model.Customer
|
||||
* @since 1.0.0
|
||||
*/
|
||||
// tag::class[]
|
||||
public interface CustomerRepository extends CrudRepository<Customer, Long> {
|
||||
|
||||
Customer findByNameLike(String name);
|
||||
|
||||
}
|
||||
// end::class[]
|
||||
@@ -0,0 +1 @@
|
||||
spring.data.gemfire.cache.log-level=error
|
||||
@@ -0,0 +1,4 @@
|
||||
# Gfsh shell script to start a simple GemFire/Geode cluster
|
||||
|
||||
start locator --name=LocatorOne --log-level=config
|
||||
start server --name=ServerOne --log-level=config
|
||||
@@ -0,0 +1,3 @@
|
||||
#!/bin/bash
|
||||
|
||||
gfsh -e "run --file=/Users/jblum/pivdev/spring-boot-data-geode/spring-geode-samples/boot/configuration/src/main/resources/geode/bin/start-simple-cluster.gfsh"
|
||||
@@ -0,0 +1,4 @@
|
||||
# Gfsh shell script to stop the cluster
|
||||
|
||||
stop server --name=ServerOne
|
||||
stop locator --name=LocatorOne
|
||||
@@ -0,0 +1,3 @@
|
||||
#!/bin/bash
|
||||
|
||||
gfsh -e "run --file=/Users/jblum/pivdev/spring-boot-data-geode/spring-geode-samples/boot/configuration/src/main/resources/geode/bin/stop-cluster.gfsh"
|
||||
@@ -0,0 +1,4 @@
|
||||
# java.util.logging (JUL) configuration
|
||||
|
||||
org.apache=ERROR
|
||||
org.springframework=ERROR
|
||||
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Configuration status="error">
|
||||
|
||||
<Appenders>
|
||||
<Console name="Console" target="SYSTEM_OUT">
|
||||
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{1.} - %msg%n"/>
|
||||
</Console>
|
||||
<File name="File" fileName="build/logs/spring-test.log">
|
||||
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{1.} - %msg%n"/>
|
||||
</File>
|
||||
<Null name="nop"/>
|
||||
</Appenders>
|
||||
|
||||
<Loggers>
|
||||
<Logger name="org.apache" level="error"/>
|
||||
<Logger name="org.springframework" level="error"/>
|
||||
<Root level="error">
|
||||
<AppenderRef ref="Console"/>
|
||||
<!--AppenderRef ref="File" /-->
|
||||
</Root>
|
||||
</Loggers>
|
||||
|
||||
</Configuration>
|
||||
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration debug="false">
|
||||
|
||||
<statusListener class="ch.qos.logback.core.status.NopStatusListener"/>
|
||||
|
||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>%d %5p %40.40c:%4L - %m%n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<logger name="ch.qos.logback" level="${logback.log.level:-ERROR}"/>
|
||||
|
||||
<logger name="org.apache" level="${logback.log.level:-ERROR}"/>
|
||||
|
||||
<logger name="org.springframework" level="${logback.log.level:-ERROR}"/>
|
||||
|
||||
<root level="${logback.log.level:-ERROR}">
|
||||
<appender-ref ref="console"/>
|
||||
</root>
|
||||
|
||||
</configuration>
|
||||
Reference in New Issue
Block a user