У меня есть компонент интеграции Spring Spring, который я обновляю для работы в частном PCF. У меня есть два источника данных и фабрика соединений RabbitMQ, определенные в приложении.Использование пространства имен весеннего облака и двух источников данных
Я вижу статью Томаса Рисберга об использовании пространства имен облаков и обработке нескольких сервисов за одно и то же время - https://spring.io/blog/2011/11/09/using-cloud-foundry-services-with-spring-part-3-the-cloud-namespace. Это обрабатывается с помощью @Autowired и @Qualifier аннотаций.
Мне интересно, как это можно достичь, если мы не @Autowired и @Qualifier аннотации, например. проводя DataSource в JdbcTemplate. Здесь у нас нет возможности указывать аннотацию @Qualifier.
Мое приложение основано на Spring XML. У меня есть возможность использовать аннотации @Autowired и @Qualifier в одном из DataSources, а другой - менеджер сущностей JPA. См. Фрагмент кода.
Любая помощь очень ценится.
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="persistenceUnitName" value="activity-monitor" />
<property name="jpaVendorAdapter" ref="jpaVendorAdapter"/>
<property name="jpaProperties">
<value>
hibernate.format_sql=true
</value>
</property>
</bean>
<beans profile="cloud">
<cloud:data-source id="dataSource" service-name="actmon-db-service" />
</beans>
Java Build Pack: java_buildpack_offline java-buildpack-offline-v2.4.zip Spring Auto-реконфигурации версии 1.4.0.
ОБНОВЛЕНИЕ: Это полная конфигурация для обоих источников данных, включая PropertySourcesPlaceholderConfigurer с свойствами, загружаемыми из источника данных с использованием DAO.
<bean id="cic.application.ppc" class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
<property name="properties" ref="cic.application.properties"/>
<property name="locations" ref="cic.application.propertyLocations"/>
</bean>
<bean id="cic.application.properties" class="java.util.Properties">
<constructor-arg value="#{cicPropertiesService.properties}"></constructor-arg>
</bean>
<bean id="cic.properties.propertiesService" name="cicPropertiesService"
class="com.emc.it.eis.properties.service.DefaultPropertiesService">
<constructor-arg index="0"
ref="cic.properties.propertiesDao" />
</bean>
<bean id="cic.properties.propertiesDao" class="com.emc.it.eis.properties.dao.JdbcPropertiesDao">
<constructor-arg ref="cic.properties.dataSource" />
</bean>
<beans profile="default">
<jee:jndi-lookup id="cic.properties.dataSource"
jndi-name="jdbc/intdb" />
</beans>
<beans profile="cloud">
<cloud:data-source id="cic.properties.dataSource" service-name="oracle-cicadm-db-service" />
</beans>
<beans>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="actmonDataSource" />
<property name="persistenceUnitName" value="activity-monitor" />
<property name="jpaVendorAdapter" ref="jpaVendorAdapter"/>
<property name="jpaProperties">
<value>
hibernate.format_sql=true
</value>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
</beans>
<beans profile="default">
<jee:jndi-lookup id="dataSource"
jndi-name="jdbc/actmon" />
</beans>
<beans profile="cloud">
<cloud:data-source id="actmonDataSource" service-name="postgres-actmon-db-service" />
</beans>
<beans profile="default,cloud">
<bean id="jpaVendorAdapter"
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="database" value="POSTGRESQL" />
</bean>
</beans>
Выход из CF при развертывании https://gist.github.com/anonymous/3986a1a7cea4f20c096e. Обратите внимание, что пропускается автоматическая переконфигурация javax.sql.DataSources
Автоматическая реконфигурация связанных служб в приложениях Spring доступна только в том случае, если у вас есть одна служба определенного типа, привязанная к вашему приложению. См. Http://docs.cloudfoundry.org/buildpacks/java/spring-service-bindings.html#auto. В этом случае вы вручную настраиваете источники данных, поэтому автоматическая переконфигурация не нужна. Если у вас несколько привязанных баз данных, автоконфигурация не знает, для какой границы db следует использовать для этой цели. –
Вы уверены, что профиль «облака» активируется при нажатии вашего приложения? Некоторые версии Java buildpack автоматически не активировали этот профиль во всех случаях. Попробуйте запустить 'cf set-env appname SPRING_PROFILES_ACTIVE cloud', чтобы убедиться. –
Спасибо. Документы делают это немного яснее. Я думал, что автоматическая переконфигурация и пружинные разъемы были связаны друг с другом.Ручная настройка подразумевает весеннее облако. Поэтому для нескольких источников данных в рекомендациях в документах указывается, что для аннотации @Qualifier следует различать. Журнал показывает, что профиль облака активируется. –