このように春の設定で2つのDBプロバイダーを設定しました(2つの異なるファイルに広がっています)
<db:provider id="FirstDbProvider"
provider="MySql" connectionString="Database=xxxxxxx;Host=xxxxxxx;Username=xxxxxxx;Password=xxxxxxxxx"/>
<db:provider id="SecondDbProvider"
provider="MySql" connectionString="Database=xxxxxxx;Host=xxxxxxx;Username=xxxxxxx;Password=xxxxxxxxx"/>
しかし、アプリを実行しようとすると、SecondDBProvider を利用する sessionFactory を作成するときに失敗します。私はこれを得る
「ファイル [Second.Dao.xml] 行 21」で定義された SecondSessionFactory': オブジェクトの初期化に失敗しました: 利用可能な DB プロバイダーがなかったため、接続を作成できませんでした
このように 2 つの DB プロバイダーを使用しても問題ありませんか? このエラーを引き起こしている可能性のあるアイデア。DB プロバイダーで指定された資格情報などを使用して、コマンド ラインからデータベースに接続できます。
データベースを 1 つだけに戻せば、完全に機能します。2 番目の db:provider を spring.dao.xml ファイルに追加できますが、すべて引き続き機能します (つまり、最初のデータベースからエンティティを取得できます)。2 番目の sessionFactory を追加したときにのみ動作が停止し、最初のデータベースからでも何も取得できません。
だから、おそらくどこかで何かが共有されており、競合を引き起こしていると思います
アップデート
これが設定です(明らかな理由でいくつかの名前を変更しました)
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net"
xmlns:db="http://www.springframework.net/database">
<!-- Referenced by main application context configuration file -->
<description>
Config for Database 1
</description>
<!-- Property placeholder configurer for database settings -->
<object type="Spring.Objects.Factory.Config.PropertyPlaceholderConfigurer, Spring.Core">
<property name="ConfigSections" value="databaseSettings"/>
</object>
<!-- Database Configuration -->
<db:provider id="FirstDbProvider"
provider="MySql"
connectionString="Database=xxxxx;Host=xxxxxxx;Username=xxxxxx;Password=xxxxxx"/>
<!-- NHibernate Configuration -->
<object id="FirstSessionFactory" type="Utils.Hibernate.CustomLocalSessionFactoryObject, Utils">
<property name="DbProvider" ref="FirstDbProvider"/>
<property name="MappingAssemblies">
<list>
<value>FirstDao.Dao</value>
</list>
</property>
<property name="HibernateProperties">
<dictionary>
<entry key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/>
<entry key="dialect" value="NHibernate.Dialect.MySQLDialect"/>
<entry key="connection.driver_class" value="NHibernate.Driver.MySqlDataDriver"/>
<entry key="use_proxy_validator" value="false" />
<entry key="show_sql" value="true"/>
<entry key="format_sql" value="false"/>
<entry key="generate_statistics" value="false"/>
<entry key="adonet.batch_size" value="20"/>
<entry key="hbm2ddl.auto" value="update"/>
<entry key="prepare_sql" value="true"/>
</dictionary>
</property>
<property name="ExposeTransactionAwareSessionFactory" value="true" />
</object>
<!-- Transaction Management Strategy - local database transactions -->
<object id="transactionManager"
type="Spring.Data.NHibernate.HibernateTransactionManager, Spring.Data.NHibernate32">
<property name="DbProvider" ref="FirstDbProvider"/>
<property name="SessionFactory" ref="FirstSessionFactory"/>
</object>
<!-- Exception translation object post processor -->
<object type="Spring.Dao.Attributes.PersistenceExceptionTranslationPostProcessor, Spring.Data"/>
<!-- Data Access Objects -->
<object id="firstDao" type="FirstDao.Dao.MyDao, HRDataCheck.Dao">
<property name="SessionFactory" ref="FirstSessionFactory"/>
</object>
</objects>
これが私の2番目のファイルです(他のDBProvider用)
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net"
xmlns:db="http://www.springframework.net/database">
<!-- Database Configuration -->
<db:provider id="SecondDbProvider"
provider="MySql"
connectionString="Database=xxxxxx;Host=xxxxxx;Username=xxxxx;Password=xxxxxxxx"/>
<!-- NHibernate Configuration -->
<object id="SecondSessionFactory" type="Utils.Hibernate.CustomLocalSessionFactoryObject, Utils">
<property name="DbProvider" ref="SecondDbProvider"/>
<property name="MappingAssemblies">
<list>
<value>SecondDao.Dao</value>
</list>
</property>
<property name="HibernateProperties">
<dictionary>
<entry key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/>
<entry key="dialect" value="NHibernate.Dialect.MySQLDialect"/>
<entry key="connection.driver_class" value="NHibernate.Driver.MySqlDataDriver"/>
<entry key="use_proxy_validator" value="false" />
<entry key="show_sql" value="true"/>
<entry key="format_sql" value="false"/>
<entry key="generate_statistics" value="false"/>
<entry key="adonet.batch_size" value="20"/>
<entry key="prepare_sql" value="true"/>
</dictionary>
</property>
<property name="ExposeTransactionAwareSessionFactory" value="true" />
</object>
<!-- Data Access Objects -->
<object id="secondDao" type="Blah.SecondDao, SecondDaoAssembly">
<property name="SessionFactory" ref="SecondSessionFactory"/>
</object>
</objects>