簡體   English   中英

Qualifier在Spring Boot中不適用於DataSource

[英]Qualifier doesn't work for DataSource in Spring Boot

我有兩個數據源定義為“ datasource1”和“ datasource2”(在依賴項的xml配置中)。 因此,默認情況下我沒有配置JdbcTemplate,所以我需要手動進行操作,如下所示:

1。

@Bean
public JdbcOperations jdbcOperations(DataSource datasource1) {
    return new JdbcTemplate(datasource1);
}

2。

@Bean
public JdbcOperations jdbcOperations(@Qualifier("datasource1") DataSource datasource1) {
    return new JdbcTemplate(datasource1);
}

在兩種情況下,它均失敗:

Parameter 0 of method jdbcOperations in com.example.PersistentConfig required a single bean, but 2 were found:
    - datasource1: defined in class path resource [datasources.xml]
    - datasource2: defined in class path resource [datasources.xml]

為什么預選賽不起作用?

我無法更改datasources.xml文件以將primary=true添加到datasource

datasources.xml

<?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:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context.xsd">

    <bean id="datasource1"
          class="com.example.database.IdentifiedLazyConnectionDataSourceProxy">
        <qualifier value="datasource1"/>
        <property name="targetDataSource">
            <bean class="org.springframework.jndi.JndiObjectFactoryBean">
                <property name="jndiName" value="java:comp/env/ak1Database"/>
                <property name="resourceRef" value="true"/>
            </bean>
        </property>
        <property name="identifier" value="shared"/>
    </bean>

    <bean id="datasource2"
          class="com.example.database.IdentifiedLazyConnectionDataSourceProxy">
        <qualifier value="datasource2"/>
        <property name="targetDataSource">
            <bean class="org.springframework.jndi.JndiObjectFactoryBean">
                <property name="jndiName" value="java:comp/env/ak2Database"/>
                <property name="resourceRef" value="true"/>
            </bean>
        </property>
        <property name="identifier" value="shared"/>
    </bean>

</beans>

這不起作用的原因是因為xml配置始終會覆蓋Java配置(請參閱https://jira.spring.io/browse/SPR-7028 )。

為了解決這個問題,我需要創建一個名稱與xml中名稱不同的bean,並將新bean標記為@Primary

因此,現在我將擁有三個數據源bean,其中兩個連接到相同的數據庫模式,但是只有一個標記為Primary,因此它將在默認位置使用,而不是在xml定義的位置使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM