當前位置:首頁 » 數據倉庫 » spring配置兩個資料庫
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

spring配置兩個資料庫

發布時間: 2022-07-08 02:22:51

Ⅰ spring mvc 怎麼配置多個庫

場景描述:有多個資料庫,每個資料庫可能分布在不同的mysql instance上面,有多個存儲過程,每個存儲過程可能分布在不同的資料庫中,需要有兩個配置文件。

1. mysql 資料庫映射:
A.driverClassName=com.mysql.jdbc.Driver
A.url=jdbc:mysql://172.20.7.51:3308/blog
A.username=trappuser
A.password=Opera1!

B.driverClassName=com.mysql.jdbc.Driver
B.url=jdbc:mysql://localhost:3306/wedding
B.username=root
B.password=opera
上面定義的A、B為兩個mysql instance的縮寫。
2. 存儲過程與mysql instance的映射關系:
SP_Get_User=A
GetStocks=B

定義兩個模擬存儲過程,第一個資料庫「SP_Get_User「是在資料庫A下面,第二個資料庫」GetStocks「是在資料庫B下面。
3. 建立自定義的sessionFactory
3.1 xml配置的datasource及sessionFactory如下:
<bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource">
<property name="driverClassName" value="${database.driverClassName}"/>
<property name="url" value="${database.url}"/>
<property name="username" value="${database.username}"/>
<property name="password" value="${database.password}"/>
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan" value="com.xx.assetcommander">
</property>

<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>

</property>
</bean>
此處我們定義的sessionFactory的類型為LocalSessionFactoryBean,它是一個工廠對象,與我們再需要的 SessionFactory不是一回事,我們需要的sessionfactory是org.hibernate.SessionFactory,這個對象可以被第一個sessionFactory的getObject()方法生成。

3.2 由於我們連接的是多個mysql instance, 不方便在xml中配置多個datasource和多個sessionFactory,故可以通過純java的形式開發,可以使用map來存儲存儲過程與mysql database的關系,將存儲過程的名字和資料庫建議關系,這樣通過存儲過程的名稱就能得到資料庫的縮寫名,通過資料庫的縮寫名能夠找到對應的mysql instance,使用純java開發的過程類似於xml配置,如下:
ds.setDriverClassName(getDriver());
ds.setUrl(getUrl());
ds.setUsername(getUsername());
ds.setPassword(getPassword());
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(ds);
sessionFactory.setPackagesToScan("com.xx.assetcommander");
Properties params = new Properties();
params.setProperty("hibernate.dialect",
"org.hibernate.dialect.MySQLDialect");
params.setProperty("hibernate.show_sql", "true");
sessionFactory.setHibernateProperties(params);

當我們獲得可以使用的LocalSessionFactoryBean時候,在調用getObject()獲得SessionFactory之前,必須要調用afterPropertiesSet()方法,否則得到的sessionFactory為空。
public Session getDsBySp(String spName) throws IOException {
//get the corresponding mysql database shortname by sp name
String dbName = getDbForSP(str);
//get the corresponding mysql instance connection by mysql database shortname
LocalSessionFactoryBean fB = getDsByDb(dbName);
// don't forget this line or null will be returned when you call getObject() method.
fB.afterPropertiesSet();
return fB.getObject().openSession();
}

註:在tomcat啟動時,如果沒有配置任何datasource,會出現如下錯誤:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [javax.persistence.EntityManagerFactory] is defined
故需要配置默認的datasource.
這種方式需要做到不同的資料庫instance直接業務的完全獨立,不可以出現跨資料庫的表join,否則處理難度會增加。
還有就是對於多資料庫直接的事務管理如何去處理?

Ⅱ springboot application.yml 怎麼配置2個資料庫連接

Spring Boot 是 Spring 產品中一個新的子項目,致力於簡便快捷地搭建基於 Spring 的獨立可運行的應用。大多數的 Spring Boot 應用只需要非常少的 Spring 配置。 你能夠使用 Spring Boot 創建 Java 應用並通過 java -jar 來運行或者創建傳統的通

