一,当有记录需要操作两个以上数据库时,这时就会引发事务问题,,,jndi能解决此类问题
context.xml
<Context path="/spring-all" docBase="spring-all" debug="5" reloadable="true"
crossContext="true">
<Resource name="jdbc/mysql" auth="Container"
type="javax.sql.DataSource" maxActive="100" maxIdle="50"
maxWait="10000"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/orange1"
username="root"
password="kgddxsksk"
testOnBorrow="true" testWhileIdle="true"/>
<Resource name="jdbc/sqlserver" auth="Container"
type="javax.sql.DataSource" maxActive="100" maxIdle="50"
maxWait="10000"
driverClassName="net.sourceforge.jtds.jdbc.Driver"
url="jdbc:jtds:sqlserver://192.168.7.83:1433/test"
username="sa"
password="kgddxsksk"
testOnBorrow="true" testWhileIdle="true"/>
</Context>
二,spring中的事务配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-2.5.xsd">
<!--
<bean id="dataSource1"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://127.0.0.1:3306/orange1</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>kgddxsksk</value>
</property>
</bean>
-->
<jee:jndi-lookup id="dataSource1"
jndi-name="java:/comp/env/jdbc/mysql">
</jee:jndi-lookup>
<jee:jndi-lookup id="dataSource2"
jndi-name="java:/comp/env/jdbc/sqlserver">
</jee:jndi-lookup>
<bean id="jotm"
class="com.spring.web.controller.JotmFactoryBean" />
<!--
当使用jta时,说明使用隔离级别
-->
<bean id="txManager"
class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="allowCustomIsolationLevels" value="true" />
<property name="userTransaction">
<ref local="jotm" />
</property>
</bean>
<!-- "person" table in mysql and "user" table in sqlserver -->
<bean id="person" class="com.spring.web.model.Person"></bean>
<bean id="personDao" class="com.spring.web.dao.PersonDao">
<property name="dataSource" ref="dataSource1"></property>
</bean>
<bean id="user" class="com.spring.web.model.User"></bean>
<bean id="userDao" class="com.spring.web.dao.UserDao">
<property name="dataSource" ref="dataSource2"></property>
</bean>
<bean id="userService"
class="com.spring.web.services.UserService">
<property name="userDao" ref="userDao"></property>
<property name="personDao" ref="personDao"></property>
</bean>
<!-- 事务配置 -->
<!-- 非检查型(RuntimeException)默认才会回滚 -->
<!--
对txManager进行了事务控制,,,所以在代码中使用持久化api时,也要是定制的,如
JdbcTemplate、HibernateTemplate和JdoTemplate,,,也可用相应的
DataSourceUtils(针对JDBC),SessionFactoryUtils(针对Hibernate),PersistenceManagerFactoryUtils(针对JDO)
因为这些类都会引用manager中的事务
-->
<tx:annotation-driven transaction-manager="txManager" />
<!-- the transactional advice (what 'happens'; see the <aop:advisor/> bean below) -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<!-- the transactional semantics... -->
<tx:attributes >
<!-- propagation 只有在嵌套事务(service调用了service里面的方法)存在时,几种机制才有意义 -->
<tx:method name="insert*" propagation="REQUIRED" isolation="REPEATABLE_READ"/>
</tx:attributes>
</tx:advice>
<!-- ensure that the above transactional advice runs for any execution
of an operation defined by the Service interface -->
<aop:config>
<aop:pointcut id="daoOperation"
expression="execution (* com.spring.web.services.*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="daoOperation" />
</aop:config>
</beans>
JotmFactoryBean在新版本中已实移除,需自己加入才可以.
public class JotmFactoryBean implements FactoryBean, DisposableBean {
private Current jotmCurrent;
private Jotm jotm;
public JotmFactoryBean() throws NamingException {
// Check for already active JOTM instance.
this.jotmCurrent = Current.getCurrent();
// If none found, create new local JOTM instance.
if (this.jotmCurrent == null) {
// Only for use within the current Spring context:
// local, not bound to registry.
this.jotm = new Jotm(true, false);
this.jotmCurrent = Current.getCurrent();
}
}
/**
* Set the default transaction timeout for the JOTM instance.
* <p>Should only be called for a local JOTM instance,
* not when accessing an existing (shared) JOTM instance.
*/
public void setDefaultTimeout(int defaultTimeout) {
this.jotmCurrent.setDefaultTimeout(defaultTimeout);
}
/**
* Return the JOTM instance created by this factory bean, if any.
* Will be <code>null</code> if an already active JOTM instance is used.
* <p>Application code should never need to access this.
*/
public Jotm getJotm() {
return this.jotm;
}
public Object getObject() {
return this.jotmCurrent;
}
public Class getObjectType() {
return this.jotmCurrent.getClass();
}
public boolean isSingleton() {
return true;
}
/**
* Stop the local JOTM instance, if created by this FactoryBean.
*/
public void destroy() {
if (this.jotm != null) {
this.jotm.stop();
}
}
}
还得加入jotm中相应的一些包..http://androidguy.blog.51cto.com/974126/216454
carol.jar
carol-iiop-delegate.jar
carol-interceptors.jar
howl.jar
jotm.jar
xapool.jar
分享到:
相关推荐
支持每个数据库独立初始化表结构schema和数据库database。 支持无数据源启动,支持懒加载数据源(需要的时候再创建连接)。 支持 自定义注解 ,需继承DS(3.2.0+)。 提供并简化对Druid,HikariCp,BeeCp,Dbcp2的快速...
本压缩包"spring-framework-4.3.30.RELEASE-schema.zip"正是这一版本的Spring Framework源码与相关配置文件集合,它涵盖了多个模块,为开发高效、稳定的应用提供了全面支持。 首先,我们关注到"mvc"子目录,这是...
通常,在Web应用程序中,数据源常常通过Java Naming and Directory Interface (JNDI)进行管理,这允许多个应用共享同一个数据源,例如在应用服务器如Tomcat、JBoss或WebLogic中。然而,有时我们可能希望在非Web环境...
支持每个数据库独立初始化表结构schema和数据库database。 支持无数据源启动,支持懒加载数据源(需要的时候再创建连接)。 支持 自定义注解 ,需继承DS(3.2.0+)。 提供并简化对Druid,HikariCp,BeeCp,Dbcp2的快速...
支持每个数据库独立初始化表结构schema和数据库数据库。支持自定义注解,需继承DS(3.2.0+)。提供对德鲁伊,Mybatis-Plus,P6sy,Jndi的快速集成。简化Druid和HikariCp配置,提供变量参数配置。配置一次,并行通用...
- 配置完成后,你就可以在你的业务逻辑中注入这个数据源来执行数据库操作了。例如,你可以使用`@Autowired`注解来注入数据源: ```java @Autowired private DataSource dataSource; ``` 5. **注意事项**: -...
- **使用DataSource**:如果使用Java的JNDI数据源,可以将多个数据库的连接信息配置在应用服务器中,然后在Hibernate配置文件中引用这些数据源。 6. **性能优化** - **连接池管理**:为了提高性能,建议为每个...
这样,当多个请求并发时,C3P0可以有效地复用已有的数据库连接,减少系统开销。 在这个示例中,我们可能会看到以下步骤: 1. 添加Spring Boot、MyBatis和C3P0的依赖到项目的`pom.xml`或`build.gradle`文件。 2. ...
8. **spring-aop-4.3.18.RELEASE.jar**:面向切面编程(AOP)模块允许开发者定义“切面”,这些切面可以插入到多个对象的方法调用中,实现如日志记录、性能监控、事务管理等功能,提高代码的可维护性和复用性。...
JTA是一个规范,它定义了接口和API,使得应用程序可以控制跨越多个数据存储(如数据库、消息队列等)的事务。它允许开发者编写无感知具体事务实现的代码,从而提高代码的可移植性和可维护性。 Spring通过...
综上所述,Spring 5.3.9的这些模块共同构建了一个强大且灵活的框架,覆盖了企业级应用开发的多个方面。无论是数据访问、事务管理、并发处理还是Web应用和分布式系统的构建,Spring都能提供全面而高效的支持。了解并...
总之,"spring-5.2.19.RELEASE-schema.zip" 包含了Spring框架的核心组件及其相关架构定义,涵盖了从Web开发到数据库操作,再到事务管理和消息传递等多个方面,为Java后端开发提供了强大的支持。理解和掌握这些知识点...
8. **spring-jdbc.jar** - 包含了对JDBC的支持,简化了数据库操作,提供了一种声明式事务管理的方式。依赖于spring-core。 9. **其他jar包** - Spring还包括其他多个jar包,如spring-web.jar(Web相关功能)、...
通过这个"java链接多个数据库配置demo",你可以学习到如何在Java项目中设置和管理多个数据库连接,理解并实践上述技术,从而提升你的Java数据库开发能力。请确保仔细阅读和理解DEMO中的代码,以便更好地应用到实际...
在这个压缩包中,包含了多个与Spring框架核心模块相关的Schema文件,每个文件对应Spring的一个主要组件: 1. **mvc**: MVC(Model-View-Controller)模块是Spring处理Web应用的组成部分。`mvc`目录下的Schema文件...
通过上述配置,我们可以看到如何在一个Spring应用程序中配置多个数据源,并使用JTA进行跨数据源的事务管理。这种配置方式非常灵活,可以适应复杂的企业级应用需求。在实际应用中,根据具体的应用场景和性能需求,还...
2. JDBC数据源:配置和管理JDBC数据源,连接到数据库,提供统一的访问接口,支持数据源的连接池和事务管理。 3. SSL安全配置:为了保障通信安全,可以配置WebLogic支持SSL(Secure Sockets Layer),加密传输数据,...
处理多个持久化单元 12.6.2. JpaTemplate 和 JpaDaoSupport 12.6.3. 基于原生的JPA实现DAO 12.6.4. 异常转化 12.6.5. 事务管理 12.6.6. JpaDialect III. Web 13. Web框架 13.1. 介绍 13.1.1. 与其他web框架的集成 ...
4.3.11.RELEASE是Spring Framework的一个稳定版本,它包含了多个模块和组件,以支持各种功能。在这个压缩包中,我们可以看到一系列子目录,每个代表了Spring Framework中的一个重要模块。现在,我们将深入探讨这些...
Spring JDBC是Spring框架的一个子模块,它为Java开发者提供了一个统一的接口来处理各种数据库操作,简化了JDBC的使用,提高了代码的可读性和可维护性。在4.3.6.RELEASE版本中,Spring JDBC继续强化了对事务管理、...