Как отключить Javers от создания таблиц при запуске приложения - PullRequest
1 голос
/ 16 октября 2019

Я пытаюсь работать с приложением, которое не запускается из-за ошибок при создании таблицы Javers (проблема связана с проблемами БД приложения). Есть ли способ, которым я могу запретить javers создавать таблицы во время запуска приложения (такие как jv_commit), чтобы я мог работать с приложением, пока администратор БД исправляет проблемы с БД (это займет время)?

Я добавил следующеев application.yml, (не уверен, что это правильный путь)

  Javers:
           sqlSchemaManagementEnabled: false
           auditableAspectEnabled: false
           springDataAuditableRepositoryAspectEnabled: false

Я также закомментировал @JaversSpringDataAuditable во всех классах репозитория.

Используется зависимость Javers

 <dependency>
                <groupId>org.javers</groupId>
                <artifactId>javers-spring-jpa</artifactId>
                <version>5.7.0</version>
            </dependency>

Журнал ошибок

2019-10-16 16:51:32,796 25724 INFO  [main] o.p.core.schema.SchemaManagerImpl [SchemaManagerImpl.java:51] --- creating entity with name jv_commit using ddl:
CREATE TABLE jv_commit (
commit_pk NUMBER NOT NULL,
author VARCHAR2(200),
commit_date TIMESTAMP,
commit_date_instant VARCHAR2(30),
commit_id NUMBER(22,2),
CONSTRAINT jv_commit_pk PRIMARY KEY(commit_pk)
)  
2019-10-16 16:51:33,903 25724 WARN  [main] o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext [AbstractApplicationContext.java:557] --- Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'javers' defined in class path resource [com/common/audit/JaversSpringJpaApplicationConfig.class]: Invocation of init method failed; nested exception is org.polyjdbc.core.exception.SchemaManagerException: [DDL_ERROR] Failed to run DDL:
CREATE TABLE jv_commit (
commit_pk NUMBER NOT NULL,
author VARCHAR2(200),
commit_date TIMESTAMP,
commit_date_instant VARCHAR2(30),
commit_id NUMBER(22,2),
CONSTRAINT jv_commit_pk PRIMARY KEY(commit_pk)
)  
2019-10-16 16:51:33,935 25724 INFO  [main] o.s.o.j.LocalContainerEntityManagerFactoryBean [AbstractEntityManagerFactoryBean.java:597] --- Closing JPA EntityManagerFactory for persistence unit 'default' 
2019-10-16 16:51:33,938 25724 INFO  [main] com.zaxxer.hikari.HikariDataSource [HikariDataSource.java:350] --- HikariPool-1 - Shutdown initiated... 
2019-10-16 16:51:36,487 25724 INFO  [main] com.zaxxer.hikari.HikariDataSource [HikariDataSource.java:352] --- HikariPool-1 - Shutdown completed. 
2019-10-16 16:51:36,493 25724 INFO  [main] o.a.catalina.core.StandardService [DirectJDKLog.java:173] --- Stopping service [Tomcat] 
2019-10-16 16:51:36,496 25724 INFO  [main] c.v.u.c.filter.AuditLoggingFilter [AuditLoggingFilter.java:195] --- in Filter destroy method 
2019-10-16 16:51:36,516 25724 WARN  [main] o.a.c.loader.WebappClassLoaderBase [DirectJDKLog.java:173] --- The web application [ROOT] appears to have started a thread named [RxIoScheduler-1 (Evictor)] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
 sun.misc.Unsafe.park(Native Method)
 java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
 java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
 java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)
 java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
 java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
 java.lang.Thread.run(Thread.java:745) 
2019-10-16 16:51:36,528 25724 INFO  [main] o.s.b.a.l.ConditionEvaluationReportLoggingListener [ConditionEvaluationReportLoggingListener.java:135] --- 

1 Ответ

1 голос
/ 17 октября 2019

Переключатель sqlSchemaManagementEnabled управляется стартером JaVers Spring Boot, см. https://javers.org/documentation/spring-boot-integration/

Если вы не используете стартер, переключатель не будет считан, но все же вы можете установить этот переключательпри создании экземпляра Javers:

        def javers = JaversBuilder.javers()
                .registerJaversRepository(sqlRepository()
                .withConnectionProvider({ DriverManager.getConnection("jdbc:h2:mem:empty-test") } as ConnectionProvider)
                .withSchemaManagementEnabled(false)
                .withDialect(getDialect())
                .build()).build()

...