找不到文件 db.changelog-master.xml

问题描述 投票:0回答:0

我正在使用 springboot 3.0.5,我想使用 liquibase,但是找不到文件 changelog-master,下面我留下了我的文件和配置。 我的应用程序.yml

spring:
  liquibase:
    enabled: true
    change-log: classpath:db.changelog/db.changelog-master.xml
  graphql:
    graphiql:
      enabled: true
    schema:
      locations: classpath:*graphqls
  r2dbc:
    url: r2dbc:postgresql://localhost:3539/library-service
    username: library-user
    password: m4Passrdwo000--
    pool:
      enabled: true
      initial-size: 1
      max-size: 10

logging:
  level:
    liquibase: INFO

这里是我的配置类

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties("spring.liquibase")
public class R2dbcLiquibaseProperties {

    private boolean enabled = true;
    private String changeLog = "";

    public R2dbcLiquibaseProperties(boolean enabled, String changeLog) {
        this.enabled = enabled;
        this.changeLog = changeLog;
    }

    public boolean isEnabled() {
        return enabled;
    }

    public String getChangeLog() {
        return changeLog;
    }
}

另类配置

import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableConfigurationProperties(R2dbcLiquibaseProperties.class)
public class R2dbcLiquibasePropertiesConfig {
}

多一个类配置

import liquibase.Contexts;
import liquibase.LabelExpression;
import liquibase.Liquibase;
import liquibase.database.Database;
import liquibase.database.DatabaseFactory;
import liquibase.database.jvm.JdbcConnection;
import liquibase.exception.DatabaseException;
import liquibase.resource.ClassLoaderResourceAccessor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.r2dbc.R2dbcAutoConfiguration;
import org.springframework.boot.autoconfigure.r2dbc.R2dbcProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ResourceLoader;

import javax.sql.DataSource;
import java.sql.SQLException;

@Configuration
@ConditionalOnProperty(
        prefix = "spring.liquibase",
        name = "enabled",
        havingValue = "true",
        matchIfMissing = true
)
@AutoConfigureAfter(R2dbcAutoConfiguration.class)
@ComponentScan(basePackageClasses = R2dbcProperties.class)
public class R2dbcLiquibaseConfig {

    private static final Logger log = LoggerFactory.getLogger(R2dbcLiquibaseConfig.class);
    private final R2dbcLiquibaseProperties properties;

    public R2dbcLiquibaseConfig(R2dbcLiquibaseProperties properties) {
        this.properties = properties;
    }

    @Bean
    @ConditionalOnMissingBean
    public ClassLoaderResourceAccessor r2dbcLiquibaseResourceAccessor(ResourceLoader resourceLoader) {
        return new ClassLoaderResourceAccessor(resourceLoader.getClassLoader());
    }

    @Bean
    @ConditionalOnMissingBean
    public DataSource r2dbcLiquibaseDataSource(R2dbcProperties r2dbcProperties) {
        return DataSourceBuilder.create()
                .url(r2dbcProperties.getUrl().replaceFirst("r2dbc:pool", "jdbc:")
                        .replaceFirst("r2dbc:", "jdbc:"))
                .username(r2dbcProperties.getUsername())
                .password(r2dbcProperties.getPassword())
                .build();
    }

    @ConditionalOnMissingBean
    @Bean(destroyMethod = "close")
    public JdbcConnection r2dbcLiquibaseJdbcConnection(DataSource r2dbcLiquibaseDataSource) throws SQLException {
        return new JdbcConnection(r2dbcLiquibaseDataSource.getConnection());
    }

    @ConditionalOnMissingBean
    @Bean(destroyMethod = "close")
    public Database r2dbcLiquibaseDatabase(JdbcConnection r2dbcLiquibaseJdbcConnection) throws DatabaseException {
        return DatabaseFactory.getInstance().findCorrectDatabaseImplementation(r2dbcLiquibaseJdbcConnection);
    }

    @Bean
    @ConditionalOnMissingBean
    public ApplicationRunner r2dbcLiquibaseDatabaseInitialization(ClassLoaderResourceAccessor clr, Database db) {
        log.info("changelog {}", properties.getChangeLog());
        return args -> {Liquibase liquibase = new Liquibase(properties.getChangeLog(), clr, db);
            log.info("R2DBC liquibase database initialized by {}",liquibase.getChangeLogFile());
            liquibase.update(new Contexts(), new LabelExpression(), true);
        };
    }
}

我的build.gradle

plugins {
    java
    id("org.springframework.boot") version "3.0.5"
    id("io.spring.dependency-management") version "1.1.0"
    id("org.graalvm.buildtools.native") version "0.9.20"
}

group = "org.abahafart.library"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_17

configurations {
    compileOnly {
        extendsFrom(configurations.annotationProcessor.get())
    }
}

repositories {
    mavenCentral()
}

