Ryan Wang 👍

	at org.flywaydb.core.internal.command.DbMigrate.doMigrateGroup(DbMigrate.java:378) ~[flyway-core-7.15.0.jar:na]
	at org.flywaydb.core.internal.command.DbMigrate.lambda$applyMigrations$1(DbMigrate.java:271) ~[flyway-core-7.15.0.jar:na]
	at org.flywaydb.core.internal.jdbc.TransactionalExecutionTemplate.execute(TransactionalExecutionTemplate.java:66) ~[flyway-core-7.15.0.jar:na]
	at org.flywaydb.core.internal.command.DbMigrate.applyMigrations(DbMigrate.java:270) ~[flyway-core-7.15.0.jar:na]
	at org.flywaydb.core.internal.command.DbMigrate.migrateGroup(DbMigrate.java:243) ~[flyway-core-7.15.0.jar:na]
	at org.flywaydb.core.internal.command.DbMigrate.lambda$migrateAll$0(DbMigrate.java:141) ~[flyway-core-7.15.0.jar:na]
	at org.flywaydb.core.internal.jdbc.TableLockingExecutionTemplate$1.call(TableLockingExecutionTemplate.java:38) ~[flyway-core-7.15.0.jar:na]
	at org.flywaydb.core.internal.jdbc.TransactionalExecutionTemplate.execute(TransactionalExecutionTemplate.java:66) ~[flyway-core-7.15.0.jar:na]
	at org.flywaydb.core.internal.jdbc.TableLockingExecutionTemplate.execute(TableLockingExecutionTemplate.java:33) ~[flyway-core-7.15.0.jar:na]
	at org.flywaydb.core.internal.database.base.Connection.lock(Connection.java:103) ~[flyway-core-7.15.0.jar:na]
	at org.flywaydb.core.internal.schemahistory.JdbcTableSchemaHistory.lock(JdbcTableSchemaHistory.java:141) ~[flyway-core-7.15.0.jar:na]
	at org.flywaydb.core.internal.command.DbMigrate.migrateAll(DbMigrate.java:141) ~[flyway-core-7.15.0.jar:na]
	at org.flywaydb.core.internal.command.DbMigrate.migrate(DbMigrate.java:101) ~[flyway-core-7.15.0.jar:na]
	at org.flywaydb.core.Flyway$1.execute(Flyway.java:219) ~[flyway-core-7.15.0.jar:na]
	at org.flywaydb.core.Flyway$1.execute(Flyway.java:170) ~[flyway-core-7.15.0.jar:na]
	at org.flywaydb.core.Flyway.execute(Flyway.java:586) ~[flyway-core-7.15.0.jar:na]
	at org.flywaydb.core.Flyway.migrate(Flyway.java:170) ~[flyway-core-7.15.0.jar:na]
	at run.halo.app.listener.StartedListener.migrate(StartedListener.java:123) ~[classes/:1.5.0]
	at run.halo.app.listener.StartedListener.onApplicationEvent(StartedListener.java:76) ~[classes/:1.5.0]
	at run.halo.app.listener.StartedListener.onApplicationEvent(StartedListener.java:47) ~[classes/:1.5.0]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) ~[spring-context-5.3.16.jar:5.3.16]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) ~[spring-context-5.3.16.jar:5.3.16]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) ~[spring-context-5.3.16.jar:5.3.16]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:421) ~[spring-context-5.3.16.jar:5.3.16]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:378) ~[spring-context-5.3.16.jar:5.3.16]
	at org.springframework.boot.context.event.EventPublishingRunListener.started(EventPublishingRunListener.java:105) ~[spring-boot-2.5.10.jar:2.5.10]
	at org.springframework.boot.SpringApplicationRunListeners.lambda$started$5(SpringApplicationRunListeners.java:75) ~[spring-boot-2.5.10.jar:2.5.10]
	at java.base/java.util.ArrayList.forEach(Unknown Source) ~[na:na]
	at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:117) ~[spring-boot-2.5.10.jar:2.5.10]
	at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:111) ~[spring-boot-2.5.10.jar:2.5.10]
	at org.springframework.boot.SpringApplicationRunListeners.started(SpringApplicationRunListeners.java:75) ~[spring-boot-2.5.10.jar:2.5.10]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:345) ~[spring-boot-2.5.10.jar:2.5.10]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1365) ~[spring-boot-2.5.10.jar:2.5.10]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1354) ~[spring-boot-2.5.10.jar:2.5.10]
	at run.halo.app.Application.main(Application.java:21) ~[classes/:1.5.0]
	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) ~[application/:na]
	at org.springframework.boot.loader.Launcher.launch(Launcher.java:108) ~[application/:na]
	at org.springframework.boot.loader.Launcher.launch(Launcher.java:58) ~[application/:na]
	at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88) ~[application/:na]
