Ⅰ 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.....等等