`
zscomehuyue
  • 浏览: 412140 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

在应用中,需要热切换数据源。但发现如下问题:

阅读更多
在应用中,需要热切换数据源。但发现如下问题:

错误

Java代码

   1. org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'swappable' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed; nested exception is null 
   2. java.lang.IllegalArgumentException: Superclass has no null constructors but no arguments were given 

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'swappable' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed; nested exception is null
java.lang.IllegalArgumentException: Superclass has no null constructors but no arguments were given



配置如下

Java代码

   1. <bean id="myDataSource1" class="org.springframework.jndi.JndiObjectFactoryBean"> 
   2.     <property name="jndiName"> 
   3.         <value>java:/ds1</value> 
   4.     </property> 
   5. </bean> 
   6.  
   7. <bean id="myDataSource2" class="org.springframework.jndi.JndiObjectFactoryBean"> 
   8.     <property name="jndiName"> 
   9.         <value>java:/ds2</value> 
  10.     </property> 
  11. </bean> 
  12.  
  13.  
  14. <bean id="myTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"> 
  15.  
  16.     <property name="userTransactionName"> 
  17.         <value>UserTransaction</value> 
  18.     </property>  
  19.      
  20.     <property name="transactionManagerName"> 
  21.         <value>java:/TransactionManager</value> 
  22.     </property> 
  23.  
  24. </bean> 
  25.  
  26. <bean id="swappableDataSource" 
  27.       class="org.springframework.aop.target.HotSwappableTargetSource"> 
  28.     <constructor-arg> 
  29.         <ref local="myDataSource1"/> 
  30.     </constructor-arg> 
  31. </bean> 
  32.  
  33. <bean id="swappable" 
  34.       class="org.springframework.aop.framework.ProxyFactoryBean"> 
  35.     <property name="targetSource"> 
  36.         <ref local="swappableDataSource"/> 
  37.     </property> 
  38. </bean> 
  39. <bean id="mySessionFactory1" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
  40.     <property name="mappingResources"> 
  41.         <list> 
  42.             <value>test/po/impl/Cus.hbm.xml</value>       
  43.         </list> 
  44.     </property> 
  45.     <property name="hibernateProperties"> 
  46.         <props> 
  47.             <prop key="hibernate.dialect"> ${hibernate.dialect} </prop> 
  48.             <prop key="hibernate.show_sql">true</prop> 
  49.             <prop key="hibernate.generate_statistics">true</prop> 
  50.             <prop key="hibernate.cache.provider_class"> 
  51.             org.hibernate.cache.EhCacheProvider</prop> 
  52.         </props> 
  53.     </property> 
  54.     <property name="dataSource"> 
  55.         <ref local="swappable"/> 
  56.     </property> 
  57. </bean> 

    <bean id="myDataSource1" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName">
            <value>java:/ds1</value>
        </property>
    </bean>
   
    <bean id="myDataSource2" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName">
            <value>java:/ds2</value>
        </property>
    </bean>
   
   
    <bean id="myTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">

        <property name="userTransactionName">
            <value>UserTransaction</value>
        </property>
       
        <property name="transactionManagerName">
            <value>java:/TransactionManager</value>
        </property>

    </bean>
   
    <bean id="swappableDataSource"
          class="org.springframework.aop.target.HotSwappableTargetSource">
        <constructor-arg>
            <ref local="myDataSource1"/>
        </constructor-arg>
    </bean>

    <bean id="swappable"
          class="org.springframework.aop.framework.ProxyFactoryBean">
        <property name="targetSource">
            <ref local="swappableDataSource"/>
        </property>
    </bean>
    <bean id="mySessionFactory1" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="mappingResources">
            <list>
                <value>test/po/impl/Cus.hbm.xml</value>     
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect"> ${hibernate.dialect} </prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.generate_statistics">true</prop>
                <prop key="hibernate.cache.provider_class">
                org.hibernate.cache.EhCacheProvider</prop>
            </props>
        </property>
        <property name="dataSource">
            <ref local="swappable"/>
        </property>
    </bean>



这里的数据源是用应用服务器JNDI提供的,如果用自己的就没有问题。

Java代码

   1. <bean id="dataSource1" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
   2.     <property name="driverClassName" value="${jdbc.driverClassName}"/> 
   3.     <property name="url" value="${jdbc.url1}"/> 
   4.     <property name="username" value="${jdbc.username}"/> 
   5.     <property name="password" value="${jdbc.password}"/> 
   6. </bean> 

    <bean id="dataSource1" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url1}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>



用应用服务器的JNDI就会出现上面的错误。请指教。谢谢。
分享到:
评论

相关推荐

    SpringBoot配置多数据源实现动态切换数据源

    在企业级应用开发中,数据源的管理是一个关键部分,特别是在需要访问多个数据库的应用中。SpringBoot框架以其简洁的配置和强大的功能深受开发者喜爱。本文将深入探讨如何在SpringBoot项目中配置多数据源,并实现数据...

    SpringBoot多数据源配置(方式二:在代码中动态切换需要使用哪个数据源).docx

    为了实现在代码中动态切换数据源,我们可以使用Spring AOP(面向切面编程)的方式,在需要动态切换数据源的方法上添加注解,通过AOP拦截器来实现数据源的动态切换。具体的实现步骤如下: - 创建一个`...

    Spring动态切换多数据源Demo

    此外,为了在代码中切换数据源,通常会有一个数据源路由的策略,例如在Service层根据业务逻辑决定使用哪个数据源。这可能涉及到AOP(面向切面编程)的使用,通过注解或配置来切换数据源。 在实际开发中,多数据源的...

    Spring+SpringMvc+MybatisPlus+Aop(自定义注解)动态切换数据源

    3. 创建自定义注解,如`@UseDataSource`,并在需要切换数据源的方法上使用它。注解的值可以用来指示应使用哪个数据源。 4. 编写AOP切面,该切面会在方法执行前后进行拦截。在方法执行前,根据注解的值动态设置...

    SpringBoot多数据源配置(方式四:根据前端传递的数据库连接参数动态切换数据源).docx

    通过上述步骤,可以实现在SpringBoot应用中根据前端传递的数据库连接参数动态切换数据源的功能。这种方式不仅增强了应用的灵活性,还能够有效提高系统的可扩展性和可维护性。在实际开发过程中,可以根据具体业务需求...

    动态创建切换数据源.zip

    在Spring Boot应用中,动态创建和切换数据源是一项重要的功能,尤其在多租户系统或者需要根据用户权限分配不同数据库的场景下。本教程将详细讲解如何利用Spring Boot结合JPA实现这一目标。 首先,我们需要了解...

    springmvc动态切换数据源demo

    动态数据源切换是一种高级特性,允许应用在运行时根据业务需求选择不同的数据源。在本示例中,我们将探讨如何在SpringMVC项目中实现动态切换MySQL数据库。 首先,我们需要创建一个`jdbc.properties`文件来存储...

    jeecg3.5多数据源配置说明

    在IT行业中,数据库管理是核心任务之一,尤其是在大型企业级应用中,可能需要连接到多个数据源以满足不同业务需求。Jeecg是一款强大的企业级快速开发平台,它支持多数据源配置,允许用户根据业务场景灵活切换和管理...

    基于Spring多数据源实例

    3. **创建数据源切换接口和服务实现**:定义一个数据源切换接口,如`DataSourceSwitcher`,包含选择和切换数据源的方法。然后,创建一个实现类,如`DefaultDataSourceSwitcher`,在此类中实现具体的切换逻辑,如根据...

    mysql多数据源配置

    MySQL多数据源配置是数据库管理中的一个重要概念,它允许应用程序同时连接并操作多个数据库,以满足复杂的业务需求或实现数据的高效同步。这种配置在分布式系统、数据迁移、读写分离、故障切换等场景中非常常见。...

    Java多数据源源码

    在Java开发中,多数据源是指应用程序需要连接和操作多个不同的数据库。这通常发生在大型系统中,例如,可能需要一个数据库来存储用户信息,另一个数据库处理订单,还可能有第三个数据库用于日志记录。Spring Boot...

    springboot多数据源配置(sqlserver,mysql)

    6. **在代码中切换数据源**:在业务代码中,可以通过设置ThreadLocal变量来决定使用哪个数据源。这通常在Service层完成。 7. **配置`application-dev.properties`**:提供数据库连接的属性值,例如: ``` spring....

    spring整合mybatis多数据源

    6. **编写业务代码**:最后,在业务层,我们可以通过设置一个属性或者上下文变量来切换数据源,然后调用MyBatis的接口进行数据操作。Spring会自动处理数据源的选择和事务的传播。 在提供的"spring整合mybatis多数据...

    java 多数据源

    4. **动态切换数据源**:在业务代码中,可以通过AOP(面向切面编程)实现数据源的动态切换。创建一个自定义注解,如`@UseDataSource`,并在方法上使用该注解指定数据源。然后编写AOP切面,解析注解信息并在执行方法...

    birt 报表动态数据源设置方法

    在实际应用中,尤其是在大型项目中,可能需要频繁地更改数据源,这会带来大量的重复工作。因此,"birt 报表动态数据源设置方法"提供了一种解决方案,允许用户集中管理和更新数据源,从而减少重复劳动。 动态数据源...

    在struts-config.xml中配置数据源

    在`struts-config.xml`文件中配置数据源的步骤如下: 1. 引入外部资源:首先,你需要在`struts-config.xml`文件中引入数据源的相关配置。这通常通过`&lt;plug-in&gt;`标签来实现,例如,如果你使用的是Apache的Commons ...

    springboot配置多数据源小案例

    在需要切换数据源的地方,可以使用`@Resource`注解注入特定的数据源,并通过`@Transactional`注解指定事务管理器。 7. **读写分离**: 可以根据业务需求,将读操作指向`secondaryDataSource`,写操作指向`...

    SpringMVC +Mybatis 多个数据源配置 DEMO + maven

    在开发企业级应用程序时,经常需要处理多个数据源的情况,比如分离不同的业务模块到不同的数据库,或者实现读写分离等。本DEMO演示了如何在SpringMVC和Mybatis框架中配置多个数据源,并结合Maven进行项目管理,提供...

    spring-boot自定注解,实现多个数据源之间的自动切换

    6. **使用自定义注解**:在需要切换数据源的方法上使用`@SwitchDataSource`注解,指定要切换到的数据源名称。 7. **整合Druid和MyBatis-Plus**: - 引入Druid和MyBatis-Plus的依赖到pom.xml(或build.gradle)文件...

    springboot多数据源

    在需要切换数据源的事务中,可以手动选择对应的事务管理器。 4. **MyBatis配置**:为每个数据源创建一个MyBatis的SqlSessionFactoryBean,并设置相应的数据源。通过MapperScannerConfigurer扫描Mapper接口,使得...

Global site tag (gtag.js) - Google Analytics