Caused by: org.flywaydb.core.internal.sqlscript.FlywaySqlScriptException: Migration V6__migrate_create_contents_table.sql failed
------------------------------------------------------
SQL State  : 23505
Error Code : 23505
Message    : Unique index or primary key violation: "PRIMARY KEY ON PUBLIC.CONTENTS(POST_ID) [2, TIMESTAMP '2022-02-24 17:46:45.25', TIMESTAMP '2022-02-24 17:46:45.25', SPACE(206 /* table: 74 id: 67503 */), 2, SPACE(113 /* table: 74 id: 67504 */), 2, 0]"; SQL statement:
-- Migrate post content to contents table
INSERT INTO contents(post_id, status, patch_log_id, head_patch_log_id, content, original_content, create_time,
                     update_time)
SELECT id,
       status,
       id,
       id,
       format_content,
       original_content,
       create_time,
       update_time
FROM posts [23505-199]
Location   : migration/V6__migrate_create_contents_table.sql (/application/BOOT-INF/classes/migration/V6__migrate_create_contents_table.sql)
Line       : 2
Statement  : -- Migrate post content to contents table
INSERT INTO contents(post_id, status, patch_log_id, head_patch_log_id, content, original_content, create_time,
                     update_time)
SELECT id,
       status,
       id,
       id,
       format_content,
       original_content,
       create_time,
       update_time
FROM posts

	at org.flywaydb.core.internal.sqlscript.DefaultSqlScriptExecutor.handleException(DefaultSqlScriptExecutor.java:277) ~[flyway-core-7.15.0.jar:na]
	at org.flywaydb.core.internal.sqlscript.DefaultSqlScriptExecutor.executeStatement(DefaultSqlScriptExecutor.java:224) ~[flyway-core-7.15.0.jar:na]
	at org.flywaydb.core.internal.sqlscript.DefaultSqlScriptExecutor.execute(DefaultSqlScriptExecutor.java:128) ~[flyway-core-7.15.0.jar:na]
	at org.flywaydb.core.internal.resolver.sql.SqlMigrationExecutor.executeOnce(SqlMigrationExecutor.java:78) ~[flyway-core-7.15.0.jar:na]
	at org.flywaydb.core.internal.resolver.sql.SqlMigrationExecutor.lambda$execute$0(SqlMigrationExecutor.java:67) ~[flyway-core-7.15.0.jar:na]
	at org.flywaydb.core.internal.database.DefaultExecutionStrategy.execute(DefaultExecutionStrategy.java:27) ~[flyway-core-7.15.0.jar:na]
	at org.flywaydb.core.internal.resolver.sql.SqlMigrationExecutor.execute(SqlMigrationExecutor.java:66) ~[flyway-core-7.15.0.jar:na]
	at org.flywaydb.core.internal.command.DbMigrate.doMigrateGroup(DbMigrate.java:370) ~[flyway-core-7.15.0.jar:na]
	... 42 common frames omitted
Caused by: org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: Unique index or primary key violation: "PRIMARY KEY ON PUBLIC.CONTENTS(POST_ID) [2, TIMESTAMP '2022-02-24 17:46:45.25', TIMESTAMP '2022-02-24 17:46:45.25', SPACE(206 /* table: 74 id: 67503 */), 2, SPACE(113 /* table: 74 id: 67504 */), 2, 0]"; SQL statement:
-- Migrate post content to contents table
INSERT INTO contents(post_id, status, patch_log_id, head_patch_log_id, content, original_content, create_time,
                     update_time)
