springboot如何配置多个jndi数据源 如何在spring配置多个数据源
springboot如何配置多个jndi数据源
代码:
/**
* 获取数据库连接方法
*/
public Connection getConn() throws
Exception {
Connection conn = null
try {
//connection原始的连接方式可以转换为OracleConnection
Connection con =
this.commonDao.getCurrentConnection()
Connection conWas = null
if(this.wasConnection){//使用tomcat请把biz-context-finance.xml中的wasConnection的值设置为false
注释掉biz-context-core.xml中的id="websphereForOracleConnection"内容
WebSphereNativeJdbcExtractor websphereForOracleConnection =
(WebSphereNativeJdbcExtractor)SpringUtils.getSpringBean("websphereForOracleConnection")
conWas = websphereForOracleConnection.getNativeConnection(con)
}else{
conWas = con
}
conWas.setAutoCommit(false)
conn =
conWas.getMetaData().getConnection()
} catch (DaoException e) {
e.printStackTrace()
}
return conn
}
如何在spring配置多个数据源
给你一个例子:
context.xml
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-2.0.xsd">
package util
public class DbContextHolder {
private static final ThreadLocal contextHolder = new ThreadLocal()
public static void setDbType(String dbType) {
contextHolder.set(dbType)
}
public static String getDbType() {
return (String) contextHolder.get()
}
public static void clearDbType() {
contextHolder.remove()
}
}
package util
import java.sql.SQLException
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource
public class DynamicDataSource extends AbstractRoutingDataSource {
//static Logger log = Logger.getLogger("DynamicDataSource")
@Override
protected Object determineCurrentLookupKey() {
// TODO
return DbContextHolder.getDbType()
}
@Override
public boolean isWrapperFor(Class> iface) throws SQLException {
// TODO Auto-generated method stub
return false
}
@Override
public
// TODO Auto-generated method stub
return null
}
}
测试程序:
DbContextHolder.setDbType("1")
UserDomain od = this.testService.queryUserAccount("admin")
System.out.println("username==" od.getName())
DbContextHolder.setDbType("0")
d = this.testService.queryUserAccount("admin")
springboot怎样动态配置数据库并设置默认数据源?
1,需要配置DynamicDataSource,DynamicDataSourceAspect,DynamicDataSourceContextHolder,DynamicDataSourceRegister,TargetDataSource来完成多数据源的配置 2,需要在配置文件中定义多数据源 3,测试过只有在前端调用过程中能够用多数据源,如果在各个中心去配置是行不通的,已经亲测过了。可以看看csdn上的我的这篇文章: spring boot动态数据源配置
spring boot怎么连接多种数据库
新建Spring Boot项目,依赖选择JPA(spring-boot-starter-data-jpa)和Web(spring-bootstarter-web)。
配置基本属性 在application.properties里配置数据源和jpa的相关属性
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springboot
spring.datasource.username=root
spring.datasource.password=123456
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jackson.serialization.indent_output=true
定义映射实体类
定义Controller类
@RestControllerpublic class PersonCtroller {
@Autowired PersonServer personServer
@RequestMapping("/rollback")
public Person rollback(Person person){
return personServer.savePersonWithRollBack(person)
}
@RequestMapping("/norollback")
public Person noRollback(Person person){
return personServer.savePersonWithOutRollBack(person)
}
}
定义数据访问层
public interface PersonRepository extends JpaRepository{} 定义Server层 @Servicepublic class PersonServerImp implements PersonServer { @Autowired PersonRepository personRepository @Transactional(rollbackFor = {IllegalArgumentException.class}) @Override public Person savePersonWithRollBack(Person person) { Person p = personRepository.save(person) if (p.getName().equals("xxx")){ throw new IllegalArgumentException("用户已存在,数据会回滚") } return p } } 7 浏览器访问
如何在一个Spring工程下使用多数据源配置的改进实现
当然还需要记着在web.xml里为每个sessionFactory配置对应的openSessionInViewFilter
然后在程序中,通过将对某个数据库操作的DAO统一继承某个基础DAO类,此DAO继承org.springframework.orm.hibernate3.support.HibernateDaoSupport,实现如下方法,参数是
SessionFactory,通过@Resource注解,把某个数据库对应的SessionFactory对象,注入到这个方法中来,然后再这个方法中调
用父类HibernateDaoSupport中的setSessionFactory(SessionFactory
sessionFactory)方法把sessionFactory对象传递进去(不重写是因为HibernateDaoSupport的这个方法是final的)。
其实Spring本身提供了动态数据源的抽象实现类org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSourc
e,你需要做的就是依据自己的应用去实现具体的方法。
以本文最初的需求为例,我们来看看通过继承AbstractRoutingDataSourc
首先创建一个枚举类,设置不同的dataSource类别。
接下来创建一个类,来在Context里设置和持有数据源类型,在这个需求里,并发的不同的DAO调用,会根据DAO的不同连接不同的数据库,因此我们通过ThreadLocal来维护这个DataSourceType变量,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。
最后就是实现定制的继承AbstractRoutingDataSource的实现类
接下来就是在applicationContext.xml里配置这么一个数据源来管理两个dataSource。
先配置两个独立的dataSource
然后配置一个dataSource来管理这两个dataSource
其余部分都和正常的配置一个数据源管理无异,完成了配置后,改写我们的基础DAO
这样就完成了多数据源的配置,大家可以按照这个思路稍加变动,应该就可以找出实现动态切换数据源的办法了。
springboot 中druid怎么连接多个数据库
spring动态配置多数据源,即在大型应用中对数据进行切分,并且采用多个数据库实例进行管理,这样可以有效提高系统的水平伸缩性。
而这样的方案就会不同于常见的单一数据实例的方案,这就要程序在运行时根据当时的请求及系统状态来动态的决定将数据存储在哪个数据库实例中,以及从哪个数据库提取数据。