mvc example ejemplo anotaciones java spring jdbc spring-jdbc

java - example - spring jdbctemplate



¿Cómo puedo configurar para desactivar el compromiso automático en Spring+JDBC? (3)

No puede, simplemente ejecuta su código dentro de una transacción, Spring desactivará automáticamente la confirmación automática por usted. La forma más fácil (al menos para configurar) de ejecutar un código en una transacción en Spring es usar TransactionTemplate :

TransactionTemplate template = new TransactionTemplate(txManager); template.execute(new TransactionCallback<Object>() { public Object doInTransaction(TransactionStatus transactionStatus) { //ALL YOUR CODE ARE BELONG TO... SINGLE TRANSACTION } }

Estoy usando Spring con JDBC y encontré que es autocommit.

¿Cómo puedo configurar para desactivarlo en spring-servlet.xml?

Esta es mi configuración actual:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.databaseurl}" p:username="${jdbc.username}" p:password="${jdbc.password}" /> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean>


Parece que mi configuración se perdió esta línea:

<tx:annotation-driven transaction-manager="txManager"/>

Luego, en mis clases de servicio, uso la anotación @Transactional. Por ejemplo

@Service class CompanyServiceImpl implements CompanyService{ @Autowired private CompanyDAO companyDAO; @Transactional public void addCompany(Company company) { companyDAO.addCompany(company); // in here, there is JDBC sql insert companyDAO.addCompany_fail(company); // just for test } }

Si se produce una excepción en addCompany_fail (), la primera addCompany () también se revertirá.

Seguí este documento para comprender la idea de cómo se controló la transacción en Spring. http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/transaction.html

Seguí este documento para comprender cómo codificar con JDBC en Spring. http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/jdbc.html

También leo esto (Gratis) http://www.infoq.com/news/2009/04/java-transaction-models-strategy . Es realmente bueno. Y siento lo mismo con el escritor que la mayoría de las personas no entienden (o les importa) las transacciones.

PD: Parece que muchas personas entienden mal que el uso de dicho marco de Hibernate / Spring es solo para evitar la complejidad de JDBC y el Control de transacciones. Mucha gente piensa que "JDBC y Transaction son tan complejos, solo usa Hibernate y olvídate de esos dos". Muchos ejemplos en Internet sobre Spring + Hibernate o Spring + JDBC aparentemente no se preocupan por la transacción en absoluto. Siento que esta es una mala broma. La transacción es demasiado seria para dejar que algo lo maneje sin una verdadera comprensión.

Hibernate y Spring son tan poderosos y tan complejos. Entonces, como alguien dijo: "El gran poder viene con responsabilidades".

[Agregar] [2013-08-17] Aquí hay un buen ejemplo de transacción aquí http://www.byteslounge.com/tutorials/spring-transaction-propagation-tutorial . Sin embargo, esto no explica que si desea usar REQUIRES_NEW, ¿por qué necesita crear otra clase? (De lo contrario, obtendrá este problema. Propagación de transacciones de primavera REQUERIDO, REQUERES_NUEVO , que parece REQUERES_NUEVO realmente no crea una nueva transacción)