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

禁用spring boot中所有与数据库相关的自动配置

陈寒
2023-03-14

我正在使用spring boot开发两个应用程序,一个充当服务器端,另一个是客户端应用程序。然而,这两个应用程序是相同的功能不同的基于活动配置文件。我正在使用spring boot的自动配置功能来配置我的应用程序。

我想禁用所有数据库相关的客户端应用程序自动配置,因为它将不需要数据库连接。应用程序不应尝试与数据库建立连接,也不应尝试使用任何spring数据或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

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

共有2个答案

苍和裕
2023-03-14

禁用所有与数据库相关的自动配置并退出:

无法确定数据库类型“无”的嵌入式数据库驱动程序类

1.使用注释:

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

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

2.使用application.properties:

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration, org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
宋成天
2023-03-14

我做类似事情的方法是:

@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/#自动配置-类

希望有帮助

 类似资料:
  • 问题内容: 我正在使用Spring Boot开发两个应用程序,一个用作服务器,另一个是客户端应用程序。但是,它们都是同一个应用程序,根据活动配置文件的功能有所不同。我正在使用Spring Boot的自动配置功能来配置我的应用程序。 我想在客户端应用程序上禁用所有与数据库相关的自动配置,因为它不需要数据库连接。应用程序不应尝试与数据库建立连接,也不应尝试使用任何Spring Data或Hiberna

  • 我有一个简单的SpringBoot应用程序,我想使用AutoConfiguration来配置Tomcat jdbc池数据源。 我正在使用这些Spring依赖项: 以下是我的 application.yml 文件中的数据源属性: 我确定正在加载属性,因为应用程序正在获取其他值。 我在配置文件中将 bean 定义为: 我将数据源注入到我的DAO中,如下所示: 如果我在getDataSource()方法

  • 当应用程序启动时,我正在尝试创建mysql数据库。我尝试了波纹管配置,但无法实现,如果有人对此有想法,请告诉我,

  • 我有一个spring-boot项目,该项目创建了一个H2内存数据库,其中包含由带有@Entity注释的类自动生成的表。我现在已经创建了另一个项目来连接到同一个数据库,但是每当我运行新的spring项目时,我认为创建了一个新的数据库来覆盖另一个数据库。 更新 尝试przemek hertel给出的答案,我得到以下错误:

  • 4.1 根据条件的自动配置 @conditional是基于条件的自动配置,一般配合Condition接口一起使用,只有接口实现类返回true,才装配,否则不装配. 用实现了Condition接口的类传入@Conditional中 @Conditional可以标记在配置类的方法中,也可以标记在配置类上.标记的位置不同,作用域不同. @Conditional可以传入多个实现了condition接口的类

  • 问题内容: 我想知道是否有一种方法可以将我的id列(自动递增)设置为使用mysql表中的前导零始终具有5位数字。因此,第一个值将是00001,然后是00002,依此类推,直到99999,而不是1,2,3,直到99999。 问题答案: 您的ID列是一个数字值,因此它将始终具有相同的值。如果要以某种方式格式化整数,则必须将其格式化为SELECT的一部分。查看LPAD函数。 LPAD前导零