java – Liquibase试图应用所有变更集,即使数据库存在

前端之家收集整理的这篇文章主要介绍了java – Liquibase试图应用所有变更集,即使数据库存在前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用 Spring-Liquibase来执行登台数据​​库所需的任何迁移.

applicationContext.xml看起来像

  1. <beans xmlns="http://www.springframework.org/schema/beans"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
  3. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
  4. <context:component-scan base-package="com.yahoo.comma"/>
  5. <bean id="liquibase" class="liquibase.integration.spring.SpringLiquibase">
  6. <property name="dataSource" ref="dataSource"/>
  7. <property name="changeLog" value="classpath:liquibase/changelog.xml"/>
  8. <property name="defaultSchema" value="pryme_dev"/>
  9. </bean>
  10. </beans>

当我部署war文件时,我看到日志中的错误

  1. INFO 6/11/14 9:32 AM:liquibase: Successfully acquired change log lock
  2. INFO 6/11/14 9:32 AM:liquibase: Reading from pryme_dev.DATABASECHANGELOG
  3. INFO 6/11/14 9:32 AM:liquibase: Reading from pryme_dev.DATABASECHANGELOG
  4. INFO 6/11/14 9:32 AM:liquibase: Reading from pryme_dev.DATABASECHANGELOG
  5. INFO 6/11/14 9:32 AM:liquibase: liquibase/changelog.xml: liquibase/2014/1-1.xml::05192014.1525::harith: Reading from pryme_dev.DATABASECHANGELOG
  6. SEVERE 6/11/14 9:32 AM:liquibase: liquibase/changelog.xml: liquibase/2014/1-1.xml::05192014.1525::harith: Change Set liquibase/2014/1-1.xml::05192014.1525::harith Failed. Error: Error executing sql CREATE TABLE pryme_dev.network (id INT NOT NULL,network_id BIGINT UNSIGNED NOT NULL,name VARCHAR(255) NOT NULL,display_name VARCHAR(255) NOT NULL,active TINYINT(1) DEFAULT 1 NOT NULL,created_at TIMESTAMP DEFAULT NOW() NOT NULL,updated_at TIMESTAMP DEFAULT '1970-01-01 00:00:01' NOT NULL,created_by VARCHAR(50) DEFAULT 'pryme_user' NULL,updated_by VARCHAR(50) DEFAULT 'pryme_user' NULL,CONSTRAINT PK_NETWORK PRIMARY KEY (id)): Table 'network' already exists
  7. liquibase.exception.DatabaseException: Error executing sql CREATE TABLE pryme_dev.network (id INT NOT NULL,CONSTRAINT PK_NETWORK PRIMARY KEY (id)): Table 'network' already exists
  8. at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:61)
  9. at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:106)
  10. at liquibase.database.AbstractJdbcDatabase.execute(AbstractJdbcDatabase.java:1189)
  11. at liquibase.database.AbstractJdbcDatabase.executeStatements(AbstractJdbcDatabase.java:1172)
  12. at liquibase.changelog.ChangeSet.execute(ChangeSet.java:352)
  13. at liquibase.changelog.visitor.UpdateVisitor.visit(UpdateVisitor.java:40)
  14. at liquibase.changelog.ChangeLogIterator.run(ChangeLogIterator.java:64)
  15. at liquibase.Liquibase.update(Liquibase.java:202)
  16. at liquibase.Liquibase.update(Liquibase.java:181)
  17. at com.yahoo.comma.persistence.DataSetupTest.liquibaseUpdate(DataSetupTest.java:53)
  18. at com.yahoo.comma.integration.IT1DataSetup.generateDataSet(IT1DataSetup.java:46)
  19. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  20. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
  21. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  22. at java.lang.reflect.Method.invoke(Method.java:606)
  23. at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
  24. at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
  25. at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
  26. at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
  27. at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
  28. at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83)
  29. at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
  30. at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:232)
  31. at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:89)
  32. at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
  33. at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
  34. at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
  35. at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
  36. at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
  37. at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
  38. at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
  39. at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
  40. at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:175)
  41. at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:236)
  42. at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:134)
  43. at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:113)
  44. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  45. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
  46. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  47. at java.lang.reflect.Method.invoke(Method.java:606)
  48. at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
  49. at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
  50. at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
  51. at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:103)
  52. at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:74)
  53. Caused by: com.MysqL.jdbc.exceptions.jdbc4.MysqLSyntaxErrorException: Table 'network' already exists
  54. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  55. at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
  56. at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
  57. at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
  58. at com.MysqL.jdbc.Util.handleNewInstance(Util.java:406)
  59. at com.MysqL.jdbc.Util.getInstance(Util.java:381)
  60. at com.MysqL.jdbc.sqlError.createsqlException(sqlError.java:1030)
  61. at com.MysqL.jdbc.sqlError.createsqlException(sqlError.java:956)
  62. at com.MysqL.jdbc.MysqLIO.checkErrorPacket(MysqLIO.java:3491)
  63. at com.MysqL.jdbc.MysqLIO.checkErrorPacket(MysqLIO.java:3423)
  64. at com.MysqL.jdbc.MysqLIO.sendCommand(MysqLIO.java:1936)
  65. at com.MysqL.jdbc.MysqLIO.sqlQueryDirect(MysqLIO.java:2060)
  66. at com.MysqL.jdbc.ConnectionImpl.execsql(ConnectionImpl.java:2536)
  67. at com.MysqL.jdbc.ConnectionImpl.execsql(ConnectionImpl.java:2465)
  68. at com.MysqL.jdbc.StatementImpl.execute(StatementImpl.java:734)
  69. at org.apache.commons.dbcp.DelegatingStatement.execute(DelegatingStatement.java:264)
  70. at org.apache.commons.dbcp.DelegatingStatement.execute(DelegatingStatement.java:264)
  71. at liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.doInStatement(JdbcExecutor.java:294)
  72. at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:54)
  73. ... 44 more
  74. INFO 6/11/14 9:32 AM:liquibase: liquibase/2014/1-1.xml::05192014.1525::harith: Successfully released change log lock
  75. 09:32:14.299 [main] DEBUG o.s.t.c.s.DirtiesContextTestExecutionListener - After test method: context [DefaultTestContext@3ba0fcf

问题
– 为什么在已填充数据库并且数据库中存在DATABASECHANGELOG文件时应用所有更改集?
– 我该如何解决这个问题?

谢谢

解决方法

问题通常是因为每个changeSet的唯一标识符的一部分是changelog文件的路径.它看起来像目前被视为“liquibase / 2014 / 1-1.xml”.

如果你运行select * from databasechangelog,其中id =’05192014.1525’数据库中已有的路径是什么?

猜你在找的Java相关文章