当前位置: 首页 > 知识库问答 >
问题:

如何将@SpringBootApplication配置外部化?

穆修杰
2023-03-14

我想外部化的@SpringBootApplication(排除...)选项,有一个可重用的类或注释,我可以扔在排除任何数据库/Hibernate初始化。

因此,与其写:

@SpringBootApplication(
        exclude = {
                DataSourceAutoConfiguration.class,
                DataSourceTransactionManagerAutoConfiguration.class,
                HibernateJpaAutoConfiguration.class})
public class MainApp {
}

我想创建一个注释,我可以应用到我的@SpringBootApplication主类:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@EnableAutoConfiguration(exclude = {
        DataSourceAutoConfiguration.class,
        DataSourceTransactionManagerAutoConfiguration.class,
        HibernateJpaAutoConfiguration.class})
@Configuration
public @interface ExcludeDataSources {
}

然后通过注释启用此功能:

@SpringBootApplication
@ExcludeDataSources
public class MainApp {
}

问题:注释方法不起作用,Spring仍然尝试加载数据库。为什么啊?

我的最终目标是拥有多个配置文件,其中只有一个加载数据库。

共有1个答案

东郭和光
2023-03-14

我可以通过添加一个仅在特定条件下执行的附加@EnableAutoConfiguration来管理它。这样,我可以动态地排除数据库配置,同时保持一个干净的基础main@SpringBootConfiguration类。

public class DataSourceConfig {
    @Configuration
    @Conditional(MyCondition.class)
    @EnableAutoConfiguration(exclude = {
            DataSourceAutoConfiguration.class,
            DataSourceTransactionManagerAutoConfiguration.class,
            HibernateJpaAutoConfiguration.class})
    static class ExcludeDataSource {
    }
}
 类似资料:
  • 我正在开发一个由几个包组成的OSGi程序,我有时在本地windows dev计算机上运行,有时在经典的Linux上运行。目前,几个专用于资源连接的bundle都有自己的配置文件(属性文件),其中包含一些信息,比如访问一些重要文件的路径(在两个环境中都有)。 但是,由于两个执行环境中的路径不同,我必须在编译之前手动更改配置,这取决于我要在哪个环境中运行我的程序。

  • Netflix客户端配置库Archaius 它是所有Netflix OSS组件用于配置的库。Archaius是Apache Commons Configuration项目的扩展。它允许通过轮询源进行更改或将源更改推送到客户端来进行配置更新。Archaius使用Dynamic <Type> Property类作为属性的句柄。Archaius示例 class ArchaiusTest { Dyna

  • Spring Boot允许您外部化配置,以便您可以在不同的环境中使用相同的应用程序代码。 您可以使用属性文件,YAML文件,环境变量和命令行参数来外部化配置。 可以使用@Value注释将属性值直接注入到bean中,通过Spring的Environment抽象访问,或者通过@ConfigurationProperties绑定到结构化对象。 Spring Boot使用一个非常特殊的PropertySo

  • 我有一个标准的Spring靴项目。 我有一个/src/main/resources文件夹,其中有几个配置文件。 我怎样才能用Gradle做到这一点呢?

  • 我目前正在学习如何使用Spring Boot。到目前为止,我从未使用过像Spring这样的框架,而是直接使用文件(FileInputStream等) 我还发现了doc:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html,但我现在知道如何将它应用到我的项目中