Partner – Microsoft – NPI (cat= Spring)
announcement - icon

Azure Spring Apps is a fully managed service from Microsoft (built in collaboration with VMware), focused on building and deploying Spring Boot applications on Azure Cloud without worrying about Kubernetes.

And, the Enterprise plan comes with some interesting features, such as commercial Spring runtime support, a 99.95% SLA and some deep discounts (up to 47%) when you are ready for production.

>> Learn more and deploy your first Spring Boot app to Azure.

You can also ask questions and leave feedback on the Azure Spring Apps GitHub page.

1. Overview

Spring comes with a set of @Enable annotations that make it easier for developers to configure a Spring application. These annotations are used in conjunction with the @Configuration annotation.

In this article we will be looking at some these annotations:

  • @EnableWebMvc
  • @EnableCaching
  • @EnableScheduling
  • @EnableAsync
  • @EnableWebSocket
  • @EnableJpaRepositories
  • @EnableTransactionManagement
  • @EnableJpaAuditing

2. @EnableWebMvc

The @EnableWebMvc annotation is used for enabling Spring MVC in an application and works by importing the Spring MVC Configuration from WebMvcConfigurationSupport.

The XML equivalent with similar functionality is <mvc:annotation-driven/>.

The configuration can be customized by the @Configuration class implementing the WebMvcConfigurer:

@Configuration
@EnableWebMvc
public class SpringMvcConfig implements WebMvcConfigurer {

    @Override
    public void configureMessageConverters(
      List<HttpMessageConverter<?>> converters) {
 
        converters.add(new MyHttpMessageConverter());
    }
 
    // ...
}

3. @EnableCaching

The @EnableCaching annotation enables annotation-driven cache management capability within the application and allows us to use the @Cacheable and @CacheEvict annotations in our application.

The XML equivalent with similar functionality is the <cache:*> namespace:

@Configuration
@EnableCaching
public class CacheConfig {
 
    @Bean
    public CacheManager cacheManager() {
        SimpleCacheManager cacheManager = new SimpleCacheManager();
        cacheManager.setCaches(
          Arrays.asList(new ConcurrentMapCache("default")));
        return cacheManager;
    }
}

This annotation also has the following options:

  • mode — indicates how caching advice should be applied
  • order — indicates the ordering of the execution caching advisor when applied at a specific joinpoint
  • proxyTargetClass — indicates whether subclass-based (CGLIB) proxies are to be created as opposed to standard Java interface-based proxies

This configuration again can be customized by the @Configuration class implementing the CachingConfigurerSupport class:

@Configuration
@EnableCaching
public class CacheConfig extends CachingConfigurerSupport {

    @Bean
    @Override
    public CacheManager cacheManager() {
        SimpleCacheManager cacheManager = new SimpleCacheManager();
        cacheManager.setCaches(
          Arrays.asList(new ConcurrentMapCache("default")));
        return cacheManager;
    }

    @Bean
    @Override
    public KeyGenerator keyGenerator() {
        return new MyKeyGenerator();
    }
}

For more on using Spring caching you can refer to this article.

4. @EnableScheduling

The @EnableScheduling annotation enables scheduled task capabilities and allows us to use @Scheduled annotations in the application. The XML equivalent with similar functionality is the <task:*> namespace using the scheduler attribute.

This configuration again can be customized by the @Configuration class implementing the SchedulingConfigurer class:

@Configuration
@EnableScheduling
public class SchedulingConfig implements SchedulingConfigurer {

    @Override
    public void configureTasks(
      ScheduledTaskRegistrar taskRegistrar) {
        taskRegistrar.setScheduler(taskExecutor());
    }

    @Bean(destroyMethod = "shutdown")
    public Executor taskExecutor() {
        return Executors.newScheduledThreadPool(100);
    }
}

For more on using Spring scheduling, you can refer to this article.

5. @EnableAsync

The @EnableAsync annotation enables asynchronous processing in our application. The XML equivalent with similar functionality is the <task:*> namespace using the executor attribute.

@Configuration
@EnableAync
public class AsyncConfig { ... }

For more on using Spring async, you can refer to this article.

6. @EnableWebSocket

The @EnableWebSocket annotation is used to configure the processing of web socket requests. Customization can be done by implementing the WebSocketConfigurer class:

@Configuration
@EnableWebSocket
public class MyConfiguration implements WebSocketConfigurer {

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(echoWebSocketHandler(), "/echo").withSockJS();
    }

    @Bean
    public WebSocketHandler echoWebSocketHandler() {
        return new EchoWebSocketHandler();
    }
}

For more on using Spring Websockets, you can refer to this article.

7. @EnableJpaRepositories

The @EnableJpaRepositories annotation enables Spring Data JPA repositories by scanning the package of the annotated configuration class for repositories.

@Configuration
@EnableJpaRepositories
public class JpaConfig { ... }

Some options available for this annotation are:

  • value — alias for the basePackages() attribute
  • basePackages — base packages to scan for annotated components
  • enableDefaultTransactions — configures whether or not to enable default transactions for Spring Data JPA repositories
  • entityManagerFactoryRef — configures the name of the EntityManagerFactory bean definition to be used

8. @EnableTransactionManagement

The @EnableTransactionManagement annotation enables Spring’s annotation-driven transaction management capability. The XML equivalent is the <tx:*> namespace.

@Configuration
@EnableTransactionManagement
public class JpaConfig { ... }

For more on using Spring Transaction Management, you can refer to this article.

9. @EnableJpaAuditing

The @EnableJpaAuditing annotation enables auditing on your JPA entities.

@Configuration
@EnableJpaAuditing
public class JpaConfig {

    @Bean
    public AuditorAware<AuditableUser> auditorProvider() {
        return new AuditorAwareImpl();
    }
}

For more on using Spring Web Sockets, you can refer to this article.

10. Conclusion

In this quick article, we looked at some @Enable Spring annotations and how they can be used to help us configure a Spring Application.

Course – LS (cat=Spring)

Get started with Spring and Spring Boot, through the Learn Spring course:

>> THE COURSE
res – REST with Spring (eBook) (everywhere)
Comments are open for 30 days after publishing a post. For any issues past this date, use the Contact form on the site.