【问题标题】:spring-jdbc: How to manage transactions using namedJdbcTemplate to do CRUD with Oracle dbspring-jdbc:如何使用 namedJdbcTemplate 管理事务以使用 Oracle db 进行 CRUD
【发布时间】:2017-07-07 06:34:32
【问题描述】:

如下代码,我使用spring-jdbc访问Oracle db。我使用 namedJdbcTemplate 来更新和插入。

现在我想用 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());
}

application-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>

【问题讨论】:

    标签: java spring oracle spring-jdbc


    【解决方案1】:

    在spring配置文件中替换

    <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 类中自动装配 svsJdbcTemplate,如下所示。

    @Autowired
    NamedParameterJdbcTemplate  svsJdbcTemplate;
    

    现在在服务类中使用@Transactional 注释来管理事务。

    【讨论】:

    • 首先感谢您的回答,但是如果我想使用程序化事务管理,我应该使用 try...catch 来管理事务以及此更改是否会影响其他方法
    • 谢谢,但我的领导希望我使用程序化事务管理,我想我可以同时更改配置并使用程序化
    猜你喜欢
    • 2013-07-30
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 2021-08-02
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多