在 Spring Boot 中禁用所有与数据库相关的自动配置

新手上路,请多包涵

我正在使用 Spring Boot 开发两个应用程序,一个用作服务器,另一个用作客户端应用程序。但是,它们都是同一个应用程序,根据活动配置文件功能不同。我正在使用 Spring Boot 的自动配置功能来配置我的应用程序。

我想在客户端应用程序上禁用所有与数据库相关的自动配置,因为它不需要数据库连接。应用程序不应尝试与数据库建立连接,也不应尝试使用任何 Spring Data 或 Hibernate 功能。数据库自动配置的启用或禁用应该是有条件的,并且基于应用程序的活动配置文件。

我可以通过为各自的配置文件创建两个不同的 application.properties 文件来实现这一点吗?

我尝试将其添加到我的属性文件中,

 spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration\
  org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration\
org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration\
  org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration

但是,应用程序仍然会在启动时尝试连接到数据库。这些排除是否足以满足我的要求?

原文由 yuva 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 782
1 个回答

我会做类似事情的方式是:

 @Configuration
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
@Profile ("client_app_profile_name")
public class ClientAppConfiguration {
    //it can be left blank
}

为服务器应用程序编写类似的应用程序(不排除)。

最后一步是从主 Spring Boot 类中禁用自动配置:

 @SpringBootApplication
public class SomeApplication extends SpringBootServletInitializer {

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

    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(SomeApplication.class);
    }
}

将: @SpringBootApplication 更改为:

 @Configuration
@ComponentScan

这应该可以完成这项工作。现在,我在示例中排除的依赖项可能不完整。它们对我来说已经足够了,但我不确定是否完全禁用与数据库相关的库。检查下面的列表以确保:

http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#auto-configuration-classes

希望有帮助

原文由 patrykos91 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题