我试图使用vertx JDBC与MSSQL服务器。
我得到了以下线索:
Exception in thread "vertx-jdbc-service-get-connection-thread" Exception in thread "vertx-jdbc-service-get-connection-thread" java.lang.NoSuchMethodError: 'java.sql.Connection io.agroal.api.transaction.TransactionIntegration.getConnection()'
at io.agroal.pool.ConnectionPool.wrapperFromTransaction(ConnectionPool.java:162)
at io.agroal.pool.ConnectionPool.getConnection(ConnectionPool.java:129)
at io.agroal.pool.DataSource.getConnection(DataSource.java:61)
at io.vertx.ext.jdbc.impl.JDBCClientImpl.lambda$null$4(JDBCClientImpl.java:232)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
at java.base/java.lang.Thread.run(Thread.java:831)
java.lang.NoSuchMethodError: 'java.sql.Connection io.agroal.api.transaction.TransactionIntegration.getConnection()'
at io.agroal.pool.ConnectionPool.wrapperFromTransaction(ConnectionPool.java:162)
at io.agroal.pool.ConnectionPool.getConnection(ConnectionPool.java:129)
at io.agroal.pool.DataSource.getConnection(DataSource.java:61)
at io.vertx.ext.jdbc.impl.JDBCClientImpl.lambda$null$4(JDBCClientImpl.java:232)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
at java.base/java.lang.Thread.run(Thread.java:831)
我的构建的一部分。格雷德尔
:
implementation platform("io.vertx:vertx-stack-depchain:4.2.1")
implementation "io.vertx:vertx-core"
implementation 'io.vertx:vertx-jdbc-client:4.2.1'
implementation "io.vertx:vertx-lang-groovy"
implementation 'io.agroal:agroal-api:1.13'
implementation 'io.agroal:agroal-pool:1.13'
implementation "com.microsoft.sqlserver:mssql-jdbc:9.4.0.jre16"
我尝试选择其他版本,但我总是得到同样的错误。我试图寻找库函数,但我找不到任何版本的Transaction集成
与getConnection()
方法。
我的代码:
import io.vertx.core.AbstractVerticle;
import io.vertx.core.*;
import io.vertx.jdbcclient.JDBCConnectOptions;
import io.vertx.jdbcclient.JDBCPool;
import io.vertx.sqlclient.*;
public class MainVerticle extends AbstractVerticle {
@Override
public void start(Promise<Void> startPromise) throws Exception {
JDBCPool pool = JDBCPool.pool(
vertx,
new JDBCConnectOptions()
.setJdbcUrl("jdbc:sqlserver://some_ip;databaseName=mydatabase")
.setUser("user")
.setPassword("password"),
new PoolOptions().setMaxSize(16)
);
pool
.query("SELECT * FROM test")
.execute()
.onFailure(e -> {
e.printStackTrace();
})
}
}
显然gradle被窃听了。
我将agroal版本更改为1.12,正如Paulo Lope所建议的那样。然而,这并没有解决问题。
我不知道,到底是什么解决了这个问题,但我只列出我所做的:
我没有检查,是否有必要使用agroal 1.12,或者到底是什么步骤解决了它。我不打算尝试,我只是很高兴,它终于起作用了。
目前的4.2.1版本似乎依赖于Agrol 1.12。
考虑到你得到了一个NoSuchMethodError
,我认为这可能与编译后的jar是针对1.12的事实有关,但你运行的是旧版本,可能是1.0或1.1。查看github,您可以找到与这些版本匹配的跟踪。
尝试升级到1.12,它应该可以解决您的错误。
我想在成功发送关于Kafka主题的所有消息后执行一些代码。我读了很多文章。要知道我们可以使用事务发送消息。 我尝试了这么短的代码,但不确定如何在这个事务成功执行后执行一些代码。我也尝试过Kafka普勒,开始交易,但这对我的案子也不起作用。如果有什么想法的话会很有帮助。
交易编码 在web3j中,使用RLP编码将以太坊交易对象编码为字节数组,该字节数组在提交给网络之前被签署。交易类型和签名逻辑位于Crypto模块内,https://github.com/web3j/web3j/blob/master/crypto/src/test/java/org/web3j/crypto/TransactionEncoderTest.java提供交易签名和编码的示例: pack
接口交互流程图: 完整交互流程图: 登录状态: 游客(未登录)状态:
交易 为了与Infura节点进行交易,需要在发送它们之前离线创建交易和签名,因为Infura节点没有加密的以太坊密钥文件的访问权限,这是需要通过geth或者Parity管理命令来解锁帐户。 有关详细信息,请参阅以太坊交易中离线交易和签名部分和web3j如何使用管理APIs。
交易 Web3j支持使用以太坊钱包文件(推荐的)和用于发送事务的以太坊客户端管理命令。 使用以太钱包文件发送以太币给其他人: Web3j web3 = Web3j.build(new HttpService()); // defaults to http://localhost:8545/ Credentials credentials = WalletUtils.loadCredentials
交易有不同的分类,不同交易有不同的操作码。 这样做的好处就是明确用户行为,简化系统复杂度。 操作码列表 OpsTransfer:用于普通的链内转账 OpsMove:用于链间的转账 OpsNewChain:用于创建新的子链 OpsNewApp:用于创建智能合约 OpsRunApp:用于执行智能合约 OpsRegisterMiner:用于注册矿工 OpsUpdateAppLife:更新智能合约的生命周