2017-08-01 271 views
0

我在運行production environment時發生異常,但在本地正常工作。liquibase.exception.DatabaseException:重複條目

ing bean with name 'jobLauncher' defined in class path resource [config/spring/batch/lms-draw-result-batch-jobs-context.xml]: Cannot resolve reference to bean 'jobRepository' while setting bean property 'jobRepository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jobRepository' defined in class path resource [config/spring/batch/lms-draw-result-batch-jobs-context.xml]: Cannot resolve reference to bean 'transactionManager' while setting bean property 'transactionManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in class path resource [config/spring/lms-txnconfig-context.xml]: Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'liquibase' defined in class path resource [config/spring/lms-dbconfig-context.xml]: Invocation of init method failed; nested exception is `liquibase.exception.MigrationFailedException: Migration failed for change set db/changelog/db.changelog-1.7.xml:`:update-draw-id-to-winning_result::Mohamed Musni: 
    Reason: liquibase.exception.DatabaseException: Duplicate entry '1340' for key 'draw_id' [Failed SQL: ALTER TABLE lms_staging.winning_result ADD UNIQUE (draw_id)] 
2017-08-01 15:06:35 [localhost-startStop-1] INFO SchedulerFactoryBean:765 - Shutting down Quartz Scheduler 
2017-08-01 15:06:35 [localhost-startStop-1] INFO QuartzScheduler:694 - Scheduler org.springframework.scheduling.quartz.SchedulerFactoryBean#0_$_NON_CLUSTERED shutting down. 
2017-08-01 15:06:35 [localhost-startStop-1] INFO QuartzScheduler:613 - Scheduler org.springframework.scheduling.quartz.SchedulerFactoryBean#0_$_NON_CLUSTERED paused. 
2017-08-01 15:06:35 [localhost-startStop-1] INFO QuartzScheduler:771 - Scheduler org.springframework.scheduling.quartz.SchedulerFactoryBean#0_$_NON_CLUSTERED shutdown complete. 
2017-08-01 15:06:35 [localhost-startStop-1] INFO ThreadPoolTaskScheduler:203 - Shutting down ExecutorService 'messageBrokerTaskScheduler' 
2017-08-01 15:06:35 [localhost-startStop-1] INFO ThreadPoolTaskExecutor:203 - Shutting down ExecutorService 'brokerChannelExecutor' 
2017-08-01 15:06:35 [localhost-startStop-1] INFO ThreadPoolTaskExecutor:203 - Shutting down ExecutorService 'clientOutboundChannelExecutor' 
2017-08-01 15:06:35 [localhost-startStop-1] INFO ThreadPoolTaskExecutor:203 - Shutting down ExecutorService 'clientInboundChannelExecutor' 
2017-08-01 15:06:35 [localhost-startStop-1] INFO ThreadPoolTaskExecutor:203 - Shutting down ExecutorService 'taskExecutor' 
2017-08-01 15:06:35 [localhost-startStop-1] ERROR ContextLoader:353 - Context initialization failed 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'schedulerController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.auxenta.lms.service.DrawManagementService com.auxenta.lms.controller.web.v1.SchedulerController.drawManagementService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'drawManagementServiceImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: org.springframework.batch.core.launch.JobLauncher com.auxenta.lms.service.Impl.DrawManagementServiceImpl.jobLauncher; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jobLauncher' defined in class path resource [config/spring/batch/lms-draw-result-batch-jobs-context.xml]: Cannot resolve reference to bean 'jobRepository' while setting bean property 'jobRepository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jobRepository' defined in class path resource [config/spring/batch/lms-draw-result-batch-jobs-context.xml]: Cannot resolve reference to bean 'transactionManager' while setting bean property 'transactionManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in class path resource [config/spring/lms-txnconfig-context.xml]: Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'liquibase' defined in class path resource [config/spring/lms-dbconfig-context.xml]: Invocation of init method failed; nested exception is liquibase.exception.MigrationFailedException: Migration failed for change set db/changelog/db.changelog-1.7.xml::update-draw-id-to-winning_result::Mohamed Musni: 
    Reason: liquibase.exception.DatabaseException: Duplicate entry '1340' for key 'draw_id' [Failed SQL: ALTER TABLE lms_staging.winning_result ADD UNIQUE (draw_id)] 
     at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772) 
     at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839) 
     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538) 
     at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:446) 
     at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:328) 
     at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107) 
     at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4961) 
     at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5455) 
     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
     at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) 
     at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) 
     at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:634) 
     at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1074) 
     at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1858) 
     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
     at java.lang.Thread.run(Thread.java:744) 

這裏是我的CREATETABLE xml文件

<changeSet author="zzzzzzzzzz" id="1-create-winning_result"> 
     <createTable tableName="winning_result"> 
      <column autoIncrement="true" name="id" type="INT"> 
       <constraints primaryKey="true"/> 
      </column> 
      <column name="draw_id" type="INT"/> 
      <column name="winning_numbers" type="VARCHAR(45)"/> 
      <column name="bonus_numbers" type="VARCHAR(45)"/> 
      <column name="special_numbers" type="VARCHAR(45)"/> 
      <column name="approved" type="BIT(1)"/> 
      <column name="timestamp" type="datetime"/> 
     </createTable> 
    </changeSet> 

這裏ForeignKeyConstraint也

<changeSet author="zzzzzzzzzz" id="2-add-foreign-constraint"> 
     <addForeignKeyConstraint baseColumnNames="draw_id" 
           baseTableName="winning_result" 
           constraintName="fk_draw_winning_result" 
           deferrable="false" 
           initiallyDeferred="false" onDelete="NO ACTION" 
           onUpdate="NO ACTION" referencedColumnNames="id" 
           referencedTableName="draw"/> 
    </changeSet> 

我需要draw_id到unique.my(DB /變化/ DB .changelog-1.7.xml)文件--->

  <addUniqueConstraint 
           columnNames="draw_id" 
           deferrable="true" 
           disabled="true" 
           initiallyDeferred="true" 
           tableName="winning_result"/> 
     </changeSet> 

是這個數據庫版本問題,否則other.can任何人都可以幫助我。

+1

錯誤信息是否顯示錯誤? '原因:liquibase.exception.DatabaseException:關鍵'draw_id'的重複條目'1340'[失敗的SQL:ALTER TABLE lms_staging.winning_result ADD UNIQUE(draw_id)]'。看起來你已經有一些draw_id在表中不是唯一的。 –

+0

我可以修復此與以前的數據或需要刪除重複@MadsT – Musni

+0

看看[這裏](https://stackoverflow.com/questions/17823322/1062-duplicate-entry-for-key-unique-id-當我嘗試添加唯一鍵我) –

回答

0

對預先存在的數據添加限制是一個危險的遊戲。

您的winning_result表可能已經包含一些數據,並且您嘗試使唯一(draw_id)的列不止一次包含值1340。

您必須在添加約束之前修複數據(刪除重複的1340 na或其他值)或放棄添加約束。

+0

yep刪除重複values.that問題fixed.but我得到了另一個問題this.previously有ForeignKeyConstraint draw_id在winning_result table.when我添加UniqueConstraint它去了質量保證環境。但本地它不是romoving和工作fine.may我知道任何方法來解決this.anything abt版本問題或其他@大衛Vonka – Musni

+0

我可以添加UniqueConstraint而不影響ForeignKeyConstraint @David Vonka – Musni