Primavera-Boot configuração para suprimir BatchDataInitializer

votos
0

Eu estou usando Primavera-boot 0.5.0.M6 com a Primavera-Batch. Configuração tem usando @EnableBatchProcessing com fonte de dados, etc configurado em application.properties.

Durante a primeira execução do aplicativo, tudo funciona bem, mas depois que eu parar o aplicativo e reinicie o aplicativo, seguinte erro é visto

org.springframework.dao.DuplicateKeyException: PreparedStatementCallback; SQL [INSERT IGNORE  into BATCH_JOB_INSTANCE(JOB_INSTANCE_ID, JOB_NAME, JOB_KEY, VERSION) values (?, ?, ?, ?)]; Duplicate entry '1' for key 'PRIMARY'; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '1' for key 'PRIMARY'
    at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239)
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:659)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:908)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:969)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:974)

Quando escavação para baixo, i tinha observado após linhas em toras

2013-12-06 12:12:37 INFO  ResourceDatabasePopulator:162 - Executing SQL script from class path resource [org/springframework/batch/core/schema-mysql.sql]
2013-12-06 12:12:37 INFO  ResourceDatabasePopulator:217 - Done executing SQL script from class path resource [org/springframework/batch/core/schema-mysql.sql] in 13 ms.

raiz do problema aqui foi pelo esquema drop-mysql.sql não foi desencadeada pelo esquema mysql.sql foi acionado, criando assim duas entradas na BATCH_JOB_SEQ.

Para a resolução do mesmo, eu adicionei

@EnableAutoConfiguration(exclude={BatchAutoConfiguration.class})

No entanto, devido a isso eu preciso para executar esquema mysql.sql explicitamente, que a partir de agora é ok, mas seria problema quando versão primavera-lote seria atualizado com as atualizações no esquema

Daí tem algumas perguntas: 1. Como autoconfigure lote, mesmo para executar esquema drop-mysql.sql antes esquema mysql.sql? 2. há maneira de configurar esta BatchDatabaseInitializer para executar tipo de modo de update?

Saudações

Publicado 06/12/2013 em 07:53
fonte usuário
Em outras línguas...                            


1 respostas

votos
3

Com a versão atual do Primavera Batch autoconfiguração que não é possível com a próxima versão, é possível desativar a criação automática de tabelas de banco de dados, especificando a spring.batch.initializer.enabledpropriedade e defini-lo como false.

IMHO você não deve usar os recursos automáticos de criação / atualização para criar de qualquer esquema de fazê-lo sozinho ou utilizar ferramentas como LiquiBase ou rota migratória para fazê-lo mais controlada.

Veja também https://stackoverflow.com/questions/8418814/db-migration-tool-liquibase-or-flyway

Você sempre pode executar a schema-drop-mysql.sqlsi mesmo, como um trabalho em torno de você poderia adicionar um @PreDestroymétodo à sua @Configurationclasse que executa este script. (Talvez você pode até mesmo adicionar isso a um @Configurationclasse que é ativado apenas no modo dev / perfil).

Respondeu 06/12/2013 em 08:42
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more