gpt4 book ai didi

java - 每分钟检查数据库并执行操作的最佳方法?

转载 作者:行者123 更新时间:2023-11-30 06:05:47 26 4
gpt4 key购买 nike

我有一个电子商务应用程序。我有一个 Item 实体,只要该项目的结束日期时间等于当前时间,该 Item 的状态就应该更改(我还需要执行其他 SQL 操作,例如向表中插入一行)

基本上,我想执行一个 SQL 操作,每分钟检查数据库并更改实体。

我对如何实现这个有一些想法:

  • 在我的 Linux 服务器中安排一项作业,每分钟检查一次数据库
  • 使用 sp_executesql (Transact-SQL) 或 DBMS 计划程序
  • 在我的 Java 后端中运行一个线程来检查数据库并执行操作。

我对此很陌生,所以我不知道如何实现它。考虑到可扩展性性能,最有效的实现是什么?

其他信息:数据库是SQL Server,服务器是Linux,后端是Java Spring Boot。

最佳答案

如果您需要在插入或更新后运行脚本,您可以在触发器中合并所有复杂的逻辑(例如,在其他表中插入行、更新状态列等):

这是一个示例表架构:

CREATE TABLE t1 (id INT IDENTITY(1,1), start_time DATETIME, end_time DATETIME, 
status VARCHAR(25))

以及该表的示例插入/更新触发器:

CREATE TRIGGER u_t1 
ON t1
AFTER INSERT,UPDATE
AS
BEGIN
UPDATE t1
SET status = CASE WHEN inserted.end_time = inserted.start_time
THEN 'same' ELSE 'different' END
FROM t1
INNER JOIN inserted ON t1.id = inserted.id

-- do anything else you want!
-- e.g.
-- INSERT INTO t2 (id, status) SELECT id, status FROM inserted
END
GO

插入一些测试记录:

INSERT INTO t1 (start_time, end_time) 
VALUES
(GETDATE(), GETDATE() - 1), -- different
(GETDATE(), GETDATE()) -- same

插入后查询表:

SELECT * FROM t1

查看状态计算是否正确:

id  start_time              end_time                status
1 2018-07-17 02:53:24.577 2018-07-16 02:53:24.577 different
2 2018-07-17 02:53:24.577 2018-07-17 02:53:24.577 same

如果您的唯一目标是根据表中的其他值更新状态列,那么计算列是最简单的方法;您只需提供公式:

create table t1 (id int identity(1,1), start_time datetime, end_time datetime, 
status as
case
when start_time is null then 'start null'
when end_time is null then 'end null'
when start_time < end_time then 'start less'
when end_time < start_time then 'end less'
when start_time = end_time then 'same'
else 'what?'
end
)

关于java - 每分钟检查数据库并执行操作的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51375012/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com