extra["springCloudVersion"] = "2022.0.2"
extra["testcontainersVersion"] = "1.17.6"

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-actuator")
    implementation("org.springframework.boot:spring-boot-starter-data-jpa")
    implementation("org.springframework.boot:spring-boot-starter-jdbc")
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("org.liquibase:liquibase-core")
    implementation("org.springframework.cloud:spring-cloud-starter-circuitbreaker-resilience4j")
    implementation("org.springframework.data:spring-data-r2dbc")
    implementation("org.springframework.boot:spring-boot-autoconfigure")
    implementation("io.r2dbc:r2dbc-postgresql:0.8.13.RELEASE")
    runtimeOnly("org.postgresql:postgresql")
    implementation("io.r2dbc:r2dbc-pool:1.0.0.RELEASE")
    annotationProcessor("org.springframework.boot:spring-boot-configuration-processor")
    testImplementation("org.springframework.boot:spring-boot-starter-test")
    testImplementation("org.testcontainers:junit-jupiter")
    testImplementation("org.testcontainers:postgresql")
}

dependencyManagement {
    imports {
        mavenBom("org.testcontainers:testcontainers-bom:${property("testcontainersVersion")}")
        mavenBom("org.springframework.cloud:spring-cloud-dependencies:${property("springCloudVersion")}")
    }
}

tasks.withType<Test> {
    useJUnitPlatform()
}

我的 db.changelog-master

<?xml version="1.0" encoding="utf-8"?>
<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.6.xsd">

    <property name="now" value="now()" dbms="h2"/>
    <property name="now" value="current_timestamp" dbms="postgresql"/>
    <property name="floatType" value="float4" dbms="postgresql, h2"/>
    <property name="floatType" value="float" dbms="mysql, oracle, mssql, mariadb"/>
    <property name="clobType" value="longvarchar" dbms="h2"/>
    <property name="clobType" value="clob" dbms="mysql, oracle, mssql, mariadb, postgresql"/>
    <property name="uuidType" value="uuid" dbms="h2, postgresql"/>
    <property name="datetimeType" value="datetime(6)" dbms="mysql, mariadb"/>
    <property name="datetimeType" value="datetime" dbms="oracle, mssql, postgresql, h2"/>
    <property name="u_id" value="uuid()" dbms="mysql"/>
    <include file="db.changelog/changelogs/master.xml"/>
</databaseChangeLog>

我的结构项目

[![在此处输入图片描述][1]][1]

最后是我的堆栈跟踪问题

2023-04-13T21:14:17.095-05:00  INFO 6210 --- [           main] o.a.l.LibraryMicroserviceApplication     : Starting LibraryMicroserviceApplication using Java 17.0.5 with PID 6210 (/home/user/Documents/workspace/intellij/microservices/library-service/build/classes/java/main started by abahafart in /home/user/Documents/workspace/intellij/microservices/library-service)
2023-04-13T21:14:17.098-05:00  INFO 6210 --- [           main] o.a.l.LibraryMicroserviceApplication     : No active profile set, falling back to 1 default profile: "default"
2023-04-13T21:14:17.481-05:00  INFO 6210 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
2023-04-13T21:14:17.482-05:00  INFO 6210 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data R2DBC repositories in DEFAULT mode.
2023-04-13T21:14:17.495-05:00  INFO 6210 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 9 ms. Found 0 R2DBC repository interfaces.
2023-04-13T21:14:17.676-05:00  INFO 6210 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
2023-04-13T21:14:17.677-05:00  INFO 6210 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2023-04-13T21:14:17.687-05:00  INFO 6210 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 7 ms. Found 0 JPA repository interfaces.
2023-04-13T21:14:17.696-05:00  INFO 6210 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
2023-04-13T21:14:17.696-05:00  INFO 6210 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data R2DBC repositories in DEFAULT mode.
2023-04-13T21:14:17.699-05:00  INFO 6210 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 2 ms. Found 0 R2DBC repository interfaces.
2023-04-13T21:14:17.790-05:00  INFO 6210 --- [           main] o.s.cloud.context.scope.GenericScope     : BeanFactory id=d9c5fd81-b584-3171-a425-65daf771ca31
2023-04-13T21:14:18.199-05:00  INFO 6210 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2023-04-13T21:14:18.207-05:00  INFO 6210 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2023-04-13T21:14:18.207-05:00  INFO 6210 --- [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.7]
2023-04-13T21:14:18.256-05:00  INFO 6210 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2023-04-13T21:14:18.257-05:00  INFO 6210 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1131 ms
2023-04-13T21:14:18.419-05:00  INFO 6210 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2023-04-13T21:14:18.508-05:00  INFO 6210 --- [           main] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@63e70bf9
2023-04-13T21:14:18.509-05:00  INFO 6210 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2023-04-13T21:14:19.011-05:00  INFO 6210 --- [           main] liquibase.database                       : Set default schema name to public
2023-04-13T21:14:19.050-05:00  INFO 6210 --- [           main] liquibase.lockservice                    : Successfully acquired change log lock
2023-04-13T21:14:19.267-05:00  INFO 6210 --- [           main] liquibase.changelog                      : Reading from public.databasechangelog
2023-04-13T21:14:19.293-05:00  INFO 6210 --- [           main] liquibase.lockservice                    : Successfully released change log lock
2023-04-13T21:14:19.432-05:00  INFO 6210 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2023-04-13T21:14:19.470-05:00  INFO 6210 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 6.1.7.Final
2023-04-13T21:14:19.644-05:00  INFO 6210 --- [           main] SQL dialect                              : HHH000400: Using dialect: org.hibernate.dialect.PostgreSQLDialect
2023-04-13T21:14:19.785-05:00  INFO 6210 --- [           main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2023-04-13T21:14:19.790-05:00  INFO 6210 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2023-04-13T21:14:19.836-05:00  INFO 6210 --- [           main] o.a.l.i.repository.R2dbcLiquibaseConfig  : changelog classpath:db.changelog/db.changelog-master.xml
2023-04-13T21:14:19.866-05:00  WARN 6210 --- [           main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2023-04-13T21:14:20.855-05:00  INFO 6210 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 1 endpoint(s) beneath base path '/actuator'
2023-04-13T21:14:20.919-05:00  INFO 6210 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2023-04-13T21:14:21.362-05:00  INFO 6210 --- [           main] o.a.l.LibraryMicroserviceApplication     : Started LibraryMicroserviceApplication in 4.792 seconds (process running for 5.176)
2023-04-13T21:14:21.369-05:00  INFO 6210 --- [           main] liquibase.database                       : Set default schema name to public
2023-04-13T21:14:21.369-05:00  INFO 6210 --- [           main] o.a.l.i.repository.R2dbcLiquibaseConfig  : R2DBC liquibase database initialized by classpath:db.changelog/db.changelog-master.xml
2023-04-13T21:14:21.388-05:00  INFO 6210 --- [           main] liquibase.lockservice                    : Successfully acquired change log lock
2023-04-13T21:14:21.393-05:00  INFO 6210 --- [           main] liquibase.lockservice                    : Successfully released change log lock
2023-04-13T21:14:21.397-05:00  INFO 6210 --- [           main] .s.b.a.l.ConditionEvaluationReportLogger : 

Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
2023-04-13T21:14:21.407-05:00 ERROR 6210 --- [           main] o.s.boot.SpringApplication               : Application run failed

java.lang.IllegalStateException: Failed to execute ApplicationRunner
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:763) ~[spring-boot-3.0.5.jar:3.0.5]
    at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:750) ~[spring-boot-3.0.5.jar:3.0.5]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:317) ~[spring-boot-3.0.5.jar:3.0.5]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1304) ~[spring-boot-3.0.5.jar:3.0.5]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1293) ~[spring-boot-3.0.5.jar:3.0.5]
    at org.abahafart.library.LibraryMicroserviceApplication.main(LibraryMicroserviceApplication.java:15) ~[main/:na]
