在应用中,需要热切换数据源。但发现如下问题:
错误
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项目中配置多数据源,并实现数据...
为了实现在代码中动态切换数据源,我们可以使用Spring AOP(面向切面编程)的方式,在需要动态切换数据源的方法上添加注解,通过AOP拦截器来实现数据源的动态切换。具体的实现步骤如下: - 创建一个`...
此外,为了在代码中切换数据源,通常会有一个数据源路由的策略,例如在Service层根据业务逻辑决定使用哪个数据源。这可能涉及到AOP(面向切面编程)的使用,通过注解或配置来切换数据源。 在实际开发中,多数据源的...
3. 创建自定义注解,如`@UseDataSource`,并在需要切换数据源的方法上使用它。注解的值可以用来指示应使用哪个数据源。 4. 编写AOP切面,该切面会在方法执行前后进行拦截。在方法执行前,根据注解的值动态设置...
通过上述步骤,可以实现在SpringBoot应用中根据前端传递的数据库连接参数动态切换数据源的功能。这种方式不仅增强了应用的灵活性,还能够有效提高系统的可扩展性和可维护性。在实际开发过程中,可以根据具体业务需求...
在Spring Boot应用中,动态创建和切换数据源是一项重要的功能,尤其在多租户系统或者需要根据用户权限分配不同数据库的场景下。本教程将详细讲解如何利用Spring Boot结合JPA实现这一目标。 首先,我们需要了解...
动态数据源切换是一种高级特性,允许应用在运行时根据业务需求选择不同的数据源。在本示例中,我们将探讨如何在SpringMVC项目中实现动态切换MySQL数据库。 首先,我们需要创建一个`jdbc.properties`文件来存储...
在IT行业中,数据库管理是核心任务之一,尤其是在大型企业级应用中,可能需要连接到多个数据源以满足不同业务需求。Jeecg是一款强大的企业级快速开发平台,它支持多数据源配置,允许用户根据业务场景灵活切换和管理...
3. **创建数据源切换接口和服务实现**:定义一个数据源切换接口,如`DataSourceSwitcher`,包含选择和切换数据源的方法。然后,创建一个实现类,如`DefaultDataSourceSwitcher`,在此类中实现具体的切换逻辑,如根据...
MySQL多数据源配置是数据库管理中的一个重要概念,它允许应用程序同时连接并操作多个数据库,以满足复杂的业务需求或实现数据的高效同步。这种配置在分布式系统、数据迁移、读写分离、故障切换等场景中非常常见。...
在Java开发中,多数据源是指应用程序需要连接和操作多个不同的数据库。这通常发生在大型系统中,例如,可能需要一个数据库来存储用户信息,另一个数据库处理订单,还可能有第三个数据库用于日志记录。Spring Boot...
6. **在代码中切换数据源**:在业务代码中,可以通过设置ThreadLocal变量来决定使用哪个数据源。这通常在Service层完成。 7. **配置`application-dev.properties`**:提供数据库连接的属性值,例如: ``` spring....
6. **编写业务代码**:最后,在业务层,我们可以通过设置一个属性或者上下文变量来切换数据源,然后调用MyBatis的接口进行数据操作。Spring会自动处理数据源的选择和事务的传播。 在提供的"spring整合mybatis多数据...
4. **动态切换数据源**:在业务代码中,可以通过AOP(面向切面编程)实现数据源的动态切换。创建一个自定义注解,如`@UseDataSource`,并在方法上使用该注解指定数据源。然后编写AOP切面,解析注解信息并在执行方法...
在实际应用中,尤其是在大型项目中,可能需要频繁地更改数据源,这会带来大量的重复工作。因此,"birt 报表动态数据源设置方法"提供了一种解决方案,允许用户集中管理和更新数据源,从而减少重复劳动。 动态数据源...
在`struts-config.xml`文件中配置数据源的步骤如下: 1. 引入外部资源:首先,你需要在`struts-config.xml`文件中引入数据源的相关配置。这通常通过`<plug-in>`标签来实现,例如,如果你使用的是Apache的Commons ...
在需要切换数据源的地方,可以使用`@Resource`注解注入特定的数据源,并通过`@Transactional`注解指定事务管理器。 7. **读写分离**: 可以根据业务需求,将读操作指向`secondaryDataSource`,写操作指向`...
在开发企业级应用程序时,经常需要处理多个数据源的情况,比如分离不同的业务模块到不同的数据库,或者实现读写分离等。本DEMO演示了如何在SpringMVC和Mybatis框架中配置多个数据源,并结合Maven进行项目管理,提供...
6. **使用自定义注解**:在需要切换数据源的方法上使用`@SwitchDataSource`注解,指定要切换到的数据源名称。 7. **整合Druid和MyBatis-Plus**: - 引入Druid和MyBatis-Plus的依赖到pom.xml(或build.gradle)文件...
在需要切换数据源的事务中,可以手动选择对应的事务管理器。 4. **MyBatis配置**:为每个数据源创建一个MyBatis的SqlSessionFactoryBean,并设置相应的数据源。通过MapperScannerConfigurer扫描Mapper接口,使得...