gpt4 book ai didi

java - Spring @Transactional + jdbcTemplate 调用Web服务

转载 作者:行者123 更新时间:2023-12-01 22:28:52 26 4
gpt4 key购买 nike

我的应用程序当前正在使用 Spring 的 JdbcTemplate@Transaction 注释进行事务处理。

我有一个在单个事务上调用Web 服务的方法,我对其进行了设计,以便来自Web 服务的异常将回滚事务中的所有数据库更改。

我的问题:如何刷新在调用我的网络服务之前所做的数据库更改?

非常感谢

@Autowired
private MyDao dao;

@Transactional
@Override
public void myMethod() {
.....
dao.saveThis(myObjectToSaveIsNotAnIssue);

// I need to FLUSH here in order for my web service to "see" the saved object

callWebservice();
}

我的 Spring 配置:

<context:component-scan base-package="com.xxx.xxx" />
<context:annotation-config />

<!-- proxy-target-class is set to true to use transactional scope -->
<tx:annotation-driven proxy-target-class="true" transaction-manager="tomcatTransactionManager" />

<bean id="sybaseDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/xxx"/>
<property name="lookupOnStartup" value="true"/>
<property name="proxyInterface" value="javax.sql.DataSource"/>
</bean>

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="sybaseDataSource"/>
</bean>

<!-- Transaction Manager -->
<bean id="tomcatTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="sybaseDataSource" />
</bean>

最佳答案

JDBC没有任何“刷新”概念。当您执行 SQL 查询时,它们也会被执行。内存中不会保留任何要刷新的内容。

由于事务隔离(默认情况下为 READ_COMMITTED),您的 Web 服务不会在数据库中看到您尚未提交的任何内容。如果这确实是您想要的(在 Web 服务中),则必须将隔离级别设置为 READ_UNCOMMITTED:

@Transactional(isolation = Isolation.READ_UNCOMMITTED)

关于java - Spring @Transactional + jdbcTemplate 调用Web服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28209088/

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