Creating a Simple Spring Boot @Cacheable Cache using JBoss DataGrid on top of Openshift
Creating a Simple Spring Boot @Cacheable Cache using JBoss DataGrid on top of Openshift
Several days ago, one of my team member were asking me on how to connect Spring Boot to JBoss Datagrid as its primary cache server. Since we are using Openshift, im using Openshift template “Red Hat JBoss Data Grid 7.2 (Ephemeral, no https)” as base image deployment.
First we need to create instance of Datagrid on Openshift,
And finally, we can see our JBoss Datagrid endpoint here, and fyi we are using HotRod protocol to connect to JDG so our endpoint name should be “jdg-datagrid-app-01-hotrod” with port “11333”.
And start our project by creating a pom.xml
<?xml version="1.0" encoding="UTF-8"?> <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> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.7.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.edw</groupId> <artifactId>TestingJDGCacheable</artifactId> <version>1.0</version> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.infinispan</groupId> <artifactId>infinispan-client-hotrod</artifactId> <version>8.4.0.Final-redhat-2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <profiles> <profile> <id>openshift</id> <build> <plugins> <plugin> <groupId>io.fabric8</groupId> <artifactId>fabric8-maven-plugin</artifactId> <version>3.5.28</version> <executions> <execution> <id>fmp</id> <phase>package</phase> <goals> <goal>resource</goal> <goal>build</goal> </goals> </execution> </executions> <configuration> <generator> <config> <spring-boot> <fromMode>isTag</fromMode> <from>redhat-openjdk18-openshift:1.2</from> </spring-boot> </config> </generator> </configuration> </plugin> </plugins> </build> </profile> </profiles> <repositories> <repository> <id>jboss</id> <url>https://repository.jboss.org/nexus/content/groups/public-jboss/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <id>redhat-techpreview</id> <name>Red Hat Tech Preview</name> <url>https://maven.repository.redhat.com/techpreview/all/</url> <layout>default</layout> <releases> <enabled>true</enabled> <updatePolicy>never</updatePolicy> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <id>redhat-ga</id> <name>Red Hat GA</name> <url>https://maven.repository.redhat.com/ga/</url> <layout>default</layout> <releases> <enabled>true</enabled> <updatePolicy>never</updatePolicy> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>jboss-plugins</id> <url>https://repository.jboss.org/nexus/content/groups/public-jboss/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> <pluginRepository> <id>redhat-techpreview</id> <url>https://maven.repository.redhat.com/techpreview/all/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> <pluginRepository> <id>redhat-ga</id> <url>https://maven.repository.redhat.com/ga/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> </pluginRepositories> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
After that, we can create our Spring Boot project, and start with a main java class,
@SpringBootApplication @EnableCaching public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
Register your JBoss Datagrid cache
@Configuration public class CacheConfig { @Bean public RemoteCacheManager remoteCacheManager() { ConfigurationBuilder builder = new ConfigurationBuilder(); builder.addServers("jdg-datagrid-app-01-hotrod:11333"); return new RemoteCacheManager(builder.build()); } }
And a simple controller where our cache will be used, as on below code we are using “bakerooo” cache.
@RestController public class IndexController { @GetMapping("/") @Cacheable("bakerooo") public Long getNow() { return System.currentTimeMillis(); } }
We can deploy our code by using maven’s fabric8 plugin,
mvn clean package fabric8:deploy
And test it by using a simple curl command.
Feel free to ask question, and you can download the full code at my github repo here.