spring boot:为prod和tests

时间:2016-06-04 03:59:12

标签: java spring-boot

我正在将现有的Java应用程序转换为Spring Boot。 我是一个Spring Boot新手。我知道Spring Boot支持application.properties,这对新应用程序非常有用。但这是一个遗留应用程序,我现在需要一个临时解决方案 - 没有完全重新设计它。这个应用程序需要在启动时使用属性文件调用一些初始化程序。有prod.properties和另一个用于测试 - test.properties

需要从磁盘上的特定位置(/mydir/prod.properties)加载prod文件,而test.properties来自测试的类路径。 另外,遗留类可能需要在它们的创建时初始化这个“属性类”(它们在静态初始化器中引用它,哦geez ...) - 所以这个init需要在Spring组件加载之前发生。

最简单的解决方案是什么? 我想出了这种过于冗长的锅炉板解决方案。它有效,但也许有一种更简单的方法?

import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import javax.inject.Inject;
@SpringBootApplication
public class DemoApplication implements CommandLineRunner {

    @Inject
    private Initializer initializer;

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        initializer.init();
    }
}

public interface Initializer {
    void init();
}

@Component
public class ProdInitializer implements Initializer {
    @Override
    public void init() {
        System.out.println("PROD init - will load properties file from /myfolder/ and call some init class with it");
    }
}

// and this is from TESTS section:

import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
@Primary
@Component
public class TestInitializer implements Initializer {
    @Override
    public void init() {
        System.out.println("TEST init - will load properties file from classpath and call some init class with it");
    }
}

我尝试只使用一个初始化程序,其中只有一个test/resources/application.properties文件,其中只有一个值(遗留属性文件位置),希望Spring Boot从PROD代码加载application.properties,然后加载唯一的值出现在test/resources/application.properties中并覆盖main/resources/application.properties中的相应值,但没有运气 - 显然,如果存在main/resources/application.properties,Spring Boot会忽略test/resources/application.properties的测试。所以我必须复制main/resources/application.propertiestest/resources/application.properties的所有设置,只有一个属性不同。

0 个答案:

没有答案