diff --git a/pom.xml b/pom.xml index c7028710..5b4982f5 100644 --- a/pom.xml +++ b/pom.xml @@ -60,6 +60,7 @@ functional spark spring + spring-boot tx distexec clusterexec diff --git a/spring-boot/README.md b/spring-boot/README.md new file mode 100644 index 00000000..1efe3fe6 --- /dev/null +++ b/spring-boot/README.md @@ -0,0 +1,3 @@ +### Instructions + +Just invoke `mvn install spring-boot:run` diff --git a/spring-boot/pom.xml b/spring-boot/pom.xml new file mode 100644 index 00000000..cb72bd45 --- /dev/null +++ b/spring-boot/pom.xml @@ -0,0 +1,53 @@ + + + 4.0.0 + infinispan-simple-tutorials-spring-boot + + ../pom.xml + 1.0.0-SNAPSHOT + org.infinispan.tutorial.simple + infinispan-simple-tutorials + + + Infinispan Simple Tutorials: Spring Boot + + + 1.4.0.RELEASE + 1.0.0.Alpha1 + + + + + + org.springframework.boot + spring-boot-starter-parent + ${spring-boot.version} + pom + import + + + + + + + org.infinispan + inifinispan-spring-boot-starter + ${infinispan.starters.version} + + + org.infinispan + infinispan-core + + + + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring-boot.version} + + + + diff --git a/spring-boot/src/main/java/org/infinispan/tutorial/simple/spring/SpringBootApp.java b/spring-boot/src/main/java/org/infinispan/tutorial/simple/spring/SpringBootApp.java new file mode 100644 index 00000000..08f86b03 --- /dev/null +++ b/spring-boot/src/main/java/org/infinispan/tutorial/simple/spring/SpringBootApp.java @@ -0,0 +1,69 @@ +package org.infinispan.tutorial.simple.spring; + +import java.lang.invoke.MethodHandles; + +import org.infinispan.Cache; +import org.infinispan.configuration.cache.CacheMode; +import org.infinispan.configuration.cache.Configuration; +import org.infinispan.configuration.cache.ConfigurationBuilder; +import org.infinispan.configuration.global.GlobalConfigurationBuilder; +import org.infinispan.manager.EmbeddedCacheManager; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Bean; + +import infinispan.autoconfigure.embedded.InfinispanCacheConfigurer; +import infinispan.autoconfigure.embedded.InfinispanGlobalConfigurer; + +/** + * This example shows how to configure Spring Boot and Infinispan + * + *

It is recommended to use -Djava.net.preferIPv4Stack=true for running multiple instances

+ */ +@SpringBootApplication +public class SpringBootApp { + + private static final String CACHE_NAME = "test"; + private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); + + /** + * This bean is optional but it shows how to inject {@link org.infinispan.configuration.global.GlobalConfiguration}. + */ + @Bean + public InfinispanGlobalConfigurer globalConfiguration() { + logger.info("Defining Global Configuration"); + return () -> GlobalConfigurationBuilder + .defaultClusteredBuilder() + .globalJmxStatistics().allowDuplicateDomains(true) + .build(); + } + + /** + * Here we inject {@link Configuration}. + */ + @Bean + public InfinispanCacheConfigurer cacheConfigurer() { + logger.info("Defining {} configuration", CACHE_NAME); + return manager -> { + Configuration ispnConfig = new ConfigurationBuilder() + .clustering().cacheMode(CacheMode.DIST_SYNC) + .build(); + + manager.defineConfiguration(CACHE_NAME, ispnConfig); + }; + } + + public static void main(String[] args) { + ApplicationContext ctx = SpringApplication.run(SpringBootApp.class, args); + + EmbeddedCacheManager cacheManager = ctx.getBean(EmbeddedCacheManager.class); + Cache cache = cacheManager.getCache(CACHE_NAME); + cache.put(System.currentTimeMillis(), "Infinispan"); + + logger.info("Values from Cache: {}", cache.entrySet()); + } + +}