当前位置: 首页 > 知识库问答 >
问题:

在使用数据源代理时创建了多个数据源bean

韦安顺
2023-03-14

我试图从这里用我当前的应用程序实现数据源代理

我在Spring xml中配置了数据源对象,即在dataSourceProxy对象中传递dataSourceReal。

侦听器和过滤器与文档中一样正确配置。

Spring xml文件:

<bean id="dataSourceReal" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="jdbc/myDS" />
        <property name="resourceRef" value="true" />
        <property name="lookupOnStartup" value="false" />
        <property name="proxyInterface" value="javax.sql.DataSource" />
    </bean>


     <bean id="dataSourceProxy" class="net.ttddyy.dsproxy.support.ProxyDataSource">
            <property name="dataSource" ref="dataSourceReal" />
            <property name="listener" ref="listeners" />
        </bean>

        <bean id="listeners" class="net.ttddyy.dsproxy.listener.ChainListener">
            <property name="listeners">
                <list>
                    <bean
                        class="com.my.sql.logging.DataSourceQueryLoggingListener" />
                </list>
            </property>
        </bean> 

数据源名称的JNDI名称的xml文件:

<Resource name="jdbc/myDS" auth="Container"
type="javax.sql.DataSource"
maxActive="25" maxIdle="5" maxWait="10000"
username="abc" password="abc"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:myDB"
validationQuery="Select 1 from dual" />

我得到了这个错误:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [javax.sql.DataSource] is defined: expected single matching bean but found 2: [dataSourceReal, dataSourceProxy]

请帮忙。

共有1个答案

戎永福
2023-03-14

我终于从这里找到了解决这个问题的办法

每当我们的应用程序配置了多个数据源时,

我们可以在java主bean上指定@Primary注释

使用xml时,我们可以将主bean指定为

<bean id="dataSourceProxy" primary="true" class="net.ttddyy.dsproxy.support.ProxyDataSource">
 类似资料:
  • 创建数据源的基本步骤: 在工作区窗口中,点击 “新建数据源”。 输入数据源的名,然后选择所需的连接或现有的数据源。 点击“确定”。 一个选项卡将打开,让你编辑数据源。 将表或查询从连接窗格拖放到设计窗格。 将一个节点拖放到另一个节点以创建联接。 如有需要,请配置联接类型和联接字段。 【提示】创建联接后,你可以随时点击连接器上的联接图标来更改联接设置。 选择“实时”模式或“存档”模式。 点击“应用并

  • 创建数据源的基本步骤: 在工作区窗口中,点击 。 输入数据源的名,然后选择所需的连接或现有的数据源。 点击“好”。 一个选项卡将打开,让你编辑数据源。 将表或查询从连接窗格拖放到设计窗格。 将一个节点拖放到另一个节点以创建联接。 如有需要,请配置联接类型和联接字段。 【提示】创建联接后,你可以随时点击连接器上的联接图标来更改联接设置。 选择“实实时”模式或“存档”模式。 点击“应用并刷新数据”来查

  • 创建数据源的基本步骤: 在工作区窗口中,点击 “新建数据源”。 输入数据源的名,然后选择所需的连接或现有的数据源。 点击“确定”。 一个选项卡将打开,让你编辑数据源。 将表或查询从连接窗格拖放到设计窗格。 将一个节点拖放到另一个节点以创建联接。 如有需要,请配置联接类型和联接字段。 【提示】创建联接后,你可以随时点击连接器上的联接图标来更改联接设置。 选择“实时”模式或“存档”模式。 点击“应用并

  • 我在Tomcat中得到以下错误: 我已经在JBOSS和嵌入式tomcat服务器中运行了这个,但仍然出现了这个错误。我甚至从war中取出jar文件,并从JBOSS中运行它,仍然得到相同的错误。 我能够创建EntityMangers,但在创建它们之前,我得到了上面的错误。程序继续运行比抱怨类不是托管类型。但是,这些正在被扫描。 我在JBoss中得到了同样的错误: 第二数据源 application.y

  • 当我试图在spring-boot上使用多个数据源时,我面临着一个巨大的问题。我的问题是因为我正在使用spring batch,而我没有足够的权限在我的生产数据库上从spring-batch创建元数据表,所以我需要使用例如H2来创建这些表,但是当我试图在我的模型中加载一个在我的作业处理器中具有关系为@OneToMany的字段时,我收到了LazyInitializationException Spri