Spring @PostConstruct 取决于@Profile
Spring @PostConstruct depending on @Profile
我想在一个配置中有多个 @PostConstruct 注释方法 class,应该根据 @Profile 调用这些方法。您可以想象这样截断的代码:
@Configuration
public class SilentaConfiguration {
private static final Logger LOG = LoggerFactory.getLogger(SilentaConfiguration.class);
@Autowired
private Environment env;
@PostConstruct @Profile("test")
public void logImportantInfomationForTest() {
LOG.info("********** logImportantInfomationForTest");
}
@PostConstruct @Profile("development")
public void logImportantInfomationForDevelopment() {
LOG.info("********** logImportantInfomationForDevelopment");
}
}
但是根据@PostConstruct 的javadoc,我只能有一个方法用这个注释来注释。在 Spring 的 Jira https://jira.spring.io/browse/SPR-12433 中有一个公开的改进。
你是怎么解决这个需求的?我总是可以将此配置 class 拆分为多个 class,但也许您有更好的 idea/solution.
顺便说一句。上面的代码运行没有问题,但是无论配置文件设置如何,这两种方法都会被调用。
您可以在单个 @PostContruct
.
中使用 Environment
检查配置文件
一个 if
语句就可以了。
此致,
丹尼尔
我用每个 @PostConstruct
方法用一个 class 解决了它。 (这是 Kotlin,但它翻译成 Java 几乎 1:1。)
@SpringBootApplication
open class Backend {
@Configuration
@Profile("integration-test")
open class IntegrationTestPostConstruct {
@PostConstruct
fun postConstruct() {
// do stuff in integration tests
}
}
@Configuration
@Profile("test")
open class TestPostConstruct {
@PostConstruct
fun postConstruct() {
// do stuff in normal tests
}
}
}
我想在一个配置中有多个 @PostConstruct 注释方法 class,应该根据 @Profile 调用这些方法。您可以想象这样截断的代码:
@Configuration
public class SilentaConfiguration {
private static final Logger LOG = LoggerFactory.getLogger(SilentaConfiguration.class);
@Autowired
private Environment env;
@PostConstruct @Profile("test")
public void logImportantInfomationForTest() {
LOG.info("********** logImportantInfomationForTest");
}
@PostConstruct @Profile("development")
public void logImportantInfomationForDevelopment() {
LOG.info("********** logImportantInfomationForDevelopment");
}
}
但是根据@PostConstruct 的javadoc,我只能有一个方法用这个注释来注释。在 Spring 的 Jira https://jira.spring.io/browse/SPR-12433 中有一个公开的改进。
你是怎么解决这个需求的?我总是可以将此配置 class 拆分为多个 class,但也许您有更好的 idea/solution.
顺便说一句。上面的代码运行没有问题,但是无论配置文件设置如何,这两种方法都会被调用。
您可以在单个 @PostContruct
.
Environment
检查配置文件
一个 if
语句就可以了。
此致, 丹尼尔
我用每个 @PostConstruct
方法用一个 class 解决了它。 (这是 Kotlin,但它翻译成 Java 几乎 1:1。)
@SpringBootApplication
open class Backend {
@Configuration
@Profile("integration-test")
open class IntegrationTestPostConstruct {
@PostConstruct
fun postConstruct() {
// do stuff in integration tests
}
}
@Configuration
@Profile("test")
open class TestPostConstruct {
@PostConstruct
fun postConstruct() {
// do stuff in normal tests
}
}
}