diff --git a/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/autoconfigure/CachingAutoConfiguration.java b/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/autoconfigure/CachingAutoConfiguration.java new file mode 100644 index 00000000000..dc0bced56a8 --- /dev/null +++ b/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/autoconfigure/CachingAutoConfiguration.java @@ -0,0 +1,53 @@ +/* + * Copyright 2012-2014 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 + * + * http://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 org.springframework.boot.cli.compiler.autoconfigure; + +import org.codehaus.groovy.ast.ClassNode; +import org.codehaus.groovy.control.CompilationFailedException; +import org.codehaus.groovy.control.customizers.ImportCustomizer; + +import org.springframework.boot.cli.compiler.AstUtils; +import org.springframework.boot.cli.compiler.CompilerAutoConfiguration; +import org.springframework.boot.cli.compiler.DependencyCustomizer; + +/** + * {@link CompilerAutoConfiguration} for the caching infrastructure. + * + * @author Stephane Nicoll + * @since 1.2.0 + */ +public class CachingAutoConfiguration extends CompilerAutoConfiguration { + + @Override + public boolean matches(ClassNode classNode) { + return AstUtils.hasAtLeastOneAnnotation(classNode, "EnableCaching"); + } + + @Override + public void applyDependencies(DependencyCustomizer dependencies) + throws CompilationFailedException { + dependencies.add("spring-context-support"); + + } + + @Override + public void applyImports(ImportCustomizer imports) throws CompilationFailedException { + imports.addStarImports("org.springframework.cache", + "org.springframework.cache.annotation", "org.springframework.cache.concurrent"); + } + +} diff --git a/spring-boot-cli/src/main/resources/META-INF/services/org.springframework.boot.cli.compiler.CompilerAutoConfiguration b/spring-boot-cli/src/main/resources/META-INF/services/org.springframework.boot.cli.compiler.CompilerAutoConfiguration index ef71edacafd..c291bf53ffb 100644 --- a/spring-boot-cli/src/main/resources/META-INF/services/org.springframework.boot.cli.compiler.CompilerAutoConfiguration +++ b/spring-boot-cli/src/main/resources/META-INF/services/org.springframework.boot.cli.compiler.CompilerAutoConfiguration @@ -4,6 +4,7 @@ org.springframework.boot.cli.compiler.autoconfigure.SpringMvcCompilerAutoConfigu org.springframework.boot.cli.compiler.autoconfigure.SpringBatchCompilerAutoConfiguration org.springframework.boot.cli.compiler.autoconfigure.RabbitCompilerAutoConfiguration org.springframework.boot.cli.compiler.autoconfigure.ReactorCompilerAutoConfiguration +org.springframework.boot.cli.compiler.autoconfigure.CachingAutoConfiguration org.springframework.boot.cli.compiler.autoconfigure.JdbcCompilerAutoConfiguration org.springframework.boot.cli.compiler.autoconfigure.JmsCompilerAutoConfiguration org.springframework.boot.cli.compiler.autoconfigure.JUnitCompilerAutoConfiguration diff --git a/spring-boot-cli/src/test/java/org/springframework/boot/cli/ReproIntegrationTests.java b/spring-boot-cli/src/test/java/org/springframework/boot/cli/ReproIntegrationTests.java index bc2fd35928a..59c16df65e9 100644 --- a/spring-boot-cli/src/test/java/org/springframework/boot/cli/ReproIntegrationTests.java +++ b/spring-boot-cli/src/test/java/org/springframework/boot/cli/ReproIntegrationTests.java @@ -78,4 +78,10 @@ public class ReproIntegrationTests { this.cli.run("jms.groovy"); assertThat(this.cli.getOutput(), containsString("Hello World")); } + + @Test + public void caching() throws Exception { + this.cli.run("caching.groovy"); + assertThat(this.cli.getOutput(), containsString("Hello World")); + } } diff --git a/spring-boot-cli/src/test/resources/repro-samples/caching.groovy b/spring-boot-cli/src/test/resources/repro-samples/caching.groovy new file mode 100644 index 00000000000..bbabf037019 --- /dev/null +++ b/spring-boot-cli/src/test/resources/repro-samples/caching.groovy @@ -0,0 +1,47 @@ +package org.test + +import java.util.concurrent.atomic.AtomicLong + +@Configuration +@EnableCaching +class Sample { + + @Bean CacheManager cacheManager() { + new ConcurrentMapCacheManager() + } + + @Component + static class MyClient implements CommandLineRunner { + + private final MyService myService + + @Autowired + MyClient(MyService myService) { + this.myService = myService + } + + void run(String... args) { + long counter = myService.get('someKey') + long counter2 = myService.get('someKey') + if (counter == counter2) { + println 'Hello World' + } else { + println 'Something went wrong with the cache setup' + } + + } + } + + @Component + static class MyService { + + private final AtomicLong counter = new AtomicLong() + + @Cacheable('foo') + Long get(String id) { + return counter.getAndIncrement() + } + + } + +} \ No newline at end of file diff --git a/spring-boot-docs/src/main/asciidoc/spring-boot-cli.adoc b/spring-boot-docs/src/main/asciidoc/spring-boot-cli.adoc index 8075b850993..4c1f272969f 100644 --- a/spring-boot-docs/src/main/asciidoc/spring-boot-cli.adoc +++ b/spring-boot-docs/src/main/asciidoc/spring-boot-cli.adoc @@ -113,9 +113,12 @@ The following items are used as ``grab hints'': |`JdbcTemplate`, `NamedParameterJdbcTemplate`, `DataSource` |JDBC Application. -|`@EnableJmsMessaging` +|`@EnableJms` |JMS Application. +|`@EnableCaching` +|Caching abstraction. + |`@Test` |JUnit.