我需要一些帮助来使用相同的Persistence单元为多个db配置多个连接.
它们都具有相同的架构.因此,我想使用相同的持久性单元/ DAO等,并且不想设置10个EntityManagers,10 Persistence xml等.有没有办法做到这一点?这是我当前的配置:
Run Code Online (Sandbox Code Playgroud)<persistence-unit name="PersistenceUnit-c1" transaction-type="RESOURCE_LOCAL"> <properties> <property name="hibernate.show_sql" value="${hibernate-show-sql}"/> <property name="hibernate.dialect" value="org.hibernate.dialect.SybaseDialect" /> <property name="hibernate.c3p0.min_size" value="${hibernate-c3p0-min-size}" /> <property name="hibernate.c3p0.max_size" value="${hibernate-c3p0-max-size}" /> <property name="hibernate.c3p0.timeout" value="${hibernate-c3p0-timeout}" /> <property name="hibernate.c3p0.max_statements" value="${hibernate-c3p0-max-statements}" /> <property name="hibernate.c3p0.idle_test_period" value="${hibernate-c3p0-idle-test-periods}" /> </properties>
<class>com.domain.TktOrder</class>
<exclude-unlisted-classes/>
</persistence-unit>
Run Code Online (Sandbox Code Playgroud)
我也使用Spring/hibernate来设置我的上下文:
<bean id="EntityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
p:persistenceUnitName="PersistenceUnit-c1"
p:dataSource-ref="DataSource">
<property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"
p:showSql="${hibernate-show-sql}"
p:generateDdl="false"
p:databasePlatform="org.hibernate.dialect.SybaseDialect" />
</property>
<property name="loadTimeWeaver">
<bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
</property>
</bean>
<bean id="DataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"
p:driverClass="net.sourceforge.jtds.jdbc.Driver"
p:jdbcUrl="jdbc:jtds:sybase://url.net:port;DatabaseName=db_1"
p:user="user"
p:password="password"
/>
Run Code Online (Sandbox Code Playgroud)
最后我使用:
@PersistenceContext(unitName="PersistenceUnit-c1")
public void setEntityManager(EntityManager …Run Code Online (Sandbox Code Playgroud) 我想看看在Spring中使用一个DataSources的最佳方法是什么,但能够从Java代码中切换数据库?下面是我的两个DataSource,它们转到相同的数据库服务器但是不同的数据库.
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.sybase.jdbc3.jdbc.SybDataSource" />
<property name="url"
value="jdbc:sybase:Tds:10.20.30.40:50/DATABASE_EMS" />
<property name="username" value="userid" />
<property name="password" value="derp" />
</bean>
<bean id="dataSourceMain" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.sybase.jdbc3.jdbc.SybDataSource" />
<property name="url"
value="jdbc:sybase:Tds:10.20.30.40:50/DATABASE" />
<property name="username" value="userid" />
<property name="password" value="derp" />
</bean>
Run Code Online (Sandbox Code Playgroud)
我将它们绑定到各自的bean但是我正在查看我的遗留代码,并且使用2个单独的bean实现它将非常尴尬.有关如何在需要时使用一个DataSource和切换数据库的想法/想法吗?
目前正在开发一个项目,其中我的 Spring Boot 项目需要利用同一数据库服务器中的多个数据源或架构。我发现了几个在 Spring Boot 中教授多个数据源配置的教程,其中实体 foo 存在于数据源 A 中,而 bar 存在于数据源 B 中,如下所示。
https://scattercode.co.uk/2016/01/05/multiple-databases-with-spring-boot- and-spring-data-jpa/ https://scattercode.co.uk/2013/11/18/ spring-data-multiple-databases/ https://medium.com/@joeclever/using-multiple-datasources-with-spring-boot-and-spring-data-6430b00c02e7
但我的用例是实体 foo 和 bar 存在于多个模式中,我想使用单个实体和存储库来访问所有模式。数据不会在所有模式中复制。它是在它们之间划分的。
因此,如果我需要搜索用户 John Doe,我必须遍历架构 1,如果找不到他,请转到下一个架构。
我已经尝试了上述所有教程(即使它们与我的用例不符),希望我可以破解它以使其工作,就像概念证明一样。我还研究了 AbstractRoutingDataSource ( http://fizzylogic.nl/2016/01/24/make-your-spring-boot-application-multi-tenant-aware-in-2-steps/,http://kimrudolph. de/blog/spring-datasource-routing)和 MultiTentancy,但这两者都谈论在任何时间点访问单个模式。我只需要一些指导或链接即可完成此任务。
提前致谢。
java ×3
spring ×3
datasource ×1
hibernate ×1
jdbc ×1
jdbctemplate ×1
jpa ×1
multi-tenant ×1
mysql ×1
spring-boot ×1
spring-data ×1
spring-jdbc ×1