-2

春に複数のデータソースで同じ永続化ユニットを使用することは可能ですか?

例えば。2 つのデータベースがあります。それらは異なるサーバー上にあります。1 つは書き込み操作 (挿入、更新、削除など) 専用で、もう 1 つは読み取り操作専用です。どちらも同じ構造を使用しています。では、両方に 1 つの永続ユニットを使用できますか?

私の問題を解決するこのReplicationDriverを見つけました。マスターサーバーとスレーブサーバーを定義するだけで、コード側では@Transaction(readOnly=true)を定義するだけです。したがって、トランザクションがreadOnly=trueの場合、マネージャーはスレーブを使用し、それ以外の場合は、connector/jのドキュメントに従ってマスターを使用します。このTomcatを使用すると、データベースに接続できません。つまり、何も起こらないのを待つだけです。これは私のApache Tomcat context.xml

<?xml version='1.0' encoding='utf-8'?>
<Context>
    <WatchedResource>WEB-INF/web.xml</WatchedResource>

    <Resource 
        auth="Container" 
        driverClassName="com.mysql.jdbc.ReplicationDriver" 
        maxActive="250" 
        maxIdle="100"
        maxWait="30"
        validationQuery="select 1"
        name="mysql/test" 
        type="javax.sql.DataSource" 
        url="jdbc:mysql:replication://address=(host=master)(user=root)(password=mroot),address=(host=slave)(user=root)(password=sroot)/test?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=UTF8&amp;failOverReadOnly=false&amp;maxReconnects=10" 
    />
</Context>

そして、これは私の春のcontext.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:jee="http://www.springframework.org/schema/jee"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />

    <tx:annotation-driven/>

    <bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter"/>

    <jee:jndi-lookup id="dataSource" jndi-name="mysql/test" expected-type="javax.sql.DataSource" />

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="persistenceUnitName" value="test_pu" />
        <property name="dataSource" ref="dataSource"/>
        <property name="jpaVendorAdapter" ref="jpaVendorAdapter" />
    </bean>

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
    </bean> 
    <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
</beans>

私の間違いは何ですか?tomcat が db に接続できないのはなぜですか? ところで、eclipslinkプロバイダーv2.4.0を使用してください

アップデート

理由はわかりませんが、jdbc:mysql://addressこの形式を使用すると、プログラムがデータベースに接続できず、以下の例外が発生します

Caused by: java.lang.NullPointerException
    at com.mysql.jdbc.NonRegisteringDriver.parseHostPortPair(NonRegisteringDriver.java:204)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2235)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2284).

ただし、jdbc:mysql://host1,host2形式を使用すると、接続に成功しました。2 番目のバージョンを使用する場合、接続ごとに同じユーザー名とパスワードを使用する必要がありますが、最初のバージョンでは異なるユーザー名とパスワードを定義できます。MySQL Connector Jのドキュメントによると

以下は、MySQL サーバーに接続する JDBC URL の代替形式です。IPv6 接続には必須ですが、IPv4 でも使用できます (角括弧 ([ ]) 内の項目はオプションです)。

jdbc:mysql://アドレス=(キー1=値)[(キー2=値)]...[,アドレス=(キー3=値)[(キー4=値)]...]...[/[データベース]]» [?propertyName1=propertyValue1[&propertyName2=propertyValue2]...]

これは、IP4 でも機能しますが、機能しないことを意味します。設定を見逃しているものはありますか?

4

1 に答える 1

-2

私の知る限りでは、それは不可能です 詳細については、以下のリンクを参照してください: Exalained why not

于 2016-11-22T08:04:42.500 に答える