java - 如何通过annotations/pom.xml管理maven配置文件?

标签 java maven spring-boot maven-profiles

引用 - Maven Profiles

<小时/>

我不想在运行时通过命令行参数指定配置文件。因为,如果我在本地更改它,则必须通过 CI 流进行更改。

<小时/>

场景:

基本上有两个配置文件“PROD”“TEST”。我已经使用这些注释了方法。基本上,我在不同的配置文件下连接不同的数据库。

虽然测试类用@ActiveProfile("TEST")注释

我使用 mvn clean test-compile failuresafe:integraton-test 运行测试,并使用 mvn springboot:run 运行应用程序

<小时/>

问题:

案例 1:
问题:只有 PROD 相关方法针对 PROD 和 TEST 运行。

如果我不使用@Profile("PROD")而只使用@Profile("TEST")并且我使用@ActiveProfiles("测试”) 如引用中指定。上面没有指定任何标志的两个 mvn 命令仅使用未使用配置文件注释的 bean。

案例 2:
问题:PROD 未运行。

如果我在没有任何标志的情况下同时使用 PRODTEST,则 mvn clean test-compile failuresafe:integraton-test 命令可以完美运行(仅当指定 @ActiveProfile("TEST") 时,否则我必须发送一个标志 -Dspring.profiles.active=TEST) 但 springboot:run 不起作用,因为它无法获取任何数据库配置并且找不到 Activity 配置文件。

即使我同时使用 PROD 和 @Primary 注释 PROD 配置文件,情况也是如此

令人惊讶的是,即使我提供命令行参数,结果也是一样的。 mvn springboot:run -Dspring.profiles.active=PROD

如果我使用 @ActiveProfiles("PROD") 注释运行这些配置文件的主类,结果是相同的。

<小时/>

理想场景/预期:

使用mvn test-compile failuresafe:integration-test运行测试,最好不带标志。 (已经实现,但产品不起作用)

使用 mvn springboot:run 运行 prod,强调无标志。

<小时/>

首选更改:

Java 注解:@Profile@ActiveProfile@Primary 等注解告诉 Spring-boot 或 maven 使用什么。

POM.xml:设置配置文件以指导 Maven 使用什么内容。

最佳答案

简而言之,我认为您只需将 spring.profiles.active=PROD 添加到 application.properties

我整理了一个示例,打印了 bean 的内容,该内容在 prod ant 测试之间有所不同,希望这会有所帮助。

运行以下代码时,我得到以下输出:

mvn spring-boot:run:上下文中的字符串是:PROD

mvn clean test:上下文中的字符串是:TEST

ProfilesApplication.java:

@SpringBootApplication
public class ProfilesApplication implements CommandLineRunner {

    Logger logger = LoggerFactory.getLogger(ProfilesApplication.class);

    @Autowired
    private String profiledString;

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

    @Bean
    @Profile("PROD")
    public String prodString() {
        return new String("PROD");
    }

    @Bean
    @Profile("TEST")
    public String testString() {
        return new String("TEST");
    }

    @Override
    public void run(String... args) throws Exception {
        logger.info("The String in the context is: {}", profiledString);
    }
}

应用程序属性:

spring.profiles.active=PROD

ProfilesApplicationTests.java:

@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles("TEST")
public class ProfilesApplicationTests {

    @Test
    public void contextLoads() {
    }
}

关于java - 如何通过annotations/pom.xml管理maven配置文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43626343/

相关文章:

java - Android 与从另一个 Activity 启动的位置管理器通信

maven - "Project does not define required minimum version of Maven"版本-maven-plugin 2.7

java - 包cucumber.api.java.en 不存在cucumber

java - Maven 将 "Release Note"部署为 Artifact

java - 禁用 spring boot 执行器 "health-component"和 "health-component-instance"

java - 将 IntStream 转换为 Map

java - 通用平均 - 需要一个通用类型,但有一个 int 代替

java - 运行测试时获取 "java.lang.IllegalArgumentException: Decode argument cannot be null"

java - 如何在起诉 apache CXF webclient 的请求正文中发送 JSON 数据?

java - Spring Security JWT 刷新 token 未过期