我知道已经有人问过同样的问题,但我无法询问用户是否解决了问题,而且他的问题不够完整,无法获得其他用户的帮助
所以我将在此处包含更多信息以尝试解决此问题:
我有一个 springboot 应用程序在 docker 上运行了几个月,我正在向这个应用程序添加 spring liquibase 插件,这个插件在我的本地计算机上工作正常但是当我在 docker 中运行它时我有以下错误(并且未执行 liquibase 更改日志):
错误的一个示例如下,但其中大约 400 个出现在日志中,类路径中的每个 jar 都有一个...下面的示例是这些错误中的最后一个,它指的是“jakarta.validation-api- 2.0.2.jar”,如第一行所示,但问题不在于这个特定的 jar,我在运行这个应用程序的 docker 中实现 Liquibase 一定有问题。
2020-09-01 00:11:11.219 WARN 1 --- [ main] liquibase.resource : Cannot create filesystem for url jar:file:/opt/target/hov2.jar!/BOOT-INF/lib/jakarta.validation-api-2.0.2.jar!/: null
java.nio.file.FileSystemNotFoundException: null
at jdk.zipfs/jdk.nio.zipfs.ZipFileSystemProvider.getFileSystem(Unknown Source) ~[jdk.zipfs:na]
at jdk.zipfs/jdk.nio.zipfs.ZipFileSystemProvider.getPath(Unknown Source) ~[jdk.zipfs:na]
at java.base/java.nio.file.Path.of(Unknown Source) ~[na:na]
at java.base/java.nio.file.Paths.get(Unknown Source) ~[na:na]
at liquibase.resource.ClassLoaderResourceAccessor.loadRootPaths(ClassLoaderResourceAccessor.java:63) ~[liquibase-core-4.0.0.jar!/:na]
at liquibase.resource.ClassLoaderResourceAccessor.init(ClassLoaderResourceAccessor.java:47) ~[liquibase-core-4.0.0.jar!/:na]
at liquibase.resource.ClassLoaderResourceAccessor.openStreams(ClassLoaderResourceAccessor.java:94) ~[liquibase-core-4.0.0.jar!/:na]
at liquibase.resource.CompositeResourceAccessor.openStreams(CompositeResourceAccessor.java:33) ~[liquibase-core-4.0.0.jar!/:na]
at liquibase.parser.core.xml.LiquibaseEntityResolver.resolveEntity(LiquibaseEntityResolver.java:40) ~[liquibase-core-4.0.0.jar!/:na]
at java.xml/com.sun.org.apache.xerces.internal.util.EntityResolver2Wrapper.resolveEntity(Unknown Source) ~[na:na]
at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source) ~[na:na]
at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) ~[na:na]
at liquibase.parser.core.xml.XMLChangeLogSAXParser.parseToNode(XMLChangeLogSAXParser.java:91) ~[liquibase-core-4.0.0.jar!/:na]
at liquibase.parser.core.xml.AbstractChangeLogParser.parse(AbstractChangeLogParser.java:15) ~[liquibase-core-4.0.0.jar!/:na]
at liquibase.Liquibase.getDatabaseChangeLog(Liquibase.java:223) ~[liquibase-core-4.0.0.jar!/:na]
at liquibase.Liquibase$1.run(Liquibase.java:194) ~[liquibase-core-4.0.0.jar!/:na]
at liquibase.Scope.lambda$child$0(Scope.java:159) ~[liquibase-core-4.0.0.jar!/:na]
at liquibase.Scope.child(Scope.java:170) ~[liquibase-core-4.0.0.jar!/:na]
at liquibase.Scope.child(Scope.java:158) ~[liquibase-core-4.0.0.jar!/:na]
at liquibase.Scope.child(Scope.java:137) ~[liquibase-core-4.0.0.jar!/:na]
at liquibase.Liquibase.runInScope(Liquibase.java:1790) ~[liquibase-core-4.0.0.jar!/:na]
at liquibase.Liquibase.update(Liquibase.java:183) ~[liquibase-core-4.0.0.jar!/:na]
at liquibase.Liquibase.update(Liquibase.java:179) ~[liquibase-core-4.0.0.jar!/:na]
at liquibase.integration.spring.SpringLiquibase.performUpdate(SpringLiquibase.java:322) ~[liquibase-core-4.0.0.jar!/:na]
at liquibase.integration.spring.SpringLiquibase.afterPropertiesSet(SpringLiquibase.java:270) ~[liquibase-core-4.0.0.jar!/:na]
at org.springframework.boot.autoconfigure.liquibase.DataSourceClosingSpringLiquibase.afterPropertiesSet(DataSourceClosingSpringLiquibase.java:46) ~[spring-boot-autoconfigure-2.3.1.RELEASE.jar!/:2.3.1.RELEASE]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.getServletContextInitializerBeans(ServletWebServerApplicationContext.java:255) ~[spring-boot-2.3.1.RELEASE.jar!/:2.3.1.RELEASE]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.selfInitialize(ServletWebServerApplicationContext.java:229) ~[spring-boot-2.3.1.RELEASE.jar!/:2.3.1.RELEASE]
at org.springframework.boot.web.embedded.tomcat.TomcatStarter.onStartup(TomcatStarter.java:53) ~[spring-boot-2.3.1.RELEASE.jar!/:2.3.1.RELEASE]
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5128) ~[tomcat-embed-core-9.0.36.jar!/:9.0.36]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat-embed-core-9.0.36.jar!/:9.0.36]
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384) ~[tomcat-embed-core-9.0.36.jar!/:9.0.36]
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374) ~[tomcat-embed-core-9.0.36.jar!/:9.0.36]
at java.base/java.util.concurrent.FutureTask.run(Unknown Source) ~[na:na]
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) ~[tomcat-embed-core-9.0.36.jar!/:9.0.36]
at java.base/java.util.concurrent.AbstractExecutorService.submit(Unknown Source) ~[na:na]
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909) ~[tomcat-embed-core-9.0.36.jar!/:9.0.36]
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:841) ~[tomcat-embed-core-9.0.36.jar!/:9.0.36]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat-embed-core-9.0.36.jar!/:9.0.36]
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384) ~[tomcat-embed-core-9.0.36.jar!/:9.0.36]
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374) ~[tomcat-embed-core-9.0.36.jar!/:9.0.36]
......
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237) ~[spring-boot-2.3.1.RELEASE.jar!/:2.3.1.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) ~[spring-boot-2.3.1.RELEASE.jar!/:2.3.1.RELEASE]
at com.vyv.hov2.MinimalApplication.main(MinimalApplication.java:74) ~[classes!/:2]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Unknown Source) ~[na:na]
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49) ~[hov2.jar:2]
at org.springframework.boot.loader.Launcher.launch(Launcher.java:109) ~[hov2.jar:2]
at org.springframework.boot.loader.Launcher.launch(Launcher.java:58) ~[hov2.jar:2]
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88) ~[hov2.jar:2]
pom.xml 查看使用的版本:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>xxxx</groupId>
<artifactId>xxxx</artifactId>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<spring-boot.version>2.3.1.RELEASE</spring-boot.version>
<hibernate.version>5.4.12.Final</hibernate.version>
<liquibase-core.version>4.0.0</liquibase-core.version>
<liquibase-maven-plugin.version>4.0.0</liquibase-maven-plugin.version>
<liquibase-hibernate5.version>4.0.0</liquibase-hibernate5.version>
<validation-api.version>2.0.1.Final</validation-api.version>
<javassist.version>3.27.0-GA</javassist.version>
<jaxb-api.version>2.4.0-b180830.0359</jaxb-api.version>
<maven.build.timestamp.format>yyyy-MM-dd'T'HH.mm.ss</maven.build.timestamp.format>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<scope>provided</scope>
</dependency>
<!-- JPA + Postgresql -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.2.Final</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>${validation-api.version}</version>
</dependency>
</dependencies>
<profiles>
<profile>
<id>dev</id>
<properties>
<activatedProperties>dev</activatedProperties>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>prod</id>
<properties>
<activatedProperties>prod</activatedProperties>
</properties>
</profile>
</profiles>
<build>
<plugins>
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>${liquibase-maven-plugin.version}</version>
<configuration>
<propertyFile>src/main/resources/liquibase-${activatedProperties}.properties</propertyFile>
<outputChangeLogFile>src/main/resources/db/db.changelog-${activatedProperties}.xml</outputChangeLogFile>
<changeLogFile>src/main/resources/db/db.changelog-${activatedProperties}.xml</changeLogFile>
<diffChangeLogFile>src/main/resources/db/changelog/${activatedProperties}/${maven.build.timestamp}_changelog.xml</diffChangeLogFile>
<diffTypes>tables,columns,indexes,foreignkeys,primarykeys,uniqueconstraints</diffTypes>
<logging>info</logging>
</configuration>
<!-- Liquibase dependencies-->
<dependencies>
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
<version>${liquibase-core.version}</version>
</dependency>
<dependency>
<groupId>org.liquibase.ext</groupId>
<artifactId>liquibase-hibernate5</artifactId>
<version>${liquibase-hibernate5.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>${spring-boot.version}</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>${validation-api.version}</version>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>${javassist.version}</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>${jaxb-api.version}</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>${postgresql.version}</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>3.12.0</version>
<executions>
<execution>
<id>pmd-scan</id>
<phase>verify</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
liquibase-dev.properties:
url=jdbc:postgresql://${DB_HOST}:${DB_PORT}/${DB_NAME}
username=xxxx
password=xxxx
driver=org.postgresql.Driver
#### Reference database properties
referenceUrl=hibernate:spring:com.vyv.hov2.domain?dialect=org.hibernate.dialect.PostgreSQLDialect
referenceDriver=liquibase.ext.hibernate.database.connection.HibernateDriver
referenceDefaultSchemaName=db
verbose=true
jetty 文件:
FROM maven:3.6.3-openjdk-11-slim as BUILD
WORKDIR /usr/src/app
COPY checkstyle.xml .
COPY checkstyle-supressions.xml .
COPY licenseheader.txt .
COPY pom.xml .
RUN mvn dependency:go-offline
COPY src src
COPY .git ./.git/
RUN mvn -B -e -C -T 1C package -Dmaven.test.skip=true
FROM openjdk:11.0.8-jre
EXPOSE 8081
COPY --from=BUILD /usr/src/app/target/*.jar /opt/target/hov2.jar
WORKDIR /opt/target
ENV TZ="America/Bogota"
ENV SPRING_PROFILES_ACTIVE="dev"
ENV APP_HTTP_THREADS="4"
ENV DB_MAX_POOL="4"
ENV DB_CONN_TIMEOUT="20000"
ENV DB_HOST="192.168.x.x"
ENV DB_PORT="xxxx"
ENV DB_NAME="yyyy"
ENV DB_USER="zzzz"
ENV DB_PASSWORD="zzzz"
RUN apt-get -y update && apt-get -y install apt-utils tzdata && apt-get -y clean
ENTRYPOINT exec java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar hov2.jar $JAR_OPTS
docker build 的结果是:
D:\GitLab\hov2-springboot>docker build -t xxxx/hov:spring .
Sending build context to Docker daemon 69.29MB
Step 1/27 : FROM maven:3.6.3-openjdk-11-slim as BUILD
---> 5f736c971204
Step 2/27 : MAINTAINER xxxxx
---> Using cache
---> 58e7bae3a780
Step 3/27 : WORKDIR /usr/src/app
---> Using cache
---> b790cb47ac8e
Step 4/27 : COPY checkstyle-GlobalRemises.xml .
---> Using cache
---> 105a291c538e
Step 5/27 : COPY checkstyle-supressions.xml .
---> Using cache
---> 59f933795b44
Step 6/27 : COPY licenseheader.txt .
---> Using cache
---> 227d608636c9
Step 7/27 : COPY pom.xml .
---> Using cache
---> 3de8cfcf50ce
Step 8/27 : RUN mvn -B dependency:resolve dependency:resolve-plugins
---> Using cache
---> 4505edb08bc0
Step 9/27 : COPY src src
---> 5580f85e37b0
Step 10/27 : COPY .git ./.git/
---> 9ffa9fdd1d6b
Step 11/27 : RUN mvn -B -e -C -T 1C package -Dmaven.test.skip=true
---> Running in db75577e3260
[INFO] Error stacktraces are turned on.
[INFO] Scanning for projects...
[INFO]
[INFO] Using the MultiThreadedBuilder implementation with a thread count of 8
[INFO]
[INFO] --------------------< com.vyv.hov2:HOV2-SpringBoot >--------------------
[INFO] Building HerramientaOperativa 2
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ HOV2-SpringBoot ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 3 resources
[INFO] Copying 994 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ HOV2-SpringBoot ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 536 source files to /usr/src/app/target/classes
[INFO] --- jacoco-maven-plugin:0.8.4:report (report) @ HOV2-SpringBoot ---
[INFO] Skipping JaCoCo execution due to missing execution data file.
[INFO]
[INFO] --- maven-jar-plugin:3.2.0:jar (default-jar) @ HOV2-SpringBoot ---
[INFO] Building jar: /usr/src/app/target/HOV2-SpringBoot-2.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:2.3.1.RELEASE:repackage (repackage) @ HOV2-SpringBoot ---
[INFO] Replacing main artifact with repackaged archive
[INFO]
[INFO] --- spring-boot-maven-plugin:2.3.1.RELEASE:repackage (default) @ HOV2-SpringBoot ---
[INFO] Replacing main artifact with repackaged archive
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 20.784 s (Wall Clock)
[INFO] Finished at: 2020-09-01T05:07:54Z
[INFO] ------------------------------------------------------------------------
Removing intermediate container db75577e3260
---> 419a981baa13
Step 12/27 : FROM openjdk:11.0.8-jre
---> 9cbf6d4bac44
Step 13/27 : EXPOSE 8081
---> Using cache
---> 48eec46f876c
Step 14/27 : COPY --from=BUILD /usr/src/app/target/*.jar /opt/target/hov2.jar
---> 13d80ab4c8a9
Step 15/27 : WORKDIR /opt/target
---> Running in f87f4fa28359
Removing intermediate container f87f4fa28359
---> c00e6df5a4a3
Step 16/27 : ENV TZ="America/Bogota"
---> Running in 09d317dc80d3
Removing intermediate container 09d317dc80d3
---> 57e64896eb41
Step 17/27 : ENV SPRING_PROFILES_ACTIVE=""
Step 26/27 : RUN apt-get -y update && apt-get -y install apt-utils tzdata && apt-get -y clean
---> Running in 180a8975bfa8
Get:1 http://deb.debian.org/debian buster InRelease [122 kB]
Get:2 http://security.debian.org/debian-security buster/updates InRelease [65.4 kB]
Get:3 http://deb.debian.org/debian buster-updates InRelease [51.9 kB]
Get:4 http://security.debian.org/debian-security buster/updates/main amd64 Packages [224 kB]
Get:5 http://deb.debian.org/debian buster/main amd64 Packages [7906 kB]
Get:6 http://deb.debian.org/debian buster-updates/main amd64 Packages [7868 B]
Fetched 8378 kB in 4s (2176 kB/s)
Reading package lists...
Reading package lists...
Building dependency tree...
Reading state information...
tzdata is already the newest version (2020a-0+deb10u1).
tzdata set to manually installed.
The following NEW packages will be installed:
apt-utils libapt-inst2.0
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 624 kB of archives.
After this operation, 1650 kB of additional disk space will be used.
Get:1 http://deb.debian.org/debian buster/main amd64 libapt-inst2.0 amd64 1.8.2.1 [203 kB]
Get:2 http://deb.debian.org/debian buster/main amd64 apt-utils amd64 1.8.2.1 [421 kB]
debconf: delaying package configuration, since apt-utils is not installed
Fetched 624 kB in 1s (796 kB/s)
Selecting previously unselected package libapt-inst2.0:amd64.
(Reading database ... 7867 files and directories currently installed.)
Preparing to unpack .../libapt-inst2.0_1.8.2.1_amd64.deb ...
Unpacking libapt-inst2.0:amd64 (1.8.2.1) ...
Selecting previously unselected package apt-utils.
Preparing to unpack .../apt-utils_1.8.2.1_amd64.deb ...
Unpacking apt-utils (1.8.2.1) ...
Setting up libapt-inst2.0:amd64 (1.8.2.1) ...
Setting up apt-utils (1.8.2.1) ...
Processing triggers for libc-bin (2.28-10) ...
Removing intermediate container 180a8975bfa8
---> 6b67dd296d7e
Step 27/27 : ENTRYPOINT exec java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar hov2.jar $JAR_OPTS
---> Running in d8740b5c5e53
Removing intermediate container d8740b5c5e53
---> ca68efe70b02
Successfully built ca68efe70b02
Successfully tagged xxxx/hov:spring
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It
is recommended to double check and reset permissions for sensitive files and directories.
liquibase 部分的 dev.properties
# ************* liquibase for DEV
spring.liquibase.enabled=true
spring.liquibase.url=jdbc:postgresql://${DB_HOST}:${DB_PORT}/${DB_NAME}
# Change log configuration path.
spring.liquibase.change-Log=classpath:/db/db.changelog-dev.xml
#spring.liquibase.contexts= # Comma-separated list of runtime contexts to use.
# Name of table to use for tracking concurrent Liquibase usage.
spring.liquibase.database-change-log-lock-table=DATABASECHANGELOGLOCK
# Name of table to use for tracking change history.
spring.liquibase.database-change-log-table=DATABASECHANGELOG
#spring.liquibase.default-schema=
# Whether to first drop the database schema.
spring.liquibase.drop-first=false
spring.liquibase.password=xxxx
spring.liquibase.user=xxxx
当启动 docker(使用 dev 上下文)时一切正常,直到 liquibase 插件启动,然后出现数千行错误(类路径中每个 Jar 出现一个错误),然后在这些错误之后应用程序正常启动,唯一的问题是 liquibase 变更日志当然没有执行,因此插件失去了大部分实用性......
这里是没有错误的启动日志,以防这里有有用的东西:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.3.1.RELEASE)
2020-09-01 00:11:02.477 INFO 1 --- [ main] com.vyv.hov2.MinimalApplication : Starting MinimalApplication v2 on c795be63b326 with PID 1 (/opt/target/hov2.jar started by root in /opt/target)
2020-09-01 00:11:02.484 INFO 1 --- [ main] com.vyv.hov2.MinimalApplication : The following profiles are active: dev
2020-09-01 00:11:05.413 INFO 1 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2020-09-01 00:11:06.555 INFO 1 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 1120ms. Found 92 JPA repository interfaces.
2020-09-01 00:11:08.286 INFO 1 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler@2f40a43' of type [org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2020-09-01 00:11:08.298 INFO 1 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'methodSecurityMetadataSource' of type [org.springframework.security.access.method.DelegatingMethodSecurityMetadataSource] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2020-09-01 00:11:08.993 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8081 (https)
2020-09-01 00:11:09.013 INFO 1 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2020-09-01 00:11:09.013 INFO 1 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.36]
2020-09-01 00:11:09.136 INFO 1 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2020-09-01 00:11:09.137 INFO 1 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 6415 ms
2020-09-01 00:11:09.465 INFO 1 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2020-09-01 00:11:09.722 INFO 1 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2020-09-01 00:11:10.384 INFO 1 --- [ main] liquibase.lockservice : Successfully acquired change log lock
2020-09-01 00:11:10.435 WARN 1 --- [ main] liquibase.integration : Cannot create filesystem for url jar:file:/opt/target/hov2.jar!/BOOT-INF/classes!/: null
java.nio.file.FileSystemNotFoundException: null
Here come the hundreds of error ... then the rest is normal again:
2020-09-01 00:11:11.871 INFO 1 --- [ main] liquibase.changelog : Reading from public.databasechangelog
2020-09-01 00:11:11.925 INFO 1 --- [ main] liquibase.lockservice : Successfully released change log lock
2020-09-01 00:11:11.935 INFO 1 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
2020-09-01 00:11:11.946 INFO 1 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
2020-09-01 00:11:12.096 INFO 1 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-2 - Starting...
2020-09-01 00:11:12.134 INFO 1 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-2 - Start completed.
2020-09-01 00:11:12.312 INFO 1 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
2020-09-01 00:11:12.467 INFO 1 --- [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.12.Final
我做错了什么? 我的一个想法是 pom.xml 中指示的 db-changelog-dev.xml 的路径在我的计算机和 docker 中不相同,但这个路径是相对于 src 文件夹的,所以我不不知道怎么改... 我有这个想法是因为在 springboot 启动的日志中我们可以看到 liquibase 获得了数据库 changlog 表的锁,但是 liquibase 在任何地方都看不到 db-changelog-dev.xml 的打开,并且错误与文件系统错误,所以它似乎与我有关,但我没有设法解决它。 感谢任何能让我走上正轨的想法。
感谢@shrom,抛出异常的第一个 liquibase 方法具有以下 javadocs:
/**
* The classloader search logic in {@link #list(String, String, boolean, boolean, boolean)} does not handle jar files well.
* This method is called by that method to populate {@link #rootPaths} with additional paths to search.
*/
我喜欢“不能很好地处理 jar 文件”!这是轻描淡写的说法。 看起来这些警告不是我在 liquibase 插件不执行数据库更新时遇到的问题的根源。我一定在其他地方遇到了另一个问题,因为根据上面引用的其他帖子,其他用户有这些错误,但数据库已更新。而且他们只是警告而不是真正的错误......我会继续挖掘。
最佳答案
找到原因:
为了摆脱这些错误,我不得不深入更改我的 pom.xml。 我删除了属性部分中已经在引用的 springboot 父级(特别是在 spring-boot-dependencies-2.3.1.RELEASE.pom 中)中具有值的所有硬编码版本号,而是使用了该文件的属性。结果,一些生成的版本较低,但我比我自己更相信 spring 可以指示插件的正确兼容版本。生成的 POM 如下:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<java.version>11</java.version>
<liquibase-hibernate5.version>3.10.1</liquibase-hibernate5.version>
<javassist.version>3.27.0-GA</javassist.version>
<maven.build.timestamp.format>yyyy-MM-dd'T'HH.mm.ss</maven.build.timestamp.format>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
</dependency>
...
<build>
<plugins>
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>${liquibase.version}</version>
<configuration>
<propertyFile>src/main/resources/liquibase-${activatedProperties}.properties</propertyFile>
<outputChangeLogFile>src/main/resources/db/db.changelog-${activatedProperties}.xml</outputChangeLogFile>
<changeLogFile>src/main/resources/db/db.changelog-${activatedProperties}.xml</changeLogFile>
<diffChangeLogFile>src/main/resources/db/changelog/${activatedProperties}/${maven.build.timestamp}_changelog.xml</diffChangeLogFile>
<diffTypes>tables,columns,indexes,foreignkeys,primarykeys,uniqueconstraints</diffTypes>
<!-- diffTypes=tables, views, columns, indexes, foreignkeys, primarykeys, uniqueconstraints, data -->
<logging>info</logging>
</configuration>
<!-- Liquibase dependencies-->
<dependencies>
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
<version>${liquibase.version}</version>
</dependency>
<dependency>
<groupId>org.liquibase.ext</groupId>
<artifactId>liquibase-hibernate5</artifactId>
<version>${liquibase-hibernate5.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>${spring-boot.version}</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>${javax-validation.version}</version>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>${javassist.version}</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>${javax-jaxb.version}</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>${postgresql.version}</version>
</dependency>
</dependencies>
</plugin>
<plugin>
...
在插件部分的这个 pom 中,您将看到版本号属性,这些值是从 SpringBoot pom 继承的,不再在我自己的 pom 中硬编码。
现在在 Docker 中运行良好! 如果您有同样的问题,但我的回答不允许您解决它,请发表评论,我将添加我也进行的其他更改,目前,我怀疑是否有任何影响。
关于Java SpringBoot : when inside a Docker the liquibase plugin runs with errors and does not execute changelogs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63682268/