前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《Spring实战》摘录 - 19

《Spring实战》摘录 - 19

作者头像
用户1335799
发布2019-05-28 20:23:46
3740
发布2019-05-28 20:23:46
举报

181

Q: #10.2.1 | JNDI是什么

A: Java命名和目录接口(Java Naming and Directory Interface,缩写JNDI),是Java的一个目录服务应用程序界面(API),它提供一个目录系统,并将服务名称与对象关联起来,从而使得开发人员在开发过程中可以使用名称来访问对象。

182

Q: #10.2.2-1 | 常用的数据库连接池有哪些

A:

  • Apache Commons DBCP (http://jakarta.apache.org/commons/dbcp);
  • c3p0 (http://sourceforge.net/projects/c3p0/) ;
  • BoneCP (http://jolbox.com/) 。
  • Druid( https://github.com/alibaba/druid)

183

Q: #10.2.2-2 | bean的方式配置连接池

A:

代码语言:javascript
复制
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  p:driverClassName="org.h2.Driver"  p:url="jdbc:h2:tcp://localhost/~/spitter"  p:username="sa"  p:password=""  p:initialSize="5"  p:maxActive="10" />

184

Q: #10.2.2-3 | Java的方式配置连接池

A:

代码语言:javascript
复制
@Beanpublic BasicDataSource dataSource() {  BasicDataSource ds = new BasicDataSource();  ds.setDriverClassName("org.h2.Driver");  ds.setUrl("jdbc:h2:tcp://localhost/~/spitter");  ds.setUsername("sa");  ds.setPassword("");  ds.setInitialSize(5);  ds.setMaxActive(10);  return ds;}

185

Q: #10.2.2-4 | BasicDataSource的池配置属性

A:

  • initialSize --- 池启动时创建的连接数量
  • maxActive --- 同一时间可从池中分配的最多连接数。如果设置为0,表示无限制
  • maxIdle --- 池里不会被释放的最多空闲连接数。如果设置为0,表示无限制
  • maxOpenPreparedStatements --- 在同一时间能够从语句池中分配的预处理语句(prepared statement)的最大数量。如果设置为0,表示无限制
  • maxWait --- 在抛出异常之前,池等待连接回收的最大时间(当没有可用连接时)。如果设置为-1,表示无限等待
  • minEvictableIdleTimeMillis --- 连接在池中保持空闲而不被回收的最大时间
  • minIdle --- 在不创建新连接的情况下,池中保持空闲的最小连接数
  • poolPreparedStatements --- 是否对预处理语句(prepared statement)进行池管理(布尔值)

186

Q: #10.2.3-1 | 在Spring中,通过JDBC驱动定义数据源是最简单的配置方式。Spring提供了三个这样的数据源类(均位于org.springframework.jdbc.datasource包中)供选择:

A:

  • DriverManagerDataSource:在每个连接请求时都会返回一个新建的连接。与DBCP的BasicDataSource不同,由DriverManagerDataSource提供的连接并没有进行池化管理;
  • SimpleDriverDataSource:与DriverManagerDataSource的工作方式类似,但是它直接使用JDBC驱动,来解决在特定环境下的类加载问题,这样的环境包括OSGi容器;
  • SingleConnectionDataSource:在每个连接请求时都会返回同一个的连接。尽管SingleConnectionDataSource不是严格意义上的连接池数据源,但是你可以将其视为只有一个连接的池

187

Q: #10.2.3-2 | 推荐使用数据库连接池的原因

A: 因为SingleConnectionDataSource有且只有一个数据库连接,所以不适合用于多线程的应用程序,最好只在测试的时候使用。而DriverManagerDataSource和SimpleDriverDataSource尽管支持多线程,但是在每次请求连接的时候都会创建新连接,这是以性能为代价的。鉴于以上的这些限制,我强烈建议应该使用数据源连接池。

188

Q: #10.2.5-1 | 借助Spring的profile特性能够在运行时选择数据源

A:

代码语言:javascript
复制
package com.habuma.spittrconfigimport org.apache commons.dbep.BasicDataSource;import javax.sql.DataSource;import org.springframework context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework context.annotation.Profile;import org.springframework.jdbcdatasource embedded.EmbeddedDatabaseBuilder; import org.springframework.jdbc..embedded.EmbeddedData; import org.springframework.jndi.UndiobjectFactoryBean;
@Configurationpublic class DataSourceConfiguration  @Profile("development")//开发数据源  @Bean  public Datasource embeddedDataSource (){    return new EmbeddedDatabaseBuilder ()                .setType(EmbeddedDatabaseType.H2)                .adscript("classpath:schema.sql")                .adsCript("classpath:test-data.sql")                .build();  }
  @Profile("qa")//QA数据源  @Bean  public DataSource Data(){    BasicDataSource ds new BasicDatas()    ds.setDriverclassName("org.h2.Driver"):    ds.setUrl("jdbc: h2: tcp: ///~/spitter");    ds.setUsername("sa");    ds.setPassword("");    ds.setInitialsize(5);    ds.setMaxActive(10);    return ds;  }
  @Profile("production")//生产环境数据源  @Bean  public DataSource dataSource(){    JndiobjectFactoryBean jndiobjectFactoryBean = new JndiobjectFactoryBean();     jindiobjectFactoryBean.setJndiName("jdbc/SpittrDS");    jindiobjectFactoryBean.setResourceR(true);    jindiobjectFactoryBean.setProxyInter(javax.sql.DataSource.class);     return(Datasource)jindiobjectFactoryBean.getobject();  }}

189

Q: #10.2.5-2 | 借助XML配置,基于profile选择数据源

A:

代码语言:javascript
复制
<?xml version="1. 0" encoding="UTF-8"?> <beans xmlns="http: //www.spr org/schema/beans"  xmIns: xsi="http://www.w3.org/2001/XMLSchema-instance"  xmins: jdbe="http: //www. springfrar, org/schema/jabe"  xmIns: jee="http: //www.springfram, org/schema/jee"  xmins: p="http: //www. springfram. org/schema/p"  xsi: schemaLocation="http: //www.springframework. org/schema/jdbc  http: //www. springframework. org/scher/jdbc/spring-jdbc-31.xsd  http: //www.springframework.org/schema/jee  http: //www.springframework. org/schema/jee/spring-jee-3.1.xsd  http: //www. springframework. org/:/beans  http: //www.springframework. org/schema/beans/spring-beansxsd">  <beans profiledevelopment><!-- 开发数据源 -->    <jdbc: embedded-database id="datasource"type="H2">      <jdbc: script location="com/hab uma/spitter/db/jdbc/schema.sql"/>      <jdbc: script location="com/habum a/spitter/ab/jdbc/test-data. sql"/>    </jdbc: embedded-database>   </beans>  <beans profile="ga">    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"      p:driverclassName="org.h2.Driver"      p:url="jdbc:h2:tcp://localhost~/spitter"      p:username="sa"      p:password=""      p:initialsize="5"      p:maxActive="10"/>   </beans>  <beans profile="production">    <jee:jndi-lookup id="datasource" jndi-name="/jdbc/SpitterDS" resource-ref="true"/>  </beans></beans>

190

Q: #11-1 | Spring对ORM框架的支持提供了与这些框架的集成点以及一些附加的服务

A:

  • 支持集成Spring声明式事务;
  • 透明的异常处理;
  • 线程安全的、轻量级的模板类;
  • DAO支持类;
  • 资源管理。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 怀英的自我修炼 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档