Ⅲ spring jpa怎麼配置2個資料庫

試試下面的配置
文件配置如下:
applicationContext.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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<context:annotation-config></context:annotation-config>
<!--自動匹配${**}與classpath:jdbc.properties的值-->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:jdbc.properties"></property>
</bean>
<!-- 資料庫池 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="url" value="${db.url}"></property>
<property name="driverClassName" value="${db.driverclass}"></property>
<property name="username" value="${db.username}"></property>
<property name="password" value="${db.password}"></property>
<property name="maxActive" value="${db.maxActive}"></property>
<property name="maxIdle" value="${db.maxIdle}"></property>
<property name="maxWait" value="${db.maxWait}"></property>
<property name="minIdle" value="${db.minIdle}"></property>
</bean>
<!-- 實體管理工廠 -->
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.">
<!-- myPersistenceXml對應persistence.xml中的persistence-unit name的值 -->
<property name="persistenceUnitName" value="myPersistenceXml"></property>
<!-- persistenceXmlLocation persistence.xml存放路徑 -->
<property name="persistenceXmlLocation" value="META-INF/persistence.xml"></property>
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 事務管理 -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<!-- 事務管理驅動 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
<!-- 自動掃描匹配 -->
<context:component-scan base-package="org.jinsheng."></context:component-scan>
</beans>

persistence.xml
如果為java program 要所此文件放到 src/META-INF目錄下,注意大寫。

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="myPersistenceXml">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<!-- 說明資料庫池不在本配置文件中配置 -->
<non-jta-data-source></non-jta-data-source>
<!-- 實體類文件 -->
<class>org.jinsheng.jpa.entity.Person</class>
<!-- <properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9Dialect"/>
</properties> -->
</persistence-unit>
</persistence>

jdbc.properties

db.url=jdbc:oracle:thin:@localhost:1521:oracle
db.driverclass=oracle.jdbc.driver.OracleDriver
db.username=pjsh
db.password=pjsh
db.maxActive=10
db.maxIdle=5
db.maxWait=4
db.minIdle=2

Ⅳ 連接兩個資料庫 spring配置文件怎麼配置

配置多個數據源信息,比如dataSource1, dataSource2, dataSource3等等。 自定義一個動態數據源類,同時注入以上這些數據源以及相應的標志,一般用Map區分 利用動態數據源類來拿到相應的數據源操作

Ⅳ spring 怎麼動態配置 連接不同的資料庫.oracle 或是mysql

不知道你說的動態配置是怎樣的

---------------------------------spring配置文件--------------------------------------------

<!--從根路徑下的db.properties載入數據源信息-->
<context:property-placeholder
ignore-unresolvable="true"location="classpath:db.properties"/>
<!--數據源配置,使用DBCP資料庫連接池-->
<beanid="dataSource"class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<!--ConnectionInfo-->
<propertyname="driverClassName"value="${jdbc.driver}"/>
<propertyname="url"value="${jdbc.url}"/>
<propertyname="username"value="${jdbc.user}"/>
<propertyname="password"value="${jdbc.password}"/>
<propertyname="maxActive"value="${dbcp.maxActive}"/>
<propertyname="maxIdle"value="${dbcp.maxIdle}"/>
<propertyname="timeBetweenEvictionRunsMillis"value="3600000"/>
<propertyname="minEvictableIdleTimeMillis"value="3600000"/>
</bean>

-------------------------------------db.properties--------------------------------------

//把driver改成oracle的,下面也相應改成oracle的信息就能把數據源設置為oracle
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://172.19.0.127:8066/addl
jdbc.user=root
jdbc.password=
dbcp.maxActive=10
dbcp.maxIdle=10

Ⅵ spring 怎麼動態配置 連接不同的資料庫。oracle 或是mysql

這個在spring的 applicationComtext.xml文件里配置(一般是這個文件 你也可以把他改為其他文件名),

