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

在spring boot中为liquibase配置数据源

危璞
2023-03-14

我有一个Spring启动应用程序,我想为它添加liquibase配置更改日志。

我创建了一个用于配置liquibase的LiquibaseConfig类:

@Configuration
public class LiquibaseConfiguration {

    @Value("${com.foo.bar.liquibase.changelog}")
    private String changelog;

    @Autowired
    MysqlDataSource dataSource;

    @Bean
    public SpringLiquibase liquibase()  {
        SpringLiquibase liquibase = new SpringLiquibase();
        liquibase.setDataSource(dataSource);
        liquibase.setChangeLog(changelog);
        return liquibase;
    }

}

我已经在属性文件中配置了数据源信息:

spring.datasource.url=jdbc:mysql://localhost:3306/dms
spring.datasource.username=root
spring.datasource.password=test
spring.datasource.testWhileIdle = true
spring.jpa.show-sql = true

#liquibase
com.foo.bar.liquibase.changelog=classpath:/db/changelog/db.changelog.xml

当我运行我的应用程序时,我收到这个错误:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'liquibaseConfiguration': Unsatisfied dependency expressed through field 'dataSource': No qualifying bean of type [com.mysql.jdbc.jdbc2.optional.MysqlDataSource] found for dependency [com.mysql.jdbc.jdbc2.optional.MysqlDataSource]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.mysql.jdbc.jdbc2.optional.MysqlDataSource] found for dependency [com.mysql.jdbc.jdbc2.optional.MysqlDataSource]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

现在我明白了,这意味着应用程序无法自动连接MysqlDataSource数据源 但我需要将数据源传递给liquibase bean。我该怎么做?


共有3个答案

岳谦
2023-03-14

我的应用程序也有类似的构造,您是否尝试过注入更通用的javax。sql。取而代之的是数据源?

我的猜测是Spring为这个bean使用了非特定类型,除此之外,如果应用程序可以配置为使用完全不同的源,也就是说,只需更改配置文件中的数据源URL,那么您甚至不应该使用特定于数据库的类型。

边银龙
2023-03-14

与其自动连接数据源,不如在Liquibase配置对象中创建一个方法来创建数据源。

private DataSource dataSource() {
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
    dataSource.setUsername("user");
    dataSource.setPassword("pswd");
    dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/db");
    dataSource.setSchema("dbName");
    return dataSource;
}

那么在你的bean生成方法中

液化。setDataSource(dataSource());

这让您有机会动态指定数据库参数,我在applications.properties文件中仍然有更改日志位置,同时启用了liquibase。我试过了,它对我有效。

韩楷
2023-03-14

下面是在spring boot中集成liquibase的一个简单步骤

添加liquibase依赖项

runtime "org.liquibase:liquibase-core"
<dependency>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-core</artifactId>
    <scope>runtime</scope>
</dependency>

应用程序中添加liquibase changelog文件路径。yml

liquibase:
  enabled: true #this is optional as enabled by default
  change-log: classpath:/liquibase/db-changelog.xml

注意属性液化。更改日志 我指的路径是/liquibase/db changelog。xml db changelog。xmlinsidesrc/main/resources/liquibase/

在文件中添加变更集,当Spring Boot应用程序启动时(Spring Boot:run)将加载变更集。

这将使用应用程序使用的默认数据源。

更多信息:http://docs.spring.io/spring-boot/docs/1.4.3.RELEASE/reference/htmlsingle/#howto-execute-liquibase-database-migrations-on-startup

对于Spring Boot 2.0,正如@veben在评论中指出的那样

spring:
    liquibase:
        change-log: #path

 类似资料:
  • 我需要在中为两个设置,目前看来只有一个设置是可能的,您可以选择哪个数据源。

  • 我知道在DispatcherServlet之外使用请求范围bean需要一些配置,并且已经阅读了http://docs.spring.io/spring/docs/4.0.x/spring-framework-reference/html/beans.html#beans-factory-scopes-oth,但是还没有成功: 对于Servlet3.0+,这可以通过WebApplicationIni

  • 本文向大家介绍springboot + mybatis配置多数据源示例,包括了springboot + mybatis配置多数据源示例的使用技巧和注意事项,需要的朋友参考一下 在实际开发中,我们一个项目可能会用到多个数据库,通常一个数据库对应一个数据源。 代码结构: 简要原理: 1)DatabaseType列出所有的数据源的key---key 2)DatabaseContextHolder是一个线

  • 我正试图让ubuntu上的liquibase 3.10.2首次在Db2仓库中运行。在教程示例之后,H2“liquibase update”示例运行良好。 使用指定的jar和下面的url字符串,可以很好地使用dbeaver,但将其转换为liquibase会提供以下错误。 更新的附加信息: (1)导致显示错误的完整命令行是什么?我正在发布h2教程中引用的简单示例 (2)更改日志文件内容是什么这与示例h

  • 本文向大家介绍SpringBoot快速配置数据源的方法,包括了SpringBoot快速配置数据源的方法的使用技巧和注意事项,需要的朋友参考一下 SpringBoot如何快速配置数据源;有如下两种方式: 通过spring-boot-starter-jdbc快速配置数据源 自定义数据源DataSource 首先我们需要明确数据源DataSource有什么作用: 通过DataSource可以获取数据库连

  • 我刚开始使用springboot,我一直在尝试用它和spring security来配置一个项目,但不幸的是,我无法运行它。我得到了下一个错误: 嵌套的异常是org。springframework。靴子自动配置。jdbc。DataSourceProperties$DataSourceBeanCreationException:未能确定合适的驱动程序类 应用程序无法启动 描述: 配置DataSour