如何有选择地使一个类成为应在Spring(Spring Boot 2.x)中运行的代码

时间:2018-11-25 19:53:27

标签: spring spring-boot

我们在Spring Boot 2.x项目中有几个用@Component表示法注释的类-但我们只想在运行时选择这些类之一。

为进一步详细说明,我们创建了一个Uber Jar-它可以在多台机器上运行-但是每个jar都应运行不同的逻辑,并且该逻辑由此类之一决定。

在Spring Boot 2.x中实现此目标的最干净的方法是什么?我读了一些有关配置文件的内容。非常感谢任何清洁的解决方案。

2 个答案:

答案 0 :(得分:0)

使用Spring Boot Maven插件,并将其配置为使用PropertiesLauncher,然后通过命令行设置loader.main。或者,您可以通过命令行指定整个内容。假设您使用的是Maven(或Gradle)Spring Boot插件来构建jar / war文件:

package atm.implementations;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;

import javax.sql.DataSource;

public abstract class AbstractDAO {

    NamedParameterJdbcTemplate jdbcTemplate;

    @Autowired
    public void setDataSource(DataSource dataSource) {
        this.jdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
    }
}

答案 1 :(得分:0)

您可以将这些@Component类分组并移动到多个@Configuration类中。在这种情况下,您必须手动将它们声明为@Bean(方法)。您将定义与计算机数量一样多的@Configuration类。

此外,您可以通过Spring Profiles启用或禁用配置类。使用spring.profiles.active系统属性(-Dspring.profiles.active = profile1,profile2)启用配置文件。

如果要使其干净,则必须以“依赖关系反转原理”的方式进行:您应该为@Components定义接口,每个@Configuration都将声明具体类型的@Bean。这样,您就可以使用@Autowired依赖注入而无需了解具体实现。