SELECT id,
       status,
       id,
       id,
       format_content,
       original_content,
       create_time,
       update_time
FROM posts [23505-199]
	at org.h2.message.DbException.getJdbcSQLException(DbException.java:457) ~[h2-1.4.199.jar:1.4.199]
	at org.h2.message.DbException.getJdbcSQLException(DbException.java:427) ~[h2-1.4.199.jar:1.4.199]
	at org.h2.message.DbException.get(DbException.java:205) ~[h2-1.4.199.jar:1.4.199]
	at org.h2.message.DbException.get(DbException.java:181) ~[h2-1.4.199.jar:1.4.199]
	at org.h2.mvstore.db.MVPrimaryIndex.add(MVPrimaryIndex.java:131) ~[h2-1.4.199.jar:1.4.199]
	at org.h2.mvstore.db.MVTable.addRow(MVTable.java:546) ~[h2-1.4.199.jar:1.4.199]
	at org.h2.command.dml.Insert.addRowImpl(Insert.java:251) ~[h2-1.4.199.jar:1.4.199]
	at org.h2.command.dml.Insert.insertRows(Insert.java:207) ~[h2-1.4.199.jar:1.4.199]
	at org.h2.command.dml.Insert.update(Insert.java:132) ~[h2-1.4.199.jar:1.4.199]
	at org.h2.command.CommandContainer.update(CommandContainer.java:133) ~[h2-1.4.199.jar:1.4.199]
	at org.h2.command.Command.executeUpdate(Command.java:267) ~[h2-1.4.199.jar:1.4.199]
	at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:233) ~[h2-1.4.199.jar:1.4.199]
	at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:205) ~[h2-1.4.199.jar:1.4.199]
	at org.flywaydb.core.internal.jdbc.JdbcTemplate.executeStatement(JdbcTemplate.java:241) ~[flyway-core-7.15.0.jar:na]
	at org.flywaydb.core.internal.sqlscript.ParsedSqlStatement.execute(ParsedSqlStatement.java:111) ~[flyway-core-7.15.0.jar:na]
	at org.flywaydb.core.internal.sqlscript.DefaultSqlScriptExecutor.executeStatement(DefaultSqlScriptExecutor.java:212) ~[flyway-core-7.15.0.jar:na]
	... 48 common frames omitted

Ryan Wang 👍

