如何在Spring Boot中为不同的概要文件在运行时创建多个bean



在我的项目中,我有以下属性文件

application.properties
spring.application.name=Profiles
spring.profiles.active=dev,qa
spring.message=Hello world from localhost environment
application-dev.yml
server.port=9091
application-qa.yml
server.port=9091

低于Java类

ProfileConfig.java
@Profile({"dev", "qa"})
@Configuration
public class ProfileConfig {
@Autowired
private Environment environment;
private static Logger LOGGER = LoggerFactory.getLogger(ProfileConfig.class);
@Bean
public void config() {
System.out.println("****************SERVER.PORT " + environment.getProperty("server.port"));
LOGGER.info("Succesfully loaded the environment.");
}
}
SpringbootProfiles.java
@SpringBootApplication
public class Springbootprofiles {
private static Logger LOGGER = LoggerFactory.getLogger(Springbootprofiles.class);

public static void main(String[] args) {
SpringApplication.run(Springbootprofiles.class, args);
LOGGER.info("Springboot profiles application is running successfully.");
}
}

OUTPUT是****************服务器端口10092成功加载环境。

问题-1(为什么只打印qa配置文件中的端口。由于dev也是一个活动的配置文件,我预计dev和qa的端口打印如下

****************服务器端口10091成功加载环境。

****************服务器端口10092成功加载环境。

2)是否可以在运行时创建两个bean,一个用于dev,另一个用于qa?如果是这样的话,我如何读取qa和dev的bean?

您可以将应用程序实例化两次,并为每个应用程序选择一个特定的配置文件(我认为没有办法从两个端口启动相同的应用程序(

您可以告诉spring使用通过以下方式之一传递环境的特定属性:

  • spring.profiles.active=prd放入application.properties文件中
  • 启动spring应用程序--spring.profiles.active=dev时传递参数(请尝试在IDE中使用config进行开发(
  • 在命令行java -jar myjar.jar --spring.profiles.active=dev上运行您的jar
  • 在机器/docker/containerSET SPRING_ACTIVES_PROFILE=dev中设置环境变量
  • 还有其他方法在bean上使用注释,传递jvm参数和其他方法

如果您需要在特定配置(vars、数据库、设置(中运行测试,可以通过将使用的.properties

@ExtendWith(SpringExtension.class)
@AutoConfigureMockMvc
@SpringBootTest
@TestPropertySource(locations = "classpath:application-qa.properties")
public class RunTest_from_onlytests_properties {
@Autowired
private MockMvc mockMvc;

@Test // org.junit.jupiter.api.Test
public void test() throws Exception{
// ...
}
}

最新更新