- 浏览: 839942 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
renzhengzhi:
请教一下楼主,公有云和私有云的开发,具体要做哪些工作呢?我拿到 ...
4,云的4 种模式 -
SangBillLee:
我用了solr5.5,用SolrQuery查询,没法高亮,不知 ...
solr5.x快速入门 -
lw900925:
这翻译读起来真是别扭。
solr in action翻译-第一章1.1 -
springjpa_springmvc:
spring mvc demo教程源代码下载,地址:http: ...
Spring MVC性能提升 -
h416373073:
正遇到了此问题不知如何解决, 多谢分享
solr错误
在是使用spring时候,常常配置数据源,
<bean id="dataSource" class ="org.springframework.jdbc.datasource.DriverManagerDataSoruce"> <property name="driverClassName" value="org.apache.derby.jdbc.ClinetDriver"> <property name="url" value="jdbc:derby://localhost:1527/news;create=true"> <property name="username" value="admin"> <property name="password" value="admin"> </bean>
在配置文件中共有四个需要注入的属性,在org.springframework.jdbc.datasource.DriverManagerDataSoruce这个类
中,共有5个属性
private String driverClassName; private String url; private String username; private String password; private Properties connectionProperties;
其实用构造方法注入的方式也是可以的,因为spring除了生成setter方法外,也给我们提供了构造函数,
public DriverManagerDataSource(String driverClassName, String url, String username, String password) throws CannotGetJdbcConnectionException { setDriverClassName(driverClassName); setUrl(url); setUsername(username); setPassword(password); }
其中的前四个是数据库连接的基本配置,而最后一个connectionProperties是通过配置文件properity读取数据库的连接配置,
看DriverManagerDataSoruce这个类是如何获取connection连接 就明白了
protected Connection getConnectionFromDriverManager(String url, Properties props) throws SQLException { if (logger.isDebugEnabled()) { logger.debug("Creating new JDBC Connection to [" + url + "]"); } return DriverManager.getConnection(url, props); } protected Connection getConnectionFromDriverManager(String username, String password) throws SQLException { Properties props = new Properties(getConnectionProperties()); if (username != null) { props.setProperty("user", username); } if (password != null) { props.setProperty("password", password); } return getConnectionFromDriverManager(getUrl(), props); }
其中DriverManagerDataSoruce这个类本身又继承至AbstractDataSource这个类,AbstractDataSource这个类继承至
javax.sql.DataSource类,在AbstractDataSource这个类中,什么也没做,只是一个简单的抽象类,并有几个简单的方
法,
public abstract class AbstractDataSource implements DataSource { protected final Log logger = LogFactory.getLog(getClass()); /** * Returns 0: means use default system timeout. */ public int getLoginTimeout() throws SQLException { return 0; } public void setLoginTimeout(int timeout) throws SQLException { throw new UnsupportedOperationException("setLoginTimeout"); } /** * LogWriter methods are unsupported. */ public PrintWriter getLogWriter() { throw new UnsupportedOperationException("getLogWriter"); } /** * LogWriter methods are unsupported. */ public void setLogWriter(PrintWriter pw) throws SQLException { throw new UnsupportedOperationException("setLogWriter"); } }
返回来再看DriverManagerDataSource这个类,其实DriverManagerDataSource并不是一个有效的数据源实现,因为每
次被请求的时候都要为客户端打开一个新的连接。 spring提供了另一种实现是SingleConnectionDataSource,顾名思义,它只保留单一连接,总是重用该连接,永不关闭,这个显然不适合多线程环境。
public class SingleConnectionDataSource extends DriverManagerDataSource
implements SmartDataSource, DisposableBean
SingleConnectionDataSource 本身又具有DriverManagerDataSource的所有属性,所以可以说
SingleConnectionDataSource 是DriverManagerDataSource的扩展和延伸,可以看到SingleConnectionDataSource 除
了继承DriverManagerDataSource外,本身又实现了俩个借口SmartDataSource和DisposableBean,下面先分别介绍这俩
个接口然后返回来介绍SingleConnectionDataSource 这个类.
SmartDataSource继承至javax.sql.DataSource这个接口,只是提供了一个方法
boolean shouldClose(Connection con);定义是否可以关闭连接。
DisposableBean接口也是定义了一个方法 void destroy() throws Exception;
方法的作用是在被调用BeanFactory时销毁一个连接,
返回看SingleConnectionDataSource类,先看这俩个接口是如何实现 。
/** * This is a single Connection: Do not close it when returning to the "pool". */ public boolean shouldClose(Connection con) { synchronized (this.connectionMonitor) { return (con != this.connection && con != this.target); } }
看这个实现就明白,不用多说。在看另一个实现类
public void destroy() { synchronized (this.connectionMonitor) { closeConnection(); } }
其中synchronized (this.connectionMonitor) 是同步的作用,防止死锁。
connectionMonitor的定义很简单
/** Synchronization monitor for the shared Connection */ private final Object connectionMonitor = new Object();
/** * Close the underlying shared Connection. */ private void closeConnection() { if (this.target != null) { try { this.target.close(); } catch (Throwable ex) { logger.warn("Could not close shared JDBC Connection", ex); } } }
发表评论
-
Spring的PropertyPlaceholderConfigurer应用
2014-01-02 14:43 8331. PropertyPlaceholderConfigur ... -
spring 发送MAILJavaMailSenderImpl
2014-01-02 14:32 892spring对mail的支持是org.springframe ... -
spring REST中的内容协商ContentNegotiatingViewResolver
2014-01-02 14:23 1688一.REST内容协商介绍 RESTfu ... -
Spring MVC异常处理
2014-01-02 14:13 473Spring3.0中对异常的处理方法一共提供了两种:一种是使 ... -
Spring AOP 的@Aspect (转)
2013-12-19 10:04 5693转自:http://blog.csdn.net/tangh ... -
spring @component的作用
2013-12-19 09:54 9951、@controller 控制器(注入服务) 2、@se ... -
Spring MVC性能提升
2013-12-18 18:06 7131这几天在做公司内部SpringMVC的培训,培训之余看了看大 ... -
Spring MVC简介
2013-08-27 20:09 982Spring MVC简介 1.Sp ... -
SpringMVC中HandlerInterceptorAdapter的使用
2013-08-27 20:04 1993一般情况下,对来自浏览器的请求的拦截,是利用Filte ... -
Spring注解_详解
2013-08-27 20:01 930spring注解 @Autowired 注释 将 ... -
SpringMVC方法返回值的学习(注解版)
2013-08-22 09:38 1432/** * 项目名称:Spring3mvc de ... -
spring中的Log4jConfigListener作用
2013-08-21 10:40 1376使用spring中的Log4jConfigListener ... -
srping 异常
2010-11-15 14:32 1223Spring数据访问的根异常是DataAccessExcep ... -
使用spring的jdbcTemplate-----将JDBC操作建模为细粒度的对象
2010-09-11 16:32 15171,更新操作对象 首先考虑如何将User插入操作建模为一个操 ... -
使用spring的jdbcTemplate-----使用具名参数
2010-09-11 15:01 3601在JDBC用法中,SQL参数是用占位符?表示,并且受到位置的限 ... -
使用spring的jdbcTemplate-----SimpleJdbcTemplate的使用
2010-09-11 12:39 59071,用简单的JDBC模板更新数据库 传统的Jdb ... -
使用spring的jdbcTemplate-----简化JdbcTemplate模板的创建
2010-09-10 20:41 2287每次使用的时候,都要创建一个JdbcTemplate新实例,这 ... -
使用spring的jdbcTemplate-----用JDBC模板查询数据库
2010-09-10 00:26 11775JdbcTemplate类声明了几个重载的query()模板方 ... -
使用spring的jdbcTemplate-----用jdbc模板跟新数据库
2010-09-09 23:21 44991,用语句创建器更新数据库第一个回调接口是PreparedSt ... -
spring中jdbcTemplate归纳2
2010-09-07 22:01 2161用语句创建器更新数据库第一个回调接口是PerparedStat ...
相关推荐
spring mvc配置datasource数据源的三种方式,对spring的数据库连接源配置,有很大帮助,使你更加准确地了解数据源、连接池的实际使用方法
在Spring Boot应用中,多数据源配置是一项关键的技术,它允许我们同时管理多个数据库,比如主库和从库,或者不同类型的数据库。本教程将详细阐述如何在Spring Boot项目中实现这一功能,从数据源配置、实体管理到...
数据源(DataSource)在Spring中的配置对于实现持久层操作至关重要。 #### 二、Spring中的数据源配置方式 Spring框架支持多种数据源的配置方式,包括但不限于基于XML的配置、基于注解的配置以及基于Java配置的方式...
- **BasicDataSource**: Spring内置的`org.springframework.jdbc.datasource.BasicDataSource`是最常用的数据源实现,它基于Apache Commons DBCP库,提供连接池功能。 - **DataSourceTransactionManager**: 这是...
在Java Spring框架中,多数据源的实现是一个重要的特性,特别是在大型企业级应用中,它允许应用程序连接到多个数据库,从而实现数据隔离、负载均衡或读写分离等高级功能。本教程将深入探讨如何在Spring中配置和管理...
综上所述,"spring+druid+AtomikosDataSource"的组合为开发者提供了一套强大的工具,用于实现多数据源切换和分布式事务控制。在实际项目中,通过合理的配置和编码,可以构建出高效、健壮的分布式系统。在`mult-table...
3. **配置多数据源**:在Spring的XML配置文件中,我们需要定义多个DataSource bean,分别代表不同的数据库连接。这些数据源可以是Apache Commons DBCP、HikariCP、Druid等连接池的实现。例如: ```xml <!-- 配置...
Spring框架提供了强大的数据源管理能力,我们可以利用它来实现动态切换数据源。具体步骤如下: 1. **配置数据源**:首先,需要配置多个数据源。在Spring配置文件中,可以定义多个DataSource bean,每个bean代表一个...
在Spring Boot中,我们可以通过创建不同的`DataSource` bean来配置多个数据源。每个数据源通常会有一个对应的`JdbcTemplate`或`JpaEntityManagerFactory`。首先,我们需要在`application.yml`或`application....
5. **编程或声明式数据源切换**:在业务代码中,可以使用Spring的`@Resource`注解注入DataSource,然后根据需求手动切换,或者通过AOP和Spring的代理机制自动处理数据源的切换。 6. **测试与优化**:最后,对整个...
在大型分布式系统中,往往需要处理多个数据源,这就涉及到了Spring多数据源的配置和管理。同时,为了保证数据的一致性,分布式事务的管理也是必不可少的。在这个场景下,Atomikos作为一款开源的JTA(Java ...
在"spring-routing-datasource"这个文件中,可能包含了实现Spring动态数据源的示例代码,包括配置文件、路由数据源的实现以及与MyBatis的集成。通过研究这个例子,你可以更深入地理解如何在实际项目中部署和使用这种...
标题 "mybatis spring 多数据源" 涉及到的是在Java开发中,如何使用MyBatis和Spring框架来管理多个数据库连接。这通常在需要处理来自不同数据源的数据或者实现数据库读写分离的场景下应用。MyBatis是一个优秀的持久...
Spring多数据源解决方案是针对大型应用中数据分片和分布式数据库管理的需求而设计的一种策略。在这样的场景下,为了提高系统的可扩展性和性能,数据通常会被分散到多个数据库实例上。这种架构如图1所示,每个数据库...
在Spring Boot应用中,多数据源的配置与管理是一项重要的任务,特别是在大型系统中,可能需要连接到不同的数据库以满足不同业务的需求。本教程将详细讲解如何在Spring Boot项目中集成Druid连接池,并利用AOP注解实现...
在Spring Boot应用中,我们经常需要处理来自多个数据源的数据,比如在开发微服务架构时,每个服务可能对应一个特定的数据源。`JdbcTemplate`是Spring框架提供的一个用于简化数据库操作的工具,它使得数据库访问更为...
在Spring框架中,数据源(DataSource)的配置是应用程序与数据库交互的核心部分。Spring支持多种数据源配置方式,包括基本的JDBC数据源、连接池数据源以及事务管理策略等。下面将详细介绍Spring中常见的数据源配置...
在Spring Boot应用中,数据源切换是一个常见的需求,特别是在分布式系统或者微服务架构中,可能需要连接多个数据库来实现不同的业务功能。本示例“spring boot数据源切换demo”将展示如何在Spring Boot中集成MyBatis...
`dynamic-datasource-spring-boot-starter`项目正致力于解决这个问题,它是一个基于Spring Boot的启动器,用于实现动态数据源切换,提供灵活的数据源管理功能。 **动态数据源**指的是在一个应用中可以动态地选择...
如果你需要一个默认的数据源,可以设置`@Primary`注解,这样在没有指定数据源的情况下,Spring会使用这个作为默认数据源。 3. **配置第二个数据源** 对于从数据库,配置方式与主数据源类似,只是bean名称和配置...