2022-03-24 17:28:45.347  INFO 7 --- [main] o.e.jetty.server.AbstractConnector       : Stopped ServerConnector@7f2b39a{HTTP/1.1, (http/1.1)}{0.0.0.0:8090}
2022-03-24 17:28:45.347  INFO 7 --- [main] org.eclipse.jetty.server.session         : node0 Stopped scavenging
2022-03-24 17:28:45.349  INFO 7 --- [main] o.e.j.s.h.ContextHandler.application     : Destroying Spring FrameworkServlet 'dispatcherServlet'
2022-03-24 17:28:45.349  INFO 7 --- [main] o.e.jetty.server.handler.ContextHandler  : Stopped o.s.b.w.e.j.JettyEmbeddedWebAppContext@2f26634a{application,/,[file:///tmp/jetty-docbase.8090.3706645506939531129/, jar:file:/application/BOOT-INF/lib/springfox-swagger-ui-3.0.0.jar!/META-INF/resources],STOPPED}
2022-03-24 17:28:45.373  INFO 7 --- [main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2022-03-24 17:28:45.375  INFO 7 --- [main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2022-03-24 17:28:45.394  INFO 7 --- [main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.
2022-03-24 17:28:48.012  INFO 7 --- [main] run.halo.app.Application                 : Starting Application v1.5.0 using Java 11.0.11 on e9e15c754199 with PID 7 (/application/BOOT-INF/classes started by root in /application)
2022-03-24 17:28:48.017  INFO 7 --- [main] run.halo.app.Application                 : No active profile set, falling back to 1 default profile: "default"
2022-03-24 17:28:49.151  INFO 7 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2022-03-24 17:28:49.151  INFO 7 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2022-03-24 17:28:49.446  INFO 7 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 287 ms. Found 24 JPA repository interfaces.
2022-03-24 17:28:50.507  INFO 7 --- [main] org.eclipse.jetty.util.log               : Logging initialized @3534ms to org.eclipse.jetty.util.log.Slf4jLog
2022-03-24 17:28:50.737  INFO 7 --- [main] o.s.b.w.e.j.JettyServletWebServerFactory : Server initialized with port: 8090
2022-03-24 17:28:50.744  INFO 7 --- [main] org.eclipse.jetty.server.Server          : jetty-9.4.45.v20220203; built: 2022-02-03T09:14:34.105Z; git: 4a0c91c0be53805e3fcffdcdcc9587d5301863db; jvm 11.0.11+9
2022-03-24 17:28:50.775  INFO 7 --- [main] o.e.j.s.h.ContextHandler.application     : Initializing Spring embedded WebApplicationContext
2022-03-24 17:28:50.775  INFO 7 --- [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2702 ms
2022-03-24 17:28:51.339  INFO 7 --- [main] run.halo.app.config.HaloConfiguration    : Halo cache store load impl : [class run.halo.app.cache.InMemoryCacheStore]
2022-03-24 17:28:51.962  INFO 7 --- [main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2022-03-24 17:28:52.010  INFO 7 --- [main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 5.4.33
2022-03-24 17:28:52.046  INFO 7 --- [main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
2022-03-24 17:28:52.189  INFO 7 --- [main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2022-03-24 17:28:52.446  INFO 7 --- [main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2022-03-24 17:28:52.483  INFO 7 --- [main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
2022-03-24 17:28:53.661  INFO 7 --- [main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2022-03-24 17:28:53.670  INFO 7 --- [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2022-03-24 17:28:54.432  INFO 7 --- [main] org.eclipse.jetty.server.session         : DefaultSessionIdManager workerName=node0
2022-03-24 17:28:54.432  INFO 7 --- [main] org.eclipse.jetty.server.session         : No SessionScavenger set, using defaults
2022-03-24 17:28:54.433  INFO 7 --- [main] org.eclipse.jetty.server.session         : node0 Scavenging every 600000ms
2022-03-24 17:28:54.443  INFO 7 --- [main] o.e.jetty.server.handler.ContextHandler  : Started o.s.b.w.e.j.JettyEmbeddedWebAppContext@33ef701e{application,/,[file:///tmp/jetty-docbase.8090.3647389999730264936/, jar:file:/application/BOOT-INF/lib/springfox-swagger-ui-3.0.0.jar!/META-INF/resources],AVAILABLE}
2022-03-24 17:28:54.443  INFO 7 --- [main] org.eclipse.jetty.server.Server          : Started @7472ms
2022-03-24 17:28:55.111  INFO 7 --- [main] run.halo.app.handler.file.FileHandlers   : Registered 9 file handler(s)
    10 天 后

    Ryan Wang 👍 关于编辑器的这个保存,最近我在写文章的时候,感觉很不符合习惯,因为我之前是写一小段就保存一下,怕死机停电什么的导致编辑的内容丢失(其实和写word每写一点就ctrl+s一个感觉)。但现在保存按钮放到里面去了,而且保存后会回到文章列表界面,相较以前增加了不少操作步骤。以前点一下保存就能继续写文章,现在是 "发布-保存-找到文章-编辑-滚到文章最下面"才能继续写

      Dark-Athena 目前就是这样设计的,以前的逻辑其实更不好理解,可能只是你习惯了。目前 Ctrl S 或者在编辑器上点击保存按钮,前台的内容是不会发生改变的,因为这篇文章属于“包含正在编辑的内容”,但还未发布。并且我们在列表和编辑页都做了提示当前内容还未保存的提示。

      以前的保存草稿按钮的体验是比较糟糕的,因为你点击之后,你前台的文章就不会显示了,因为他变成了草稿。

        Ryan Wang 👍 现在这样是对的,以前的逻辑的确有问题,我之前也是写了好多篇文章才适应,结果也还是偶尔忘记在保存后再点发布。。。

        5 天 后