我正在使用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);
};
}
}
我的身材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]
最后是我的stacktrace问题
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](https://i.stack.imgur.com/jEwnq.png)
1条答案
按热度按时间nbysray51#
在intellij中,尝试右键单击
db.changelog-master.xml
并复制路径/引用。然后您将看到它是db/changelog/db.changelog-master.xml
而不是db.changelog/db.changelog-master.xml
(请参阅目录分隔符的区别)