0
다중 소유를위한 tenantIdentifier에 따라 데이터 소스 빈을 만들어야합니다. 나는 새로운 테넌트를 추가하는 것이 context.xml의 구성을 추가하고 응용 프로그램 속성 파일의 테넌트 속성을 추가하는 것만 큼 간단하다는 상자 솔루션을 생각하고 있습니다. 스프링 클라우드 구성에서로드하기 위해 context.xml을 새로 고치기위한 API를 노출합니다. 및 특성 파일.팩토리 빈에 주어진 속성에 따라 빈을 만듭니다.
현재,이 오류에 붙어있어 :
이 문제는 지금 내 공장 빈은 내가 만들려는 빈을 창조하고있다No qualifying bean of type [javax.sql.DataSource] is defined: expected single matching bean but found 2: dataSourceFactoryBean,defaultDataSource
하지만, 심지어 기본 콩은 봄에 등록 -문맥. 이것은 위의 문제를 일으키는 것입니다.
이 내 상황에 맞는 XML입니다 :
public class DataSourceFactoryBean extends AbstractFactoryBean<DataSource> {
@Autowired
ApplicationContext applicationContext;
private String tenantIdentifier;
public String getTenantIdentifier() {
return tenantIdentifier;
}
public void setTenantIdentifier(String tenantIdentifier) {
this.tenantIdentifier = tenantIdentifier;
}
@Override
public Class<DataSource> getObjectType() {
return DataSource.class;
}
@Override
protected DataSource createInstance() throws Exception {
DataSource dataSource = (DataSource) applicationContext.getBean(tenantIdentifier);
return dataSource;
}
내의 EntityManagerFactory에게와의 transactionManager 내 공장 콩을 사용하지 않는하기 위해 어떤 방법이 있나요 :
<bean id="dataSourceFactoryBean" class="com.comviva.mfs.txn.util.DataSourceFactoryBean" scope="prototype">
<property name="tenantIdentifier" value="defaultDataSource"/>
</bean>
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
<bean id="defaultDataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
<constructor-arg ref="hikariConfig"/>
</bean>
<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
<property name="poolName" value="txnOracle"/>
<property name="registerMbeans" value="false"/>
<property name="dataSourceClassName" value="oracle.jdbc.pool.OracleDataSource"/>
<property name="maximumPoolSize" value="${mobiquity.database.connection.pool.maximum.pool.size}"/>
<property name="minimumIdle" value="${mobiquity.database.connection.pool.minimum.pool.size}"/>
<property name="connectionTimeout" value="${mobiquity.database.connection.pool.connection.timeout}"/>
<property name="idleTimeout" value="${mobiquity.database.connection.pool.idle.timeout}"/>
<property name="maxLifetime" value="${mobiquity.database.connection.pool.max.lifetime}"/>
<property name="dataSourceProperties">
<props>
<prop key="url">${mobiquity.database.url}</prop>
<prop key="user">${mobiquity.database.username}</prop>
<prop key="password">${mobiquity.database.password}</prop>
<prop key="implicitCachingEnabled">${mobiquity.database.implicitCachingEnabled}</prop>
<prop key="maxStatements">${mobiquity.database.maxStatements}</prop>
</props>
</property>
<property name="metricRegistry" ref="platformCommonMetricRegistry"/>
<property name="healthCheckRegistry" ref="platformCommonHealthCheckRegistry"/>
</bean>
<bean id="jpaDialect" class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml"/>
<property name="persistenceUnitName" value="NewOracle"/>
<property name="dataSource" ref="dataSourceFactoryBean"/>
<property name="jpaDialect" ref="jpaDialect"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="databasePlatform" value="org.hibernate.dialect.Oracle10gDialect"/>
<property name="showSql" value="${show.sql}"/>
<!--<property name="generateDdl" value="true"/>-->
</bean>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
<property name="dataSource" ref="dataSourceFactoryBean"/>
<property name="defaultTimeout" value="${default.timeout}"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
내 DataSourceFactoryBean이 같다 실제 defaultDataSource 빈.
당신은 바위 (심지어 한정자와) 여러 중 하나 콩을 해결할 수없는이 봄없이
<bean id="defaultDataSource"
에 재산primary="true"
를 추가하려고! 내 문제를 해결했습니다. 기본자가 있다는 것을 결코 알지 못했습니다. Intellij는 ctrl + space를 사용하여 표시하지 않았습니다. – Pavanraotk