Caused by: liquibase.exception.ChangeLogParseException: The file classpath:db.changelog/db.changelog-master.xml was not found in the configured search path:
More locations can be added with the 'searchPath' parameter.
    at liquibase.parser.core.xml.XMLChangeLogSAXParser.parseToNode(XMLChangeLogSAXParser.java:114) ~[liquibase-core-4.17.2.jar:na]
    at liquibase.parser.core.xml.AbstractChangeLogParser.parse(AbstractChangeLogParser.java:15) ~[liquibase-core-4.17.2.jar:na]
    at liquibase.Liquibase.getDatabaseChangeLog(Liquibase.java:408) ~[liquibase-core-4.17.2.jar:na]
    at liquibase.Liquibase.getDatabaseChangeLog(Liquibase.java:393) ~[liquibase-core-4.17.2.jar:na]
    at liquibase.Liquibase.lambda$update$1(Liquibase.java:249) ~[liquibase-core-4.17.2.jar:na]
    at liquibase.Scope.lambda$child$0(Scope.java:180) ~[liquibase-core-4.17.2.jar:na]
    at liquibase.Scope.child(Scope.java:189) ~[liquibase-core-4.17.2.jar:na]
    at liquibase.Scope.child(Scope.java:179) ~[liquibase-core-4.17.2.jar:na]
    at liquibase.Scope.child(Scope.java:158) ~[liquibase-core-4.17.2.jar:na]
    at liquibase.Liquibase.runInScope(Liquibase.java:2447) ~[liquibase-core-4.17.2.jar:na]
    at liquibase.Liquibase.update(Liquibase.java:236) ~[liquibase-core-4.17.2.jar:na]
    at org.abahafart.library.infra.repository.R2dbcLiquibaseConfig.lambda$r2dbcLiquibaseDatabaseInitialization$0(R2dbcLiquibaseConfig.java:81) ~[main/:na]
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:760) ~[spring-boot-3.0.5.jar:3.0.5]
    ... 5 common frames omitted

2023-04-13T21:14:21.422-05:00  INFO 6210 --- [           main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2023-04-13T21:14:21.432-05:00  INFO 6210 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2023-04-13T21:14:21.435-05:00  INFO 6210 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.

我哪里错了? [1]: https://i.stack.imgur.com/jEwnq.png

java spring-boot liquibase
© www.soinside.com 2019 - 2024. All rights reserved.