#
hibernate.dialect=org.hibernate.dialect.OracleDialect
validationQuery.oracle=SELECT1FROMDUAL
jdbc.url.crm=jdbc:oracle:thin:@localhost:1521:orcl
jdbc.username.crm=crm
jdbc.password.crm=crm
jdbc.dbType=oracle


#
#hibernate.dialect=org.hibernate.dialect.MySQLDialect
#validationQuery.sqlserver=SELECT1
#jdbc.url.crm=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
#jdbc.username.crm=root
#jdbc.password.crm=root
#jdbc.dbType=mysql

//配置數據源
<beanid="dbcp_dataSource"destroy-method="close"class="org.apache.commons.dbcp.BasicDataSource">
<propertyname="driverClassName"value="${jdbc.driverClassName}"/>
<propertyname="url"value="${jdbc.url.crm}"/>
<propertyname="username"value="${jdbc.username.crm}"/>
<propertyname="password"value="${jdbc.password.crm}"/>
</bean>-->

在這里你可以多配置幾個數據源
。。。。

然後就可以動態的修改數據源集合了
<beanid="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<propertyname="dataSource"ref="dbcp_dataSource"/>
<!--ORM映射文件:mappingResources-->
<!--ORM目錄-->
<propertyname="mappingDirectoryLocations">
<value>classpath:com/zakhas/ospm/model/hbm/</value>
</property>


這里的dbcp_dataSource是我的oracle資料庫,你可以在這里切換其他的資料庫。
因為涉及到一些項目,我做了些改動,可能有些錯誤,不知道你看懂了啵

Ⅶ 在spring文件中如何配置連接多個資料庫,如下是已經配置了一個資料庫,如何加另外的資料庫

..一般我是
吧xml
配置文件
不同
功能
配在
不同的
xml文件
裡面。這樣看的清楚寫。用哪個就在
xml文件裡面
調用另外的xml文件就可以了。

Ⅷ java程序控制spring jdbc連接兩個資料庫

在spring中配置連個datasource或是jndi,創建一個工廠類或是工具類,根據不同的請求,從不同的連接池中獲得連接。

Ⅸ springmvc spring hibernate 怎麼配置連接兩個資料庫

persistent.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<persistence-unit name="userPU" transaction-type="RESOURCE_LOCAL">
<!--jpa的提供者-->
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<!--聲明資料庫連接的驅動-->
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<!--jdbc資料庫的連接地址-->
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/manager?characterEncoding=gbk"/>
<property name="hibernate.connection.username" value="root"/>
<property name="hibernate.connection.password" value="123456"/>
<!--配置方言-->
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
<!--激活查詢日誌功能-->
<property name="hibernate.show_sql" value="true"/>
<!--優雅地輸出Sql-->
<property name="hibernate.format_sql" value="true"/>
<!--添加一條解釋型標注-->
<property name="hibernate.use_sql_comments" value="false"/>
<!--配置如何根據java模型生成資料庫表結構,常用update,validate-->
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
</persistence>
applicationContext.xml配置
<!--第二步-->
<!--定義實體的工廠bean-->
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.">
<property name="persistenceUnitName" value="userPU" />
<property name="persistenceXmlLocation" value="classpath:persistence.xml"></property>
</bean>

<!--第三步-->
<!--定義事務管理器-->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>

Ⅹ Spring中如何配置多個資料庫連接

<!-- 數據源配置,使用應用內的DBCP資料庫連接池 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<!-- Connection Info -->
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />

<!-- Connection Pooling Info -->
<property name="maxIdle" value="${dbcp.maxIdle}" />
<property name="maxActive" value="${dbcp.maxActive}" />
<property name="defaultAutoCommit" value="false" />
<property name="timeBetweenEvictionRunsMillis" value="3600000" />
<property name="minEvictableIdleTimeMillis" value="3600000" />
</bean>
然後 寫個application.properties文件
配置多個資料庫的jdbc.driver.....等等