Continue a criar, acelere o crescimento! Este é o 5º dia da minha participação no "Nuggets Daily New Plan · June Update Challenge", clique para ver os detalhes do evento
1. Algumas extensões de seata
1.1 Suporte estendido para alterar a estrutura da tabela (como adicionar campos)
seata
Existe um mecanismo de cache para a estrutura da tabela, e o tempo padrão é de 10 minutos! ! !
Se modificarmos a estrutura da tabela, isso causará uma exceção de assento, a transação não poderá ser confirmada e um erro será relatado.
A solução é a seguinte:
1. Aguarde 10 minutos antes de operar.
2. Modifique o código-fonte e não obtenha mais a estrutura da tabela do cache.
Haha, como um de nós 程序员
, isso deve ser uma escolha 2
! ! !
Portanto, o código-fonte precisa ser modificado. No rm-datasource
diretório (seata-rm-datasource)\src\main\java, modifique a classe io.seata.rm.datasource.sql.struct. TableRecords
, conforme mostrado na figura a seguir:
Ajuste o código relevante no método buildRecords columnName
e dataType
não o obtenha mais da estrutura de tabela em cache TableMeta, mas obtenha-o de ResultSetMetaData.
1.2 Suporte estendido para atualização de associação de várias tabelas
Às vezes, quando realizamos uma operação de atualização, podemos precisar atualizar a tabela, como o seguinte sql
:
update product a, product_detail b set a.name='测试seata' where a.id=b.product_id and b.user_name='llsydn'
复制代码
No entanto, tal instrução SQL, usando uma transação seata, fará com que a transação seata não seja enviada, resultando em um erro.
seata
Não é suportado por padrão 多表关联更新
. Aqui, precisamos modificar o código-fonte.
No rm-datasource
diretório (seata-rm-datasource)\src\main\java, modifique a classe io.seata.rm.datasource.exec. UpdateExecutor
, conforme mostrado na figura a seguir:
1.2.1 banco de dados MySQL
No sqlparser
diretório do submódulo seata-sqlparser-druid\src\main\java de (seata-sqlparser), modifique a classe io.seata.sqlparser.druid.mysql.MySQLUpdateRecognizer, conforme mostrado na figura a seguir:
1.2.2 oráculo, base do rei (Congresso Nacional do Povo Jincang) e banco de dados Dameng
(1) No sqlparser
diretório do submódulo seata-sqlparser-druid\src\main\java de (seata-sqlparser), OracleUpdateRecognizer
modifique a classe io.seata.sqlparser.druid.oracle., conforme mostrado na figura a seguir:
(2) No sqlparser
diretório do submódulo seata-sqlparser-druid\src\main\java de (seata-sqlparser), OracleKeywordChecker
modifique a classe io.seata.rm.datasource.undo.oracle.keyword., conforme mostrado na figura a seguir:
1.2.3 Exemplo de instrução SQL de atualização de associação de várias tabelas
(1) banco de dados mysql:
Junção comum de várias tabelas
update product a, product_detail b set a.name='测试seata' where a.id=b.product_id and b.user_name='llsydn'
复制代码
juntar mesa
update order a join order_detail b on a.id=b.order_id set a.total=1998 where b.user_name='llsydn'
复制代码
(2) Oracle, kingbase (Congresso Nacional do Povo Jincang) e banco de dados Dameng:
update product a, product_detail b set a.name='测试seata' where a.id=b.product_id and b.user_name='llsydn'
复制代码
Bem, algumas extensões do seata, modificação do código fonte do seata, é isso! ! !
Estou aqui primeiro hoje, skimming, skimming! ! ! ^_^
Se você achar útil, por favor, ajude 点个赞
! ! !