== Why is this an issue?

`@Configuration` is a class-level annotation indicating that an object is a source of bean definitions.
`@Configuration` classes declare beans through `@Bean`-annotated methods.
Calls to `@Bean` methods on `@Configuration` classes can also be used to define inter-bean dependencies.
The `@Bean` annotation indicates that a method instantiates, configures, and initializes a new object to be managed by the Spring IoC container.

Annotating a method of a bean with `@Async` will make it execute in a separate thread.
In other words, the caller will not wait for the completion of the called method.

The `@Async` annotation is not supported on methods declared within a `@Configuration` class.
This is because `@Async` methods are typically used for asynchronous processing, and they require certain infrastructure to be set up, which may not be available or appropriate in a `@Configuration` class.

== How to fix it

Don't use `@Async` annotations on methods of `@Configuration` classes.

=== Code examples

==== Noncompliant code example

[source,java,diff-id=1,diff-type=noncompliant]
----
@EnableAsync
@Configuration
public class MyConfiguration {

  @Async // Noncompliant - This is not allowed
  public void asyncMethod() {
    // ...
  }
}
----

==== Compliant solution

[source,java,diff-id=1,diff-type=compliant]
----
@EnableAsync
@Configuration
public class MyConfiguration {

  public void method() {
    // ...
  }
}
----

== Resources

=== Documentation

* https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/annotation/Async.html[Spring Framework - @Async]
* https://docs.spring.io/spring-framework/reference/core/beans/java/configuration-annotation.html[Spring Framework - Using the @Configuration annotation]
* https://docs.spring.io/spring-framework/reference/core/beans/java/basic-concepts.html[Spring Framework - Basic Concepts: @Bean and @Configuration]

=== Articles & blog posts

* https://www.baeldung.com/spring-async[Baeldung - How To Do @Async in Spring]
