2017-07-07 93 views
0

如下面的代碼,我使用spring-jdbc來訪問Oracle數據庫。我使用namedJdbcTemplate來更新和插入。spring-jdbc:如何使用namedJdbcTemplate來管理事務以使用Oracle db執行CRUD

現在我想用DatasourceTransactionManager管理事務。我能做些什麼來編碼?

道代碼:

@Autowired 
@Qualifier("svsJdbcTemplate") 
JdbcTemplate jdbcTemplate; 

protected NamedParameterJdbcTemplate namedJdbcTemplate; 

private static final Logger logger = LoggerFactory 
     .getLogger(DashboardDaoImpl.class); 

@PostConstruct 
public void setup() { 
    namedJdbcTemplate = new NamedParameterJdbcTemplate(
      jdbcTemplate.getDataSource()); 
} 

應用jdbc.xml中配置:

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


<!-- JNDI Data Source --> 
<bean id="svsDataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 
<!-- 
    <property name="resourceRef" value="true" /> 
    <property name="jndiName" value="jdbc/svsDB" /> 
--> 
    <property name="jndiName" value="java:comp/env/jdbc/svsDB"/> 
</bean> 

<tx:annotation-driven proxy-target-class="true" 
    transaction-manager="transactionManager" /> 

<!-- Creating TransactionManager Bean, since JDBC we are creating of type 
    DataSourceTransactionManager --> 
<bean id="transactionManager" 
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
    <property name="dataSource" ref="svsDataSource" /> 
</bean> 

回答

0

在彈簧配置文件替換

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

<bean id="svsJdbcTemplate" 
class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate"> 
<constructor-arg ref="dataSource"></constructor-arg> 
</bean> 

和dao類autowire svsJdbcTemplate如下。

@Autowired 
NamedParameterJdbcTemplate svsJdbcTemplate; 

現在管理交易使用服務類中的@Transactional註釋。

+0

首先感謝您的回答,但如果我想使用編程事務管理,我應該使用try ... catch來管理事務,並且這種更改是否會影響其他方法 –

+0

沒有。程序化交易管理難以維護.. – Jobin

+0

謝謝,但我的領導希望我使用編程交易管理,我想我可以改變配置和使用編程同時